首页 > 解决方案 > 如何在声明性管道中使用矩阵部分

问题描述

我有以下管道。我需要这个管道同时在 4 个不同的节点上运行。我已经读过在声明性管道中使用矩阵部分是完成这项工作的关键。我该如何使用下面的管道来做到这一点?

pipeline 
{
    stages
    {
        stage ('Test')
        {
            steps
            {
                script
                {
                    def test_proj_choices = ['AD', 'CD', 'DC', 'DISP_A', 'DISP_PROC', 'EGI', 'FD', 'FLT', 'FMS_C', 'IFF', 'liblO', 'libNGC', 'libSC', 'MISCMP_MP', 'MISCMP_GP', 'NAV_MGR', 'RADALT', 'SYS', 'SYSIO15', 'SYSIO42', 'SYSRED', 'TACAN', 'VOR_ILS', 'VPA', 'WAAS', 'WCA']
                    for (choice in test_proj_choices) 
                    {
                        stage ("${choice}") 
                        {
                            echo "Running ${choice}"
                            build job: "UH60Job", parameters: [string(name: "TEST_PROJECT", value: choice), string(name: "SCADE_SUITE_TEST_ACTION", value: "all"), string(name: "VIEW_ROOT", value: "myview")] 
                        }
                    }
                }
            }
        }
    }
}

标签: jenkinsgroovyjenkins-pipelinejenkins-groovyjenkins-cli

解决方案


一篇有用的文章可以在这里找到:https ://www.jenkins.io/blog/2019/11/22/welcome-to-the-matrix/

这里的官方文档:https ://www.jenkins.io/doc/book/pipeline/syntax/#declarative-matrix

因此,语法应该是:

pipeline {
    agent none
    stages {
        stage('Tests') {
            matrix {
                agent any
                axes {
                    axis {
                        name 'CHOICE'
                        values 'AD', 'CD', 'DC', 'DISP_A', 'DISP_PROC', 'EGI', 'FD', 'FLT', 'FMS_C', 'IFF', 'liblO', 'libNGC', 'libSC', 'MISCMP_MP', 'MISCMP_GP', 'NAV_MGR', 'RADALT', 'SYS', 'SYSIO15', 'SYSIO42', 'SYSRED', 'TACAN', 'VOR_ILS', 'VPA', 'WAAS', 'WCA'
                    }
                }
                stages {
                    stage("Test") {
                        steps {
                            echo "Running ${CHOICE}"
                            build job: "UH60Job", parameters: [string(name: "TEST_PROJECT", value: CHOICE), string(name: "SCADE_SUITE_TEST_ACTION", value: "all"), string(name: "VIEW_ROOT", value: "myview")] 
                        }
                    }
                }
            }
        }
    }
}

请注意,您的内部stage不能动态命名,尝试扩展时会出现语法错误"${CHOICE}"


推荐阅读