我想允许并行运行以下管道,但由于资源有限,我必须限制并行运行的最大数量。
pipeline {
agent { label "$JENKINS_AGENT" }
parameters { .. }
options { .. }
stages {
stage('Checkout') { .. }
stage('Config') { .. }
stage('Deploy') { .. }
stage('Test') { .. }
}
post {
failure { .. }
success { .. }
always {
cleanup()
}
}
}
例如,如果我只限于3次部署,我怎么能实现这个目标呢?
编辑:我已将以下内容添加到我的jenkins文件中。似乎工作,但我不确定这是否是正确的方法。 (使用Throttle Concurrent Builds Plugin)
properties([
[
$class: 'ThrottleJobProperty',
categories: ['parallel_pipeline'],
limitOneJobWithMatchingParams: false,
maxConcurrentPerNode: 3,
maxConcurrentTotal: 3,
paramsToUseForLimit: '',
throttleEnabled: true,
throttleOption: 'project'
],
])
答案 0 :(得分:2)
您可能会发现这些插件很有用:
答案 1 :(得分:0)
严格来说,目前尚不可能。有open ticket in the Jenkins JIRA对此功能有要求。
您可以通过一些技巧解决此问题。在链接的JIRA问题中,有两种变通方法,其中包括创建伪信号量,以便锁定各个线程,直到伪信号量释放为止。
在特定的用例中,我能够处理此问题的另一种方法是确保parallel
步骤的每个分支都包裹在stage
块中。由于一个阶段一次锁定一个执行器,这意味着您将运行与可用执行器插槽一样多的分支,然后其他分支将等待,直到执行器插槽可用以继续执行。但是,这并不总是有效的-例如,您可能有理由不将每个分支都设为独立阶段。