我无法暂时排除特定作业,使其无法在标签组中的节点上运行。
jobA、jobB、jobC 绑定在标签上运行nodeA,nodeB,nodeC上有标签一般。
假设作业 A 在节点 A 上开始持续失败。
我今天看到的唯一解决方案是让所有作业的nodeA脱机或重新配置许多作业或节点,这非常耗时。我们使用 JOB-DSL 来配置作业,因此更改作业配置需要签入。
对我们来说,理想的情况是在节点上进行配置:
排除名称为:作业 A 的作业
有没有一些简单的方法可以配置作业 A 暂时只能在节点 B 和节点 C 上运行,并且 jobB/C 仍应在标签常规中的所有节点上运行?
我刚刚遇到了同样的问题,我希望作业在带有标签的设备上运行,比如"lableA",但不希望它在带有标签"lableB"的设备上运行。我们可以试试这个:
node(nodeA && !nodeB) {
}
参考: https://www.jenkins.io/doc/pipeline/steps/workflow-durable-task-step/#node-allocate-node
创建一个参数化作业来运行一些作业-dsl 配置。 将其中一个参数设置为"选择",列出您可能要更改的作业名称。
另一个参数将选择一个标签,用于定义要在其上运行作业的节点。 (一个节点上可以有多个标签(。
然后,作业 dsl 脚本将更新作业标签。
此时髦脚本将启用/禁用文件夹中的所有作业:
// "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}"
}
在jobA中使用NodeLabel Parameter Plugin。使用此插件,您可以定义应允许在其上执行作业的节点。只需添加参数节点并选择除节点 A 之外的所有节点。https://wiki.jenkins-ci.org/display/JENKINS/NodeLabel+Parameter+Plugin
对于一个简单的快速排除,我认为最初的问题指的是"我今天看到的唯一解决方案是......配置。。。作业或节点"看到另一个答案:https://stackoverflow.com/a/29611255/598656
要停止使用具有给定标签的节点,一种策略是简单地更改标签。 例如,假设标签是
建筑工人
将标签更改为
-建筑工人
将为管理员保留信息,但任何使用 BUILDER
作为标签的作业都不会选择该节点。
要允许作业在节点上运行,您可以将节点选择更改为
BUILDER||-BUILDER
打乱标签时是一个有用的范例。
请注意,作业在一段时间内仍可能使用先前的标签进行选择。