如何组织我的 Jenkins 作业以在具有特定标签的节点上运行,而每个节点不使用多个执行程序?

问题描述

大家早上好,

我正在尝试将我的 Jenkins 作业设置为在具有特定标签的节点上运行,但每个节点最多使用一个执行程序。这是因为所有具有相同标签的作业需要在节点上使用相同的工作空间,因此我们需要它们不重叠。尽管如果另一个作业以不同的标签启动,我们希望它仍然可以访问节点上的另一个可执行文件

我首先尝试使用 Throttle Concurrent Build 插件,但如果我们在选项中设置并发作业属性,则 maxConcurrentPerNode 参数不起作用。这仍将执行管道,但忽略节点限制。

例如:

    agent { 
        node {
            label LABEL
            customWorkspace LABEL
        }
    }

    // Throttle a declarative pipeline via options
    options {
        throttleJobProperty(
            categories: [LABEL],limitOneJobWithMatchingParams: false,maxConcurrentPerNode: 1,maxConcurrentTotal: 0,paramsToUseForLimit: '',throttleEnabled: true,throttleOption: 'project',)
    }

    stages {
        stage('sleep') {
            steps {
                sh "sleep 500"
                echo "Done"
            }
        }
    }
}

如果我尝试使用 lock 会发生类似的情况,因为它似乎没有在管道的该步骤中找到 NODE_NAME 环境变量。这会弹出错误并且不执行管道。

pipeline {
    agent { 
        node {
            label 'LABEL'
            customWorkspace LABEL
        }
    }
    options {
        lock("${LABEL}-${NODE_NAME}")
    }
    stages {
        stage('sleep') {
            steps {
                sh "sleep 500"
                echo "Done"
            }
        }
    }
}

您对如何实现这一点有任何想法吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)