Jenkins で、同じ Mercurial リビジョンに対して複数のプロジェクトをビルドする

ビルドのパラメータでリビジョン番号を持ちまわることによって実現できる。

背景

プロジェクト foobar を LinuxWindows でビルドして、両方成功したら公開リポジトリに push する、みたいなことをする。この時、 Jenkins のプロジェクト構成はこんな感じになるはず。

http://d.hatena.ne.jp/miyakawa_taku/files/2014-03-08-jobs-before.png?d=.png

これをナイーブに設定するとうまくない。たとえば、ジョブチェーンが完了する前に、新しいリビジョンがプライベートリポジトリに push される可能性がある。この場合、各プロジェクトが別のリビジョンをチェックアウトして、結果として未テストのリビジョンが公開されてしまう。

コンセプト

Parameterized Trigger プラグイン をインストールして、ビルドのパラーメタでリビジョン番号を持ちまわる。

http://d.hatena.ne.jp/miyakawa_taku/files/2014-03-08-jobs-after.png?d=.png

foobar-polling の設定

チェックアウトしたリビジョンを UPSTREAM_MERCURIAL_REVISION パラメータで下流に受け渡すため、ビルド手順の中でプロパティファイルを作る。

  1. 「ビルド」→「ビルド手順の追加」で「シェルの実行」を選択
  2. 次のシェルスクリプトを入力
echo "UPSTREAM_MERCURIAL_REVISION=$MERCURIAL_REVISION" \
    >jenkins-build.properties

MERCURIAL_REVISION は Mercurial プラグインが設定する環境変数。現在のビルドのリビジョンが代入されているので、これを下流に受け渡す。

foobar-linux, foobar-window をパラメータ付きで発砲する。

  1. 「ビルド後の処理」→「ビルド後の処理の追加」で「Trigger parameterized build on other projects」を選択
  2. 「Projects to build」に「foobar-linux, foobar-windows」を入力
  3. 「Add Parameters」で「Parameters from properties file」を選択
  4. 「Use properties from file」に「jenkins-build.properties」を入力

foobar-push を Join Trigger を使ってパラメータ付きで発砲する。

  1. 「ビルド後の処理」→「ビルド後の処理の追加」で「Join Trigger」を選択
  2. 「Run post-build actions at join」をチェック
  3. 「Trigger parameterized build on other projects」をチェック
  4. 「Add Parameters」で「Parameters from properties file」を選択
  5. 「Projects to build」に「foobar-push」を入力
  6. 「Add Parameters」で「Parameters from properties file」を選択
  7. 「Use properties from file」に「jenkins-build.properties」を入力

foobar-linux, foobar-windows, foobar-push の設定

パラメータ UPSTREAM_MERCURIAL_REVISION を受け取るようにする。

  1. 「ビルドのパラメータ化」をチェック
  2. 「パラメータの追加」で「テキスト」を追加
  3. パラメータ名に「UPSTREAM_MERCURIAL_REVISION」を入力

UPSTREAM_MERCURIAL_REVISION で指定されたリビジョンをチェックアウトするようにする。

  1. ソースコード管理」→「Mercurial」→「Revision Type」で「Tag」を選択
  2. 「Revision」に「${UPSTREAM_MERCURIAL_REVISION}」を入力