web-dev-qa-db-ja.com

Jenkinsワークフロー(パイプライン)ビルドのビルド番号を設定する

Jenkins-workflowジョブを新しいテンプレートベースのワークフロージョブに移行しています。ビルド番号は、ワークフローが生成するビルドアーティファクトのバージョンの一部として使用されるため、新しいワークフローのビルド番号を古いワークフローよりも大きい番号で開始する必要があります。残念ながら、「Next Build Number」プラグインはワークフローパイプラインでは機能しません。

誰かがこれを行う良い方法を知っていますか?

17
Vlad

Jenkins Script Consoleで以下のスクリプトを実行してみてください。「workflow」をジョブ名に変更します

def job = Jenkins.instance.getItem("workFlow")
job.nextBuildNumber = 10
job.saveNextBuildNumber()
10
Jayan

または、次のようなスニペットをパイプライン/ワークフロージョブDSLスクリプトに追加することもできます(別名 Jenkinsfile ):

offset = 5
currentBuild.displayName = "#" + (currentBuild.number + offset)
17
MarkHu

残念ながら、フォルダを使用する場合、上記の方法はうまくいきませんでした。 Jenkinsスクリプトコンソールで次の方法を使用しました。

job = Jenkins.getInstance().getItemByFullName("BSKAzureConversion-Jobs/master", Job.class)
job.nextBuildNumber = 92
job.save()
11
Ed Meagher

いくつかのメモ:

  • Jenkinsのジョブとフォルダーはシリアル化できません。 _@NonCPS_を使用する必要があります
  • _Jenkins.instance_のようなグローバルにはアクセスできないため、Groovy Sandboxを無効にします
  • Jenkins.instance.getItem()はフォルダーではうまく機能しません。 _Jenkins.instance.getItemByFullName_に対して_env.JOB_NAME_を使用します
  • _job.nextBuildNumber_を設定すると、後続のビルドが有効になるので、次のビルドを開始します
  • パイプラインから戻ることを確認してください。そうすると、ビルドの開始が間違ったビルド番号で継続しないようになります。

コード:

_@NonCPS
def updateBuildNumber(build_number) {
  def job = Jenkins.instance.getItemByFullName(env.JOB_NAME, Job.class)
  job.nextBuildNumber = build_number
  job.saveNextBuildNumber()
  build env.JOB_NAME
  return true
}
_
2
deepelement

「jenkins-cli」を使用して、これを行う別の方法も見つけました。スクリプトコンソールへのアクセスが利用できないロックダウンインストールで動作します(Cloudbees Enterprise Jenkins)

Java -jar jenkins-cli.jar   -s https://instanceURL/ \
          set-next-build-number workflow-name  33
0
Vlad