Groovy 如何分配;“多项目节流阀类别”;剧本

Groovy 如何分配;“多项目节流阀类别”;剧本,groovy,jenkins,Groovy,Jenkins,我使用Jenkins和Throttle Concurrent Builds插件,以确保在测试作业中独占访问USB设备。我使用参数化作业,参数名为MODE。对于某些模式值,测试使用USB设备;对于其他模式值,测试不使用USB设备。 我正在编写一个用于运行测试的Groovy脚本。 是否可以在脚本中分配“多项目节流类别”,以便我可以根据模式参数的值分配它? 谢谢我觉得这个很管用 tjp = myjob.getProperty(hudson.plugins.throttleconcurrents.Thr

我使用Jenkins和Throttle Concurrent Builds插件,以确保在测试作业中独占访问USB设备。我使用参数化作业,参数名为MODE。对于某些模式值,测试使用USB设备;对于其他模式值,测试不使用USB设备。 我正在编写一个用于运行测试的Groovy脚本。 是否可以在脚本中分配“多项目节流类别”,以便我可以根据模式参数的值分配它? 谢谢

我觉得这个很管用

tjp = myjob.getProperty(hudson.plugins.throttleconcurrents.ThrottleJobProperty)

// see what we got
if(tjp != null) {
    println("--- Throttle concurrents for " + myjob.name + " ---")

    try {
        println "Got this: " + tjp.categories + " items " + tjp.categories.size
    } catch(Exception e) {
        println(tjp.categories)
    }
}

// change the first one
tjp.categories[0] = "myCategory"

// update job properties
myjob.addProperty(tjp)

在适当的位置修改类别对我不起作用。相反,我必须创建一个新的
ThrottleJobProperty
并添加它:

ThrottleJobProperty jobProperty = item.getProperty(ThrottleJobProperty)

println("ThrottleJobProperty of " + item.name + " has categories: " + jobProperty?.categories)
String category = "long-running"
if (!jobProperty?.categories?.contains(category)) {
    if (jobProperty != null) item.removeProperty(jobProperty)

    List<String> categories = jobProperty != null ?
            new ArrayList<String>(jobProperty.categories) :
            new ArrayList<String>()
    categories.add(category)
    jobProperty = new ThrottleJobProperty(
            /*maxConcurrentPerNode:*/ 0,
            /*maxConcurrentTotal:*/ 0,
            /*categories:*/ categories,
            /*throttleEnabled:*/ true,
            /*throttleOption:*/ 'category',
            /*limitOneJobWithMatchingParams:*/ false,
            /*paramsToUseForLimit:*/ '',
            /*matrixOptions:*/ null
    )
    item.addProperty(jobProperty)
    println("Assigning ThrottleJobProperty.categories for " + item.name + ": " + jobProperty?.categories)
    item.save()
}
ThrottleJobProperty jobProperty=item.getProperty(ThrottleJobProperty)
println(“ThrottleJobProperty of“+item.name+”具有类别:“+jobProperty?”类别)
String category=“长期运行”
如果(!jobProperty?.categories?.contains(category)){
if(jobProperty!=null)item.removeProperty(jobProperty)
列表类别=作业属性!=空?
新的ArrayList(jobProperty.categories):
新ArrayList()
类别。添加(类别)
jobProperty=新的ThrottleJobProperty(
/*maxConcurrentPerNode://0,
/*maxConcurrentTotal:**/0,
/*类别:*/类别,
/*throttleEnabled://true,
/*节流选项:*/“类别”,
/*limitOneJobWithMatchingParams://false,
/*paramsToUseForLimit://“,
/*矩阵选项:*/null
)
item.addProperty(作业属性)
println(“为“+item.name+”:“+jobProperty?”类别分配ThrottleJobProperty.categories)
item.save()
}

这是否会修改作业配置或生成属性?它是否在Throttle并发构建插件阻止其执行之前生效?还是在外部修改作业,然后触发作业的构建?我希望有一个参数化作业,其中参数基本上是多项目节流类别,我可以使用相同和不同的参数运行多个作业,也可以使用不同的参数运行同一个作业,并且每个类别都会相应地阻塞(类似于您的用例:通过USB连接的不同设备)我尝试运行此函数,但找不到ThrottleJobProperty的构造函数。你现在知道为什么了吗?很可能你的插件版本不同。看看可用的构造器,试着适应。谢谢你!我没有注意到这个细节