临时排除作业在标签组中的节点上运行的简单方法

时间:2014-12-22 09:30:53

标签: jenkins jenkins-plugins jenkins-job-dsl

我无法临时排除特定作业在标签组中的节点上运行。

jobA,jobB,jobC与标签一般运行相关联 nodeA,nodeB,nodeC上有标签general。

让我们说jobA在nodeA上开始一直失败。

我今天看到的唯一解决方案是将nodeA脱机以用于所有作业或重新配置许多作业或节点,这非常耗时。我们正在使用JOB-DSL配置作业,因此更改作业配置需要签入。

我们的理想情况是在节点上进行配置:
排除名称为jobA

的职位

是否有一些简单的方法来配置jobA应该暂时只在nodeB和node C上运行,而jobB / C应该仍然在标签general中的所有节点上运行?

4 个答案:

答案 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

在改变标签时使用的有用范例。

注意作业可能仍会使用之前的标签选择一段时间。