はまったりひらめいたり…とか…

.Net系プログラムで勉強したこととか嵌ったことについて書いたりします。

AzureのVMと自社サーバーをVPNでつなげて(かんたんな)Deployをしてみる

実験的要素モリモリでございます。

ビルドサーバーのVirtualMachineはAzure上にある。

でも、検証環境は自社の閉域ネットワーク内のどこそこにある。といった場合に。

(きわめてレアだとは思いますが!)

ちなみに使用するGatewayとか高めのお値段なので

自前の閉域環境内にサーバ用意できるのであればそちらのほうが良いと思います。

どちらかというとIaaSの環境をVPNで自社VPNに接続する手法がメインとなりますし

そちら単独のほうがよくあるパターンだとは思います。

CIは「いけんじゃね?」的なフィーリングの実験です。

下図な感じの構成で今回作ってみます。

f:id:TakasDev:20171104111618p:plain

参考資料

Point To Site

docs.microsoft.com

docs.microsoft.com

docs.microsoft.com

VSTSとJenkinsをつなげるときに参考

docs.microsoft.com

blog.nextscape.net

Jenkins

Windows Serverへのインストール

Azure準備

まずはAzure上の環境を構築します。

Azure上で作成したVM仮想環境から、閉域環境内(社内等)にVPN接続できる状態まで持っていきます

[Point To Site]という手法を使用します。

Point To Site構成の作成

仮想ネットワークのアドレス空間の追加

仮想ネットワークサブネットの作成

  • 上記で作成した仮想ネットワークアドレス空間を対象に設定します。
  • バックエンドのサブネットとゲートウェイサブネットを追加します。

    f:id:TakasDev:20171104103241p:plain

    f:id:TakasDev:20171104103310p:plain

仮想ネットワークゲートウェイの作成

  • 先ほど設定した仮想ネットワークをターゲットにゲートウェイを作成します。

    f:id:TakasDev:20171104103915p:plain

自己証明書を作成

  • WindowsServer2016以降の場合
    • PowerShellで[New-SelfSignedCertificate]実行が鉄板です。
  • MakeCer.exeを使用したい場合

  • できあがったルート証明書とクライアント証明書のCerとPfxをエクスポートします。

    • pfxはbase64形式でエクスポートします。

ゲートウェイの設定

  • アドレスプールとルート証明書を設定します。
  • アドレスプールはこれまで指定してきたものと別のIPアドレス空間を指定します
    • ([10.0.0.0/24]とか指定したら[10.1.0.0/24]みたいな感じですかね?)
  • 上記で作成した証明書をエディタかなにかで開き内部コードを編集します。
    • 改行コードが入っているので、改行部分をつぶします。

VirtualGatewayのセットアップ

  • 先程改行コードを潰したpfx内の文字列を設定します。
  • VPNクライアントをインストールします

接続設定の変更

※この作業が必要かどうかはちょっと微妙ですが

  • AzureVMクからライアント環境への参照はそのままでは行えないです。
  • インターネットオプション/Chromeの[設定]>[詳細詳細]>[プロキシ設定を開く]から[接続]の設定
  • 先ほど作成したVPNクライアントを選択し[設定]

f:id:TakasDev:20171104104608p:plain

  • 「設定を自動的に検出する」

接続の確認

作成したVPN内のIPアドレスは、コマンドプロンプトの[ipconfig]で確認することができます。

特に設定していないため、下図のIPアドレスVPNの接続の度変わります。

以降の図等でのIPアドレスの表記は、下図のものと異なる場合があります。

f:id:TakasDev:20171104104711p:plain

ネットワーク設定でリモート接続やファイル共有を

プライベートネットワーク内でできるようにしたうえで

AzureのVM上からVPN内の端末にアクセスできるか試してみます、

f:id:TakasDev:20171104104945p:plain

問題なく接続できるようです。

VSTSの設定

アカウント設定

Jenkinsからソースを抜けるように、VSTSの[authentication credentials]を設定します。

ユーザー名の[Security]>[authentication credentials]から設定可能です。

f:id:TakasDev:20171104105730p:plain

Jenkinsの設定

インストール

公式のドキュメントどおりにインストールします。

ビルド環境準備

  • Java SDK
    • Jenkins-CLI動かすのにJavaが必要なので
  • Git
    • Git管理用
    • [Use Git from the windows...]をチェックしといたほうが良いと思います。

以降必要があれば…

CI環境の設定

ひとまず今回はてっとりばやく、VSTSから取得したAngularをBuildした成果物を

VPN内の共有ディレクトリに突っ込む方法で検証してみます。

下記の感じでPowerShellスクリプトを実行します。

  1. npm i - Javascriptパッケージインストール
  2. ng build - JavascriptBuild
  3. Copy-Item - 成果物の移動

回してみる

AzureのVMから、Jenkinsを使ってVPN内のパスにDeployできるようになりました。

f:id:TakasDev:20171104112129g:plain