1

我不能暂时排除在标签组中的节点上运行的特定作业。

jobA、jobB、jobC 绑定在标签 general nodeA、nodeB、nodeC 上运行,它们上面有标签 general。

假设 jobA 在 nodeA 上开始持续失败。

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

对我们来说理想的情况是在节点上进行配置:
Exclude job with name: jobA

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

4

5 回答 5

1

创建一个参数化的作业来运行一些作业-dsl 配置。将参数之一设为“选择”,列出您可能要更改的作业名称。

另一个参数将选择一个标签,定义您要在其上运行作业的节点。(一个节点上可以有多个标签)。

然后 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}"
}
于 2015-02-17T11:18:39.033 回答
1

我刚刚遇到了同样的问题,我希望作业在带有标签的设备上运行,比如“lableA”,但不希望它在带有标签“lableB”的设备上运行。我们可以试试这个:

node(nodeA && !nodeB) {
} 

参考:https ://www.jenkins.io/doc/pipeline/steps/workflow-durable-task-step/#node-allocate-node

于 2021-12-30T03:36:54.290 回答
0

您也可以在 jobA 中使用NodeLabel 参数插件。使用此插件,您可以定义应允许在其上执行作业的节点。只需添加参数节点并选择除 nodeA 之外的所有节点。 https://wiki.jenkins-ci.org/display/JENKINS/NodeLabel+Parameter+Plugin

于 2015-02-17T12:15:19.133 回答
0

对于一个简单的快速排除,我认为原始问题是指“我今天看到的唯一解决方案是......重新配置......作业或节点”请参阅其他答案:https ://stackoverflow.com/a/ 29611255/598656

于 2017-01-11T12:02:36.180 回答
0

要停止使用具有给定标签的节点,一种策略是简单地更改标签。例如,假设标签是

建造者

将标签更改为

-建造者

将为管理员保留信息,但任何BUILDER用作标签的作业都不会选择该节点。

要允许作业在节点上运行,您可以将节点选择更改为

BUILDER||-BUILDER

洗牌时有用的范例。

请注意,作业可能仍会在一段时间内选择使用先前的标签。

于 2017-05-15T19:55:59.060 回答