我无法临时排除特定作业在标签组中的节点上运行。
jobA,jobB,jobC与标签一般运行相关联 nodeA,nodeB,nodeC上有标签general。
让我们说jobA在nodeA上开始一直失败。
我今天看到的唯一解决方案是将nodeA脱机以用于所有作业或重新配置许多作业或节点,这非常耗时。我们正在使用JOB-DSL配置作业,因此更改作业配置需要签入。
我们的理想情况是在节点上进行配置:
排除名称为jobA
是否有一些简单的方法来配置jobA应该暂时只在nodeB和node C上运行,而jobB / C应该仍然在标签general中的所有节点上运行?
答案 0 :(得分:1)
创建参数化作业以运行某些job-dsl配置。制作一个参数a" Choice"列出您可能想要更改的作业名称。
另一个参数将选择一个标签,用于定义要在其上运行作业的节点。 (节点上可以有多个标签)。
job-dsl脚本然后更新作业标签 这个groovy脚本将启用/禁用文件夹中的所有作业:
// "State" job parameter (choice, DISABLED|ENABLED)
def targetState = ('DISABLED'.equalsIgnoreCase(State))
// "Folder" job parameter (choice or free-text)
def targetFolderPath = Folder.trim()
def folder = findFolder(jenkins, targetFolderPath)
println "Setting all jobs in '${folder.name}' to '${targetState}'"
for (job in folder.getAllJobs()) {
job.disabled = targetState
println "updated job: ${job.name}"
}
答案 1 :(得分:0)
您还可以在jobA中使用 NodeLabel参数插件。使用此插件,您可以定义应允许在其上执行作业的节点。只需添加参数节点并选择除nodeA之外的所有节点。 https://wiki.jenkins-ci.org/display/JENKINS/NodeLabel+Parameter+Plugin
答案 2 :(得分:0)
对于一个简单的快速排除,我认为原始问题所指的是"我今天看到的唯一解决方案是......重新配置......工作或节点"见其他答案:https://stackoverflow.com/a/29611255/598656
答案 3 :(得分:0)
要停止使用具有给定标签的节点,一种策略是简单地更改标签。例如。假设标签是
BUILDER
将标签更改为
-BUILDER
将为管理员保留信息,但使用BUILDER
作为标签的任何作业都不会选择该节点。
要允许作业在节点上运行,可以将节点选择更改为
BUILDER||-BUILDER
在改变标签时使用的有用范例。
注意作业可能仍会使用之前的标签选择一段时间。