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

时间:2021-03-03 11:15:22

标签: jenkins jenkins-pipeline label nodes throttling

大家早上好,

我正在尝试将我的 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"
            }
        }
    }
}

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

0 个答案:

没有答案
相关问题