Jenkins Pipeline with Matrix Axes -在运行作业之前选择Axes?

qzwqbdag  于 2023-05-06  发布在  Jenkins
关注(0)|答案(1)|浏览(201)

使用Jenkins Pipeline脚本和matrix语法,我可以为一个轴添加多个值,因此多个作业可以运行,并且可以使用该值来拉入ENV文件。
但是,有时我可能只想为一个或两个轴值运行作业。
我想我需要使用extendedChoice参数,它将提供一个复选框列表,但我在网上找不到任何关于如何将其插入到管道脚本的matrix部分的信息。
这里有一个例子,我到目前为止

agent none
    parameters {
        extendedChoice multiSelectDelimiter: ',', name: 'CLIENT', quoteValue: false, saveJSONParameterToFile: false, type: 'PT_CHECKBOX', value: 'client1,client2,client3', visibleItemCount: 20
        gitParameter branchFilter: 'origin/(.*)', defaultValue: 'develop', name: 'BRANCH', type: 'PT_BRANCH'
    }
    stages {
        stage('Build') {
            matrix {
                agent any
                axes {
                    axis {
                        name 'CLIENT'
                        values 'client1', 'client2', 'client3'
                    }
                }
                stages {
                    stage('Running job') {
                        steps {
                            echo "Job running for ${CLIENT}"
                        }
                    }
                    stage('Checkout') {
                        steps {
                            git branch: "${params.BRANCH}", url: 'git@github.com:my-username/jenkins-pipeline-test.git', credentialsId: 'Jenkins EC2'
                        }
                    }
                }
            }
        }
    }
}

这个脚本允许我从我的仓库中选择一个分支,但是目前extendedChoice提供的复选框列表没有做任何事情,并且作业为每个“客户端”运行3次

aoyhnmkz

aoyhnmkz1#

使用轴值的变量是一个功能请求,尚未实现:

因此,不可能使用变量来设置轴值。

选项

1.派生official plugin并添加特性。我学了很多jenkins做这个
1.使用此插件Jenkins Dynamic Axis Plugin
1.在每个阶段,验证是否在choice参数中选择了client,如果不匹配,则跳过执行

选项三:跳过阶段执行

使用when step可以跳过阶段执行

pipeline {
    agent any
    parameters {
        extendedChoice 
            multiSelectDelimiter: ',', 
            name: 'SELECTED_CLIENT', quoteValue: false, 
            saveJSONParameterToFile: false, 
            type: 'PT_CHECKBOX', 
            value: 'client1,client2,client3', 
            visibleItemCount: 20
    }
    stages {
        stage('Build') {
            matrix {
                agent any
                axes {
                    axis {
                        name 'CLIENT'
                        values 'client1', 'client2', 'client3'
                    }
                }
                stages {
                    stage('Running job') {
                    when {
                      expression { params.SELECTED_CLIENT != CLIENT }
                        }                        
                    steps {
                        echo "Job running for ${CLIENT}"
                        }
                    }
                }
            }
        }
    }
}

如果选择client2,则将看到只执行client1和client2

相关问题