0
点赞
收藏
分享

微信扫一扫

持续交付之解决Jenkins自动发布中交互式参数应用

持续交付之解决Jenkins自动发布中交互式参数应用_Groovy

背景

我们在使用 Jenkins 做自动发布平台的时候遇到一个需求,即根据不同的版本分支,选择不同的主机环境,同时还需传入相应的程序版本号。最终实现 NexusOSS 仓库下载对应版本的程序包,自动化实现整个程序的发布。

Active Choices Plugin

经过查找,发现 Jenkins 的 ActiveChoicesPlugin 是支持实现这个功能的。

简介

Active Choices 插件提供了其他 Jenkins 参数类型,可以将其呈现为作业表单中的用户界面(UI)控件。它支持使用系统环境变量,全局节点属性,并且在 Groovy 上下文中支持自由作业的 Jenkins 项目。

安装插件后,将提供三种新的参数类型:

  • 主动选择参数
  • 主动选择反应参数
  • Active Choices反应参考参数

Active Choices 参数允许用户选择作业参数的值。参数值可以是:

  • 动态生成的(使用Groovy或Scriptler脚本)
  • 根据其他UI参数动态更新
  • 多值(可以有多个值)
  • 使用各种UI控件(包括动态HTML)呈现

主动选择参数

Active Choices 参数使用 Groovy 脚本或 Scriptler 目录中的脚本为生成参数动态生成值选项列表。

示意图:

持续交付之解决Jenkins自动发布中交互式参数应用_List_02

  • Active Choices 参数可以呈现为标准选择列表,复选框和单选按钮。
  • 可以选择显示一个文本框过滤器,以帮助过滤值选项。

主动选择反应式和反应式参考参数

参数使用 Groovy 脚本或 Scriptler 脚本动态生成构建参数的值选项,其他作业UI控件的值更改时,可以动态更新(主动选择)“反应式”和“反应式参考”参数(级联更新)

示意图:

  • “Gender”参数更改时,"Professions”参数的值选项得到更新。
  • 此外,当更新“Gender”参数时,也会动态更新显示为图片的反应性参考参数“ Gender_Balance”。

具体设置

安装插件

持续交付之解决Jenkins自动发布中交互式参数应用_Groovy_04

参数级联更新

勾选参数化构建,选择 ActiveChoicesParameter

设置代码分支参数:

持续交付之解决Jenkins自动发布中交互式参数应用_Groovy_05

  • Name:设置参数 "Brach"
  • Script:设置值脚本
  • Description:设置参数描述信息
  • ChoiceType:设置按钮形式

设置主机参数:

持续交付之解决Jenkins自动发布中交互式参数应用_Groovy_06

  • Name:设置参数 "Hosts"
  • Script:设置值脚本
  • Description:设置参数描述信息
  • ChoiceType:设置按钮形式
  • Referenced parameters:关联参数,此处设置为上面的 “Branch”

Groovy Script:


1. dev = ["Dev_ALL","Dev_AutoTest","Dev_FunctionTest","Dev_Develop"]
2. release = ["Release_ALL","Release_AutoTest","Release_FunctionTest","Release_Develop"]
3. 
4. if(Branch.equals("dev")){
5.     return dev
6. }else if (Branch.equals("release")){
7.     return release
8. }else {
9.     return ["Unknown Hosts"]
10. }

设置版本参数:

持续交付之解决Jenkins自动发布中交互式参数应用_List_07

  • Name:设置参数 "Package_Name"
  • Script:设置 GroovyScript 从文件中获取变量值
  • Description:设置参数描述信息
  • ChoiceType:设置按钮形式
  • Referenced parameters:关联参数,此处设置为上面的 “Branch”

Groovy Script:


1. if(Branch.equals("dev")){
2.     lineList = new File("D:\\Jenkins-workspace\\Jenkins\\workspace\\V3C-WEBAPP-Dev\\package_history.txt").readLines()
3.     lineList.sort{it}
4.     Collections.reverse(lineList)
5.     lineList.each {
6.         return it;
7.     }
8. }else if (Branch.equals("release")){
9.     lineList = new File("D:\\Jenkins-workspace\\Jenkins\\workspace\\V3C-WEBAPP-Release\\package_history.txt").readLines()
10.     lineList.sort{it}
11.     Collections.reverse(lineList)
12.     lineList.each {
13.         return it;
14.     }
15. }else {
16.     return ["Unknown Hosts"]
17. }

package_history.txt 内容参考:

持续交付之解决Jenkins自动发布中交互式参数应用_Jenkins_08 在集成编译的时候,通过 Python 脚本把对应程序包名写入 

package_history.txt:
1. # coding=utf-8
2. 
3. # 获取Jenkins变量
4. WORKSPACE = os.getenv("WORKSPACE")
5. 
6. def packagehistory(zipname):
7.     Path = WORKSPACE+"\\package_history.txt"
8.     f = open(Path,'a',encoding='utf-8')
9.     f.write(zipname)
10.     f.write("\n")
11.     f.close()

实现效果

那么后续怎么接受参数呢?可以参考图中 shell 脚本设置:

持续交付之解决Jenkins自动发布中交互式参数应用_List_10


1. #!/usr/bin/env bash
2. echo '版本类型:'$Branch
3. echo '环境类型:'$Hosts
4. echo '文件名称:'$Package_Name
5. 
6. ansible-playbook /home/ansible/playbooks/v3c-deploy.yaml --extra-vars "package_name=$Package_Name branch=$Branch target=$Hosts"

小结

本文简要带着大家快速学习 Jenkins 中一个动态级联传参的小技巧,希望对大家有所帮助。


参考资源:

[1]:https://wiki.jenkins.io/display/JENKINS/Active+Choices+Plugin


持续交付之解决Jenkins自动发布中交互式参数应用_Groovy_11







举报

相关推荐

0 条评论