3

我需要更新 Jenkins 作业系列中构建部分的“执行 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_command中断是因为 builder.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 回答
0

您可以使用Jenkins Configuration Slicer批量编辑作业的 Shell 命令。

于 2014-06-06T09:25:17.347 回答