Visual Studio Onlineのビルド定義をREST APIで実行する方法 #tfsug #alm

http://changesworlds.com/wp//HLIC/3720620a6b4bb6b0d2045a38c940c1b4.png

遂に来たか、この時が。
この一ヶ月何度となくDevOps Hackathonを思い出したぞ。
ビルドマシンのただ一度の突然の死。
ゴミのような突然の死に私が敗れたのだ。
一ヶ月この辱めに耐えてきた。
だが、今、それも終わる。
お前を葬りさり、
あのビルドマシンの突然の死がこの世界の仕組んだ卑劣なワナだったと証明し、
このわずかな傷を拭い去って完全な復活を遂げるのだ。

詳細はこちら

当時は以下のフローを1つのビルド定義で定義していた。

  1. VSOのGitリポジトリにpushする
  2. リポジトリの更新に基づいてVSOが設定しているビルド定義を実行
    1. リポジトリの最新を取得
    2. CI(ビルド&テスト)
    3. Dockerfileに基づいてDockerイメージ作成
    4. Dockerのコンテナを起動

1つのビルド定義ですべて実行しているので、ビルドマシン兼Dockerサーバーとなってしまっていた。これはDockerの処理とビルドというCPUを使う処理を1台のマシンで行うことになるので、実際の開発現場ではありえない。そこで、以下のように変更した。

  1. VSOのGitリポジトリにpushする
  2. リポジトリの更新に基づいてVSOが設定しているビルド定義を実行
    1. リポジトリの最新を取得
    2. CI(ビルド&テスト)
    3. Docker用のビルド定義を呼ぶ(キック)
  3. キックに基づいてVSOがキックされたビルド定義を実行
    1. Dockerfileに基づいてDockerイメージ作成
    2. Dockerのコンテナを起動

キックするのは簡単で、VSOにはREST APIが準備されているのでREST APIでビルド定義を実行するだけになる。ってわけで以下に手順を記載。

Visual Studio Onlineのビルド定義をREST APIで実行する方法

呼び出したいVisual Studio Onlineのビルド定義の情報を取得する

Build Definitions | Visual Studio Online REST API Referenceの[Get a build definition]で呼び出したいVisual Studio Onlineのビルド定義の情報を取得する。

curl -u {username}[:{password}] https://{account}.visualstudio.com/defaultcollection/trial/_apis/build/definitions?api-version=2.0

Visual Studio Onlineのビルド定義をREST APIで実行する

Builds | Visual Studio Online REST API Referenceの[Queue a build]で取得したVisual Studio Onlineのビルド定義の情報を送信する。

curl -u {username}[:{password}] -H "Content-type: application/json" -X POST -d '{"definition": {"id": {id}}, "sourceBranch": "{source branch}"}' https://{account}.visualstudio.com/defaultcollection/{project}/_apis/build/builds?api-version={version}=2.0

参考情報