2016-01-22 53 views
12

jenkins-workflowジョブを新しいテンプレートベースのワークフロージョブに移行しています。ビルド番号はビルド成果物のバージョンの一部として使用されるため、古いワークフローよりも大きな数の新しいワークフローを構築する必要があります。残念ながら、 '次のビルド番号'プラグインはワークフローパイプラインでは機能しません。Jenkinsワークフロー(パイプライン)ビルドのビルド番号を設定する

誰でも良い方法を知っていますか?

答えて

6

ジェンキンススクリプトコンソールでスクリプトの下に実行してみてください...変更あなたのジョブ名

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

このコードスニペット 'nextBuildNumber'ファイルに新しいビルド番号を書き込みません。このため、Jenkinsを(正常に)再起動してビルドをトリガーすると、 'nextBuildNumber'ファイルに存在するビルド番号(上記のスニペットで指定されていないもの)を使用して終了します。 'job.save()'の代わりに 'job.saveNextBuildNumber()'を使うと、この問題に対処できます。 – Amit

0

に「ワークフロー」私はまた、「ジェンキンス-CLI」を使用してこれを行うための別の方法を発見しました。これは、スクリプトコンソールへのアクセスが利用できないロックダウンのインストールで動作します(CloudBeesのエンタープライズ・ジェンキンス)

java -jar jenkins-cli.jar -s https://instanceURL/ \ 
      set-next-build-number workflow-name 33 
12

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

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

これは私が必要としていたものです! –

7

残念ながら、上記の方法は、フォルダを使用すると私にとってはうまくいきませんでした。私はジェンキンススクリプトコンソールで次のように頼っ:

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

3行目に 'job.saveNextBuildNumber()'を使用している場合、これは私のマルチブランチパイプラインで有効でした。 –

+0

マルチブランチパイプラインからジョブ名を検索するには、次のコマンドを実行します。 'def jobs = Jenkins.getInstance()。getAllItems(); println次いで(ジョブ) ' そして、@DavidVは上記のように: 'DEFジョブ= Jenkins.instance.getItemByFullNameを( "YourTeam/your_project /%2Fbranchnameが機能")。 job.nextBuildNumber = 301; job.saveNextBuildNumber(); ' – kivagant

2

いくつかの注意事項:

  • ジェンキンスジョブとフォルダは、シリアライズではありません。そうでない場合は
  • Jenkins.instance.getItem()フォルダとうまく動作しませんJenkins.instanceのようなグローバルにアクセスできないよう、@NonCPS
  • 無効にGroovyのサンドボックスを使用する必要があります。効果以降のビルドを取るので、先に行くと、開始ビルドが悪いビルド番号
  • を継続しないようにしてください、あなたのパイプラインの外に返してください、次のいずれか
  • をキックオフしますjob.nextBuildNumberを設定env.JOB_NAME
  • に対してJenkins.instance.getItemByFullNameを使用します

コード:

@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 
} 
関連する問題