3

一連の Jenkins Jobs の Build セクションの 'execute shell' コマンドを更新する必要があります。そして、私はそれにgroovyを使用しています。これが開始スクリプトです。更新されていないようですが。

import hudson.model.*

for(item in Hudson.instance.items) {
    if (item.name == 'TEMP-RELEASE-UPDATE') {
        println("--- Parameters for :" + item.name)
        def branches = item.scm.getBranches()
        for (builder in item.buildersList) {
            new_command =  builder.command.replaceAll('PATTERN_1','PATTERN_2')
            builder.command = new_command
            builder.save()
        }
    }
}

通常は「builder.command = new_command」で壊れます。誰かがこのスクリプトを変更し、結果を「シェルの実行」ブロックに正常に保存するのを手伝ってもらえますか?

ありがとう

4

3 に答える 3

3

builder.command = new_commandbuild.command が読み取り専用であるため、壊れます。

あなたがする必要があるのは、新しいビルダーインスタンスをインスタンス化することです:

new hudson.tasks.Shell(new_command)

それをリストに追加し、古いものを削除します。

私の完全なスクリプト:

jobsChanged = new java.util.ArrayList()
jobsNotChanged = new java.util.ArrayList()

for(project in Hudson.instance.items) {
  new_builder = null
  old_builder = null
  for (builder in project.buildersList) {
    if (!(builder instanceof hudson.tasks.Shell)) {
      jobsNotChanged.add "$project.name"
      continue;
    }
    new_command = builder.command.replace(SOMETHING, SOMETHINGELSE)

    new_builder = new hudson.tasks.Shell(new_command)
    old_builder = builder;
    jobsChanged.add "$project.name"
  }
  if (new_builder != null) {
    // comment out below for test run
    project.buildersList.add(new_builder)
    project.buildersList.remove(old_builder)
  }

}

println ""
println "Jobs changed"
println ""

jobsChanged.each { line -> println line }

println ""
println "Jobs not changed"
println ""

jobsNotChanged.each { line -> println line }

println ""

""
于 2016-03-25T17:18:07.023 に答える
0

実際にジョブを保存するには、ジョブを保存する必要があります。

あなたの場合、それは次のようになります:

item.save()
于 2015-01-20T05:53:52.630 に答える