【问题标题】:Quicker syntax for Jenkins identical parallel stagesJenkins 相同并行阶段的更快语法
【发布时间】:2021-09-14 17:20:24
【问题描述】:

我的 Jenkins 管道中有一些并行阶段。它们都是相同的,只是它们在不同的代理上运行:

stage {
    parallel {
        stage {
            agent {
                label 'agent-1'
            }
            steps {
                sh 'do task number 468'
            }
        }
        stage {
            agent {
                label 'agent-2'
            }
            steps {
                sh 'do task number 468'
            }
        }
        stage {
            agent {
                label 'agent-3'
            }
            steps {
                sh 'do task number 468'
            }
        }
    }
}

我想在更多节点上添加更多并行阶段,但脚本很长且重复。重写此代码以告诉 jenkins 跨代理 1、2、3、4...等并行化相同步骤的最佳方法是什么?

【问题讨论】:

标签: jenkins jenkins-groovy


【解决方案1】:

请参阅下面的代码,它将在多个代理上创建和运行舞台:

// Define your agents
def agents  = ['agent-1','agent-2','agent-3']

def createStage(label) {
    return {
        stage("Runs on ${label}") { 
            node(label) {
                // build steps that should happen on all nodes go here
                echo "Running on ${label}"
                sh 'do task number 468'
            }
        }
    }
}

def parallelStagesMap = agents.collectEntries {
    ["${it}" : createStage(it)]
}
pipeline {
    agent none
    stages {
         stage('parallel stage') {
            steps {
                script {
                    parallel parallelStagesMap
                }
            }
        }        
    }
}


更多信息请访问:Jenkins examples

【讨论】:

  • 看起来很有希望,我会尝试一下。谢谢!
  • 按照这个逻辑,我在 Jenkins 控制台中收到错误 tput: No value for $TERM and no -T specified。我在每个节点上签出了this thread。我不确定在您的逻辑中调用 tput 可能与手动写出阶段不同。对我有什么想法吗?
  • @SethLutske 我在 jenkins 管道中运行了相同的代码,它运行成功。也许您可以尝试设置 TERM=dumb,如线程中所述。
  • 有没有办法获取条目的索引并将其作为第二个参数传递给 createStage?我希望能够echo # 一个舞台是什么,但我似乎无法弄清楚如何使用collectEntries 来做到这一点
  • @SethLutske 您可以通过以下方式进行操作:def parallelStagesMap = agents.collectEntries { def i=0 ["${it}" : createStage(it,i++)] },您可以使用def createStage(label, idx)
猜你喜欢
  • 2023-04-10
  • 2018-05-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多