Active Choice Parameter 在 Jenkinsfile 中的应用

本文详细介绍了Jenkins中ActiveChoice插件的安装与使用,包括如何配置动态参数,如单选、复选等,并通过实际案例展示了如何根据用户选择动态更新构建选项。此外,还提供了直接配置与Jenkinsfile脚本配置两种方式,帮助用户灵活实现不同构建工具的选择与构建命令的动态生成。
摘要由CSDN通过智能技术生成

js

插件地址:

插件地址:https://plugins.jenkins.io/uno-choice/

Github 地址:https://github.com/jenkinsci/active-choices-plugin



场景

也许你可能有这样一个需求,在 Jenkins 构建时需要使用有单选、复选、及多值输入的场景,那你就可以使用 Active Choice 插件来实现。

一、插件安装

1.1 安装

image-20221022112938268

image-20221022112857295

1.2 配置

1、添加选项参数

选择下图红框

image-20221022142752156

2、编写 Groovy Script

image-20221022115716214

return [
    'Sao Paulo',
    'Rio de Janeiro',
    'Parana',
    'Acre'
]

2、选择选择类型

image-20221022115007328

3、效果展示

当你选择多选时,可通过下图实现多选

4、当选择不同的 user 时可进行动态更新

再次新增一个 Active Choice Reactive 控件,上面的 UI 控件会触发下面的选项参数并动态更新

此时选项参数选择如下图红框

image-20221022142942603

配置:引用参数,实现自动更新。

image-20221022150006005

if (User == "Sao Paulo") {
  return ["Barretos", "Sao Paulo", "Itu"]
} else if (User == "Rio de Janeiro") {
  return ["Rio de Janeiro", "Mangaratiba"]
} else if (User == "Parana") {
  return ["Curitiba", "Ponta Grossa"]
} else if (User == "Acre") {
  return ["Rio Branco", "Acrelandia"]
} else {
  return ["Unknown state"]
}

5、效果

选择 User 时,会根据配置规则刷新 PerformShell。

image-20221022150121681

二、应用案例

实现功能:通过选择不同的构建工具来构建不同的项目。

2.1 直接配置

该方式不通过 Pipeline 脚本配置,直接进入你 Jenkins 的 Project 进行配置。

1、添加选项参数

选择下图红框

image-20221022142752156

2、编写 Groovy Script

image-20221022114859335

return[
  "maven",
  "ant",
  "gradle"
]

3、效果

image-20221022120838181

4、当选择不同的 BuildType 时可进行动态更新

再次新增一个 Active Choice Reactive 控件,上面的 UI 控件会触发下面的选项参数并动态更新

此时选项参数选择如下图红框

image-20221022142942603

5、配置

image-20221022144341857

Groovy 脚本

if (BuildType == "maven") {
  return ["clean package"]
} else if (BuildType == "ant") {
  return ["ant -buildfile build.xml"]
} else if (BuildType == "gradle") {
  return ["gradle clean build"]
} else {
  return ["Unknown state"]
}

# 或下面的都一样的(任选其一即可)

if (BuildType.equals ("maven")) {
  return ["clean package"]
} else if (BuildType.equals ("ant")) {
  return ["ant -buildfile build.xml"]
} else if (BuildType.equals ("gradle")) {
  return ["gradle clean build"]
} else {
  return ["Unknown state"]
}

6、效果

选择 maven 类型时自动选择构建命令,而不需要手动点击 PerformShell 选项

image-20221022145422284

2.2 Jenkinsfile 配置

2.1 部分是直接通过 web 界面设置,接下来我们可以通过 Pipeline 来自动化实现。附上一个参考模板样例:根据自身需求修改即可

properties([
    parameters([
        [$class: 'ChoiceParameter', 
            choiceType: 'PT_SINGLE_SELECT', 
            description: 'Select the Env Name from the Dropdown List', 
            filterLength: 1, 
            filterable: true, 
            name: 'Env', 
            randomName: 'choice-parameter-5631314439613978', 
            script: [
                $class: 'GroovyScript', 
                fallbackScript: [
                    classpath: [], 
                    sandbox: false, 
                    script: 
                        'return[\'Could not get Env\']'
                ], 
                script: [
                    classpath: [], 
                    sandbox: false, 
                    script: 
                        'return["Dev","QA","Stage","Prod"]'
                ]
            ]
        ],
        [$class: 'CascadeChoiceParameter', 
            choiceType: 'PT_SINGLE_SELECT', 
            description: 'Select the Server from the Dropdown List', 
            filterLength: 1, 
            filterable: true, 
            name: 'Server', 
            randomName: 'choice-parameter-5631314456178619', 
            referencedParameters: 'Env',
            script: [
                $class: 'GroovyScript', 
                fallbackScript: [
                    classpath: [], 
                    sandbox: false, 
                    script: 
                        'return[\'Could not get Environment from Env Param\']'
                ], 
                script: [
                    classpath: [], 
                    sandbox: false, 
                    script: 
                        '''if (Env.equals("Dev")) {
  return["devaaa001","devaaa002","devbbb001","devbbb002","devccc001","devccc002"]
} else if (Env.equals("QA")) {
  return["qaaaa001","qabbb002","qaccc003"]
} else if (Env.equals("Stage")) {
  return["staaa001","stbbb002","stccc003"]
} else if (Env.equals("Prod")) {
  return["praaa001","prbbb002","prccc003"]
}'''
                ]
            ]
        ]
    ])
])

pipeline {
  environment {
         vari = ""
  }
  agent any
  stages {
      stage ("Example") {
        steps {
         script{
          echo 'Hello'
          echo "${params.Env}"
          echo "${params.Server}"
          if (params.Server.equals("Could not get Environment from Env Param")) {
              echo "Must be the first build after Pipeline deployment.  Aborting the build"
              currentBuild.result = 'ABORTED'
              return
          }
          echo "Crossed param validation"
        } }
      }
  }
}

构建结果:

image-20221023142918432

<点击跳转至开头>

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

云计算-Security

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值