【问题标题】:Jenkins update builder shell command using groovyJenkins 使用 groovy 更新 builder shell 命令
【发布时间】:2014-06-04 11:05:21
【问题描述】:

我需要更新 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”处中断。 有人可以帮助修改此脚本并将结果成功保存到“执行 shell”块吗?

谢谢

【问题讨论】:

    标签: jenkins groovy hudson jenkins-groovy


    【解决方案1】:

    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 ""
    
    ""
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        您需要保存作业才能真正保存它。

        在你的情况下是:

        item.save()
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-09-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-08-08
          相关资源
          最近更新 更多