こんにちは、上坂です。
Visual Studio Onlineをリポジトリとして活用したCI環境を構築してみました。
Visual Studio Onlineというと、その名前から受けるイメージのためか、Monacoというブラウザで動く開発環境がどうしても印象が強いのではないかと思うのですが、Visual Studio OnlineはTFSやGitのリポジトリもあるし、ScrumのPBIの管理も、カンバンによる進捗管理もあります。さらにビルドもテストも稼働させることができる言わばチーム開発環境であるわけですが、困ったことにビルドとテストは処理時間分の従量課金なのです。
コミットする度にビルド&テストしているように設定しておくと、なかなかびっくりするぐらいの課金額になります。ここさえ従量課金じゃなければ・・・と、思っていたのですがじゃあ単純にその部分を外部に立てたJenkinsサーバーに任せてしまえばいい!ということで実際にやってみました。(気づくの遅い・・・)
ちなみにVisual Studio OnlineのGitリポジトリはちゃんとPullRequestが使えますので、それだけでも採用検討の価値があると思います。
以下が手順です。
「前提」
- JenkinsサーバーはWindowsサーバーをAzureVMで立ててあります。
- Jenkinsサーバーには次のプラグインを導入済みです。
- Git plugin
- MSBuild Plugin
※以下のようにMSBuild の設定をしておきます。
「Jenkinsの管理」⇒「システムの設定」⇒MSBuildを選択します。
Name:v4.0.30319
Path to MSBuild:C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe
- Jenkinsアクセス時にはID/PWによる認証をかけてあります。(この設定は必須です)
- Visual Studio Onlineに既にGitリポジトリは「GitProject」という名前で立ててあります。
- ローカルリポジトリにClone済みで、VisualStudioのチームエクスプローラーで接続してあります。
今回はVSOnlineのGitリポジトリににソースコミットしたらJenkinsでビルドが走るようにしてみたいと思います。
1.Visual Studio Online で代替認証を設定
JenkinsからVisual Studio Onlineのリポジトリにアクセスする時の認証をID/PWで可能にするための設定です。
名前をクリック⇒Securityタブをクリック⇒メニューから「Alternate authentication credentials」を選択します。
「Enable alternate authentication credentials」にチェックを入れて、Password と Confirm Passwordを入力します。
※ここでは手抜きで何も入力していませんが、セキュリティを高めるためにuser name(secondary)は極力セットするようにして下さい。
2.Jenkins側の設定
①ジョブを作成
今回は「VSOnlineJob」という名前で作成しました。
②.SCMでGitを選択し、以下のように設定
Repository URL:https://{VSO
account}.visualstudio.com/DefaultCollection/_git/{team project}
Credentials:手順1で設定した代替認証のID/PWをセット
③MSBuildでソリューションファイルを指定
ジョブ内の「ビルド手順の追加」をクリックし、「Build a Visual Studio project or solution using MSBuild」を選択します。
現れたMSBuildの領域で次のように指定します。
MSBuild Version:手順「前提」で設定した、登録済みのMSBuild情報の名前です。
MSBuild Build File:Visual Studio Onlineのリポジトリから取得したソリューションファイルを指定します。
Command Line Arguments:ここではリリースのリビルドを指定
3.Visual Studio OnlineのServiceHooksでJenkinsを追加
次のように設定します。
Trigger
Trigger on this type of event:code pushed
Repository:手順2で作ったプロジェクトを選択
Branch:master
Pushed by a member of group:[Any]
Action
Perform this action:Trigger Git build
Jenkins base URL:JenkinsVMサーバーのURL。エンドポイント公開をお忘れなく。
User name:Jenkinsアクセスユーザー名
User API token(or password):Jenkinsアクセスパスワード
Jenkinsにアクセスするユーザーとパスワードは必須入力項目なので、「前提」でID/PWによる認証が必須なんです。そもそもセキュリティかけない方が危ないですしね。
準備終了!Visual Studio で編集したファイルをコミット&プッシュすると、Jenkinsが自動的にソースを取得してビルドしてくれるはずです。
無事に成功しました!やってみると思ったよりも簡単にセットアップできました。後はテストとデプロイを仕込めば完璧ですが、ここまでできていれば後の道のりはそこまで険しくありませんよね。