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で足りない機能は外部の機能とうまく組み合わせることにより、新しい開発フローを構築することが可能になる。
前述のようにソースコードはVS Onlineに格納していても、ビルドに組織内のサーバーを使用しなければならないという状況はある。例えば次のような場合がそうだ。
このような場合、VS Onlineのビルドエージェントを組織内で実行するか、JenkinsのようなCI環境を提供するサーバーソフトウエアを使用するという方法がある。VS OnlineではREST APIを使用して外部のサービスを使用する方法もある。ここではVS Onlineが標準で対応している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を呼び出すイベントを設定する。ビルド完了とコードがVS Onlineにプッシュされたときのいずれかが選択可能だ。ここではコードがプッシュされたイベントをトリガーにする。
イベントのフィルターを設定することも可能だ。リポジトリはチームプロジェクトを選択しているが、選択肢の中から[Any]を選択することにより、どのチームプロジェクトにプッシュされたときであってもJenkinsを呼び出すことができるようになる。ただし、他のリポジトリを勝手にビルドしないように、原則として自分のチームプロジェクトのみにしておいた方がよい。
ブランチおよび、コードをプッシュしたメンバーを選択して、[Next]ボタンをクリックする。
[User name]欄と[User API token]欄にはJenkinsのユーザー名とパスワードを指定する。全てにチェックが付いた状態になると設定完了だ。[Test]ボタンを押して確認しよう。
Jenkinsの呼び出しテストが成功すれば、上記のように「Succeeded」と表示される。失敗した場合はRequestやResponseを見て何が悪いのか確認しよう。ほとんどはURLの誤り、認証の不備のはずだ。なお、テストのリクエストでは実際のビルドは行われない。
完了後、[Finish]ボタンをクリックすれば、作成完了だ。VS OnlineにコードがプッシュされるたびにJenkinsが呼び出され、Jenkinsで指定したワークスペース内の処理が実行される。
Copyright© Digital Advantage Corp. All Rights Reserved.