【问题标题】:Jenkins Pipeline Make a Stage as a Variable?Jenkins Pipeline 将 Stage 作为变量?
【发布时间】:2021-04-16 15:05:59
【问题描述】:
stages {
    stage('Setup') {
    }
    stage('Parallel Stage') {
        parallel {
            stage('Executor 1') {
            }
            stage('Executor 2') {
            } 
            stage('Executor 3') {
            } 
            stage('Executor 4') {
            }                                          
        }
    }
}

上面是我的 Jenkins 流水线的骨架,它有一个设置阶段,然后是一个并行阶段,该阶段执行相同的操作四次以加快执行时间。

有没有办法将阶段定义为变量以减少 4 倍的代码重复并减少我必须进行的编辑次数?

【问题讨论】:

    标签: jenkins jenkins-pipeline jenkins-groovy


    【解决方案1】:

    是的,最好的方法是定义一个生成阶段并且可以并行调用的函数。

    假设您将阶段并行执行到 1 个代理中。

    在下面的示例管道中generateStage 是一个用函数替换嵌套阶段的函数。

    def jobs = ["Executor1", "Executor2", "Executor3"]
     
    def parallelStagesMap = jobs.collectEntries {
        ["${it}" : generateStage(it)]
    }
     
    def generateStage(job) {
        return {
            stage("${job}") {
                    echo "Running stage ${job}."
            }
        }
    }
     
    pipeline {
        agent any
     
        stages {
            stage('setup') {
                steps {
                    echo 'This stage will be executed first.'
                }
            }
     
            stage('parallel stage') {
                steps {
                    script {
                        parallel parallelStagesMap
                    }
                }
            }
        }
    }
    

    管道的输出如下:

    更多详情请看我的回复LINK

    唯一的缺点是你不能在stages之后直接执行这个管道安排,这就是为什么在脚本中调用parallelStageMap

    【讨论】:

    • 将三个变量放在后面时,Jenkins 抱怨没有定义 paralleStagesMap。如您的示例所示,将三个变量放置在管道上方时,我得到`WorkflowScript:64:预期@第64行第13列的阶段。stage('Setup'){^ WorkflowScript:84:预期@第84行,列的阶段13. stage('Parallel Stage') { ^ WorkflowScript: 63: No stage specified @ line 63, column 9. stages
    • @atg 我已经更新了我的 sn-p 和管道的输出。
    • 谢谢!我会尝试运行它,我会让你知道它是怎么回事。我觉得这真的很接近。这可能是我尝试运行的实际命令的问题,但我会看到。
    • 谢谢@np2807 我设法让它工作。重新开始并逐渐添加步骤会有所帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-18
    • 1970-01-01
    • 1970-01-01
    • 2020-11-24
    • 1970-01-01
    相关资源
    最近更新 更多