6

Jenkins によってトリガーされるビルド スクリプトがあります。まず、Jenkins はリポジトリ (Bitbucket) から最新バージョンを取得し、次にビルド スクリプトを開始します。ビルド スクリプトが「リリース」モードで開始されると、スクリプトはいくつかのファイルに変更を加えます (バージョン番号とビルド日を追跡し、レポにタグを作成するため)。これらの変更は、リモートレポ。

これを実装するにはどうすればよいですか?ビルドには数分かかるため、ビルド中に誰かがリモート リポジトリにプッシュすると、最初にマージが必要になるため、プッシュは失敗します。そうでない場合、マージするものが何もないため、マージは失敗します...

4

1 に答える 1

10

Jenkins が独自の名前付きブランチでコミットすることを検討してください。これには多くの利点があります。最大の利点は、他の誰かがreleaseブランチに変更をプッシュすることを Jenkins が心配する必要がないことです。そうできるのは Jenkins だけです。Jenkins ビルド スクリプトは次のようになります。

hg clone --updaterev release http://path/to/repo
hg merge default || true   # merge the latest from master
...build here...
hg commit -m "Auto commit from Jenkins for build $BUILDNUMBER" || true
hg tag build_$BUILDNUMBER
hg push

このようなセットアップを使用すると、いくつかの利点が得られます。

  • 失敗したビルドは新しいコミットを作成していません
  • ジェンキンスのプッシュは常に成功します
  • Jenkins のタグ コミットは「リリース」ブランチにありますが、デフォルト ブランチから引き続きアクセスできます

|| trueは、 Jenkins に対して、マージ (マージするものが何もない場合) およびコミットするものがない場合、ゼロ以外の終了コードでビルドを失敗させないように指示していることに注意してください。

毎回新鮮なクローンを作成する代わりにhg pull ; hg update -C release、適切なサイズのリポジトリの場合は、保証された白紙の状態で開始するのが好きです。

于 2013-10-24T13:22:04.823 に答える