Hatena::ブログ(Diary)

映画は中劇 このページをアンテナに追加 RSSフィード

2014-10-11

[]Mercurialで特定のファイルだけ昔のリビジョンに戻す

間違ってコミットしてしまったファイルを昔のリビジョンに戻す方法。hg diffで作ったリバースパッチを、パイプでhg importに流す。

hg diff {ファイル名} -r {リビジョン番号} --reverse | hg import - --no-commit

2014-03-08

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

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

背景

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

  • foobar-polling : プライベートリポジトリをポーリング
  • foobar-linux : Linux でビルド。 foobar-polling の下流プロジェクト
  • foobar-windows : Windows でビルド foobar-polling の下流プロジェクト
  • foobar-push : 公開リポジトリに push する。 foobar-polling に Join Trigger を登録する

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}」を入力