我如何使用' parallel' jenkins管道中的选项' post'部分?

时间:2017-06-28 15:03:04

标签: jenkins groovy jenkins-pipeline

我查看了许多管道示例以及如何在管道脚本中编写post build部分。但从来没有得到我正在寻找的答案。 我有4个工作 - 比如工作A,B,C和D.我希望工作A先运行,如果成功,它应该并行触发工作B,C,D。如果作业A失败,它应该只触发作业B.如下所示:

pipeline {
    agent any

stages {
    stage('Build_1') {
        steps {
            sh '''
               Build Job A
            '''
        }
    }

post {
    failure {
        sh '''
            Build Job B
        '''
    }
    success {
         sh '''
             Build Job B,C,D in parallel
         '''
    }
}
}

我尝试使用' parallel'在帖子部分的选项,但它给了我错误。有没有办法同时建立作业B,C,D,后期成功'部?

提前致谢!

2 个答案:

答案 0 :(得分:3)

错误消息很清楚:

  

使用了无效的“并行”步骤 - 在此上下文中不允许 -   并行步骤只能用作阶段中唯一的顶级步骤   步骤

限制性较强的声明性语法目前不允许在帖子中使用并行。

如果您不想切换到scripted syntax,另一个应该可行的选项:在第二阶段并行构建作业B,C,D并在后面部分中移动失败条件你的第一阶段。结果,如果A成功,作业B,C,D将运行。如果A不成功,则仅运行作业B.

pipeline {
    agent any

    stages {
        stage('one') {
            steps {
                // run job A
            }   
            post {
                failure {
                    // run job B
                }
            }
        }
        stage('two') {
            steps {
                parallel(
                     // run job B, C, D
                )

            }
        }
    }
}

答案 1 :(得分:0)

parallel 关键字实际上可以在 post 条件中工作,只要它封装在脚本块中,因为脚本块只是脚本管道的后备,它允许您在任何地方运行并行执行步骤。< br/> 以下应该可以正常工作:

pipeline {
    agent any
    stages {
        stage('Build_1') {
            steps {
                //  Build Job A
            }
        }
    }

    post {
        failure {
            // run job B
            build job: 'Job-B'
        }
        success {
            script {
                // run jobs B, C, D in parallel 
                def jobs = ['Job-B', 'Job-C', 'Job-D']
                parallel jobs.collectEntries { job ->
                    ["Building ${job}" : {
                        build job: job
                    }]
                }
            }
        }
    }
}

这只是一个示例,具体的参数或配置(对于 build 关键字)可以根据您的需要添加到每个作业执行中。