9

私は開発チームから、ビルド システムをセットアップして、各ビルドがすべてのブランチに対して一意のビルド番号を持つようにする必要があります。

ビルドは、各ブランチのジョブを使用してジェンキンによって作成されます。

ジョブの次のビルド番号を設定できる jenkins プラグインがありますが、これは少なくとも 2 つの理由であまり役に立ちません。

  • 単一のジョブのビルド番号を設定し、いつでも削除または追加できるため、すべてのブランチのセットアップ方法をすべて知ることはできません
  • 現在のビルドには設定されていません

ビルド番号を取得する方法: ブランチ名と git/mercurial のリビジョン番号を使用して HTTP 呼び出しを行います。これに基づいて、集中型サーバーは応答としてビルド番号を提供します。同じパラメーターで 2 回呼び出すと、同じ応答 (望ましい動作) が得られます。

では、私たちと同じビルド番号を使用するようにジェンキンを微調整するにはどうすればよいでしょうか? 明らかに、スクリプトから返されたビルド番号を使用できますが、ジョブ番号は異なり、スクリプト内の BUILD_NUMBER 変数に触れたことをジェンキンスが認識できるとは思えません。

主に必要なのは、ビルド番号がジョブに割り当てられる前に実行できる、ある種のジョブ開始前スクリプトです。

4

3 に答える 3

18

Environment Injector Pluginを使用して、実行前に Groovy スクリプトを評価できます。私はほとんど同じ要件を持っていますが、私にとってはjob_prefix_、名前が同じジョブのみが同じ一意を共有しますnextBuildNumber(つまり、名前が異なる他のジョブjob_prefix2_は異なる を共有しますnextBuildNumber)。

セクションではEvaluated Groovy Script、次を使用してください。

import jenkins.model.*

// Access to the Jenkins instance
jenkins_instance = jenkins.model.Jenkins.instance

// Select jobs that match.
job_name = "^job_prefix_.*"
allItems = jenkins_instance.items
chosenJobs = allItems.findAll{ job -> job.name.matches(job_name) }

// Get the max
build_number = chosenJobs.collect{ it -> it.nextBuildNumber }.max()

// Increase next build number
currentJob.nextBuildNumber = build_number + 1

// and use it.
def map = [BUILD_NUMBER: build_number]
return map
于 2013-09-24T00:32:33.497 に答える