Jenkins管道-与从函数接收的地图并行构建

时间:2019-01-02 12:50:58

标签: jenkins jenkins-pipeline

最近,我尝试在其中一个阶段中构建包含大量“测试”的詹金斯管道。

问题是,在某个时刻我遇到了关于阶段阶段过大的错误,因此我尝试使用将构建所有阶段的函数来解决该问题,并且可以在以下命令中运行此函数输出(阶段映射)平行。 有些阶段必须在从标签获取的代理(节点)上运行,而另一些阶段则具有一些独特的步骤。 我试图从总体上理解如何编写将构建可并行运行的映射的函数-但没有成功,也没有在网上找到任何好的示例。

我知道这个问题很笼统,但是如果有人能指出或举一个例子,那就太好了。

这是我正在处理的代码段(不是完整的JenkinsFile):

def getParallelBuilders(list_arr) {

def builders = [:]   

builders['Test-1'] = 
            stage ('Test-1')
            {
                node('ci-nodes')
                {
                        when {
                            environment name: 'TEST_NAME', value: 'true'
                            beforeAgent true
                        }
                        timeout(time: 1, unit: 'HOURS')
                        script { runtests() }
                        post {
                            success { onTestSuccess title: 'Temp', pytest: 'results.xml' }
                            cleanup { afterTestCleanup2("clean") }
                        }
                }
            }
return builders

}

对该函数的调用是在构建,配置等阶段之后,从我的“ pipeline”块进行的:

        stage('Testing') {
            steps {
                script { parallel getParallelBuilders(list_arr) }
            }
        }

不确定我解决这个问题的方法是否正确, 希望有人能指出我正确的方向。

1 个答案:

答案 0 :(得分:0)

过一会儿,这是我遇到的问题的解决方案:

    builders = [
            'Test1':
            {
                stage ('Test1')
                {
                    if (RUN_TESTS == 'true')
                    {
                        timeout(time: 30, unit: 'MINUTES')
                        {
                            node('ci-nodes')
                            {
                                try 
                                {
                                    runtests()
                                    onTestSuccess title: 'Temp', pytest: 'results.xml'
                                } 
                                catch (err)
                                {
                                    onTestFailure testName: "Test1"
                                }
                                finally 
                                {
                                    afterTestCleanup()
                                }
                            }
                        }
                    }
                }
            }

主要问题是了解脚本编制管道语法,这实际上与声明方式不同。