第4回 TFVCとGitのデプロイ、ビルド、テスト:連載:TFVC vs Git(6/8 ページ)
今回はVisual Studio Onlineの新しいビルドシステムを使って、ソースコードをコミットしてからビルド/テスト/デプロイまでを自動的に行う方法を見る。連載完結。
外部リポジトリのビルド
VS Onlineで.NET関係のビルドを行う場合、あらかじめ環境が用意されているため、準備コストはビルド定義を行うことくらいだ。
VS Onlineのビルド機能は簡単に構築できるので、ビルドとデプロイ機能のみVS Onlineを使用して、リポジトリにはGitHubやBitbucketなどのGitリポジトリも使える。ビルドサーバーの構築と運用はかなりの手間が掛かるので、最初はVS Onlineのビルドサーバーで運用を始め、将来的にVS Onlineのビルドで困る場合に自組織で用意するという方法もある。
もう一つの外部リポジトリを使う理由としては、VS Onlineは現時点では公開リポジトリを作成できないことが挙げられる。GitHubのような公開されたリポジトリに対して、独自にパッケージを作るためのビルドを行いたいという場合はVS Onlineが外部リポジトリにアクセスして、ビルドを行う必要がある。この方法を使うと、ソースはGitHub、ビルドおよびNuGetへの登録はVS Onlineのビルドサービスを使用するという運用が可能になる。
外部リポジトリをビルドするためには、ビルド定義の編集画面で[Repository]タブをクリックして、外部リポジトリにアクセスするための認証情報を登録する。
外部のリポジトリはRepository Typeで以下のリポジトリのいずれかを選択できる。
- VS OnlineのTFVC/Git(チームプロジェクトのリポジトリの種類によってどちらかが自動的に決定)
- GitHub
- 外部のGit
このように、VS Onlineで足りない機能は外部の機能とうまく組み合わせることにより、新しい開発フローを構築することが可能になる。
外部のビルドサーバーを使用してスケールアウトする
前述のようにソースコードはVS Onlineに格納していても、ビルドに組織内のサーバーを使用しなければならないという状況はある。例えば次のような場合がそうだ。
- TFS Service - Software on the hosted build serverに載っていないライブラリやツールを使う場合や、XcodeでiOSアプリのビルドを行う場合
- ビルドに課金を発生させたくない場合
このような場合、VS Onlineのビルドエージェントを組織内で実行するか、JenkinsのようなCI環境を提供するサーバーソフトウエアを使用するという方法がある。VS OnlineではREST APIを使用して外部のサービスを使用する方法もある。ここではVS Onlineが標準で対応しているJenkinsとの連携とビルドエージェントを追加してスケールアウトさせる方法について紹介する。
Jenkinsと連携する
MicrosoftアカウントでVS Onlineを使用している場合、VS OnlineとJenkinsを連携させる際には「現時点ではチームプロジェクトがGitのみ」という制限があるので注意してほしい。
JenkinsからVS Onlineのリポジトリを参照するには、TFS(VS Online)を呼び出すTeam Foundation Serverプラグインが提供されており、これを使用する。オンプレミスTFSであれば、このプラグインはTFVCおよび、Gitのいずれもサポートされている。
しかし、VS OnlineではTeam Foundation Serverプラグインの認証がドメイン形式(domain\username)形式のみであるため、そのままでは使用できない。よって、VS Onlineを使う場合、JenkinsにはGitプラグインをインストールして、Gitリポジトリとして使用する必要がある。
Azure Active Directoryを使用した組織内のActive Directoryとのシングルサインオン環境であれば問題ないかもしれないが、筆者は未確認だ。
チームプロジェクトの管理ページから歯車アイコンをクリックして、[Service Hooks]タブをクリックする。
[Create the first subscription for this project]リンクをクリックすると、新しいサービスフックの作成が開始される。
左側のペーンで[Jenkins]を選択して、[Next]ボタンをクリックする。
Jenkinsを呼び出すトリガーを設定する
(1) Jenkinsを呼び出すイベントを選択する。
(2) 対象となるリポジトリ(チームプロジェクト)を選択する。
(3) 対象となるブランチを選択する。[Any]を選ぶと全てのブランチが対象になる。
(4) 指定したユーザーのグループがイベントを発生させたときのみトリガーを実行する。
(5) 前の画面に戻る。
(6) 次の画面に移動する。
(7) 処理を中止する。
Jenkinsを呼び出すイベントを設定する。ビルド完了とコードがVS Onlineにプッシュされたときのいずれかが選択可能だ。ここではコードがプッシュされたイベントをトリガーにする。
イベントのフィルターを設定することも可能だ。リポジトリはチームプロジェクトを選択しているが、選択肢の中から[Any]を選択することにより、どのチームプロジェクトにプッシュされたときであってもJenkinsを呼び出すことができるようになる。ただし、他のリポジトリを勝手にビルドしないように、原則として自分のチームプロジェクトのみにしておいた方がよい。
ブランチおよび、コードをプッシュしたメンバーを選択して、[Next]ボタンをクリックする。
Gitリポジトリのビルドを行うための設定
(1) JenkinsのGitビルドトリガーを実行する。
(2) JenkinsのURL。
(3) Jenkinsにアクセスするためのユーザー名。
(4) Jenkinsのユーザー名のパスワードを指定する。
(5) 前の画面に戻る。
(6) 現在の設定でJenkinsを呼び出すテストを実行する。
(7) 確定する。
(8) 中止する。
[User name]欄と[User API token]欄にはJenkinsのユーザー名とパスワードを指定する。全てにチェックが付いた状態になると設定完了だ。[Test]ボタンを押して確認しよう。
Jenkinsとの連携テストの実行画面
(1) テスト結果の概要。
(2) テストで使用したRESTのリクエストを表示する。
(3) テストのレスポンスを表示する。
(4) イベントを表示する。
(5) ダイアログボックスを閉じる。
Jenkinsの呼び出しテストが成功すれば、上記のように「Succeeded」と表示される。失敗した場合はRequestやResponseを見て何が悪いのか確認しよう。ほとんどはURLの誤り、認証の不備のはずだ。なお、テストのリクエストでは実際のビルドは行われない。
完了後、[Finish]ボタンをクリックすれば、作成完了だ。VS OnlineにコードがプッシュされるたびにJenkinsが呼び出され、Jenkinsで指定したワークスペース内の処理が実行される。
Copyright© Digital Advantage Corp. All Rights Reserved.