持续交付之解决Jenkins自动发布中交互式参数应用
背景
我们在使用 Jenkins 做自动发布平台的时候遇到一个需求,即根据不同的版本分支,选择不同的主机环境,同时还需传入相应的程序版本号。最终实现 Nexus OSS
仓库下载对应版本的程序包,自动化实现整个程序的发布。
Active Choices Plugin
经过查找,发现 Jenkins 的 Active Choices Plugin
是支持实现这个功能的。
简介
Active Choices 插件提供了其他 Jenkins 参数类型,可以将其呈现为作业表单中的用户界面(UI)控件。它支持使用系统环境变量,全局节点属性,并且在 Groovy 上下文中支持自由作业的 Jenkins 项目。
安装插件后,将提供三种新的参数类型:
- 主动选择参数
- 主动选择反应参数
- Active Choices反应参考参数
Active Choices 参数允许用户选择作业参数的值。参数值可以是:
- 动态生成的(使用Groovy或Scriptler脚本)
- 根据其他UI参数动态更新
- 多值(可以有多个值)
- 使用各种UI控件(包括动态HTML)呈现
主动选择参数
Active Choices 参数使用 Groovy 脚本或 Scriptler 目录中的脚本为生成参数动态生成值选项列表。
示意图:
- Active Choices 参数可以呈现为标准选择列表,复选框和单选按钮。
- 可以选择显示一个文本框过滤器,以帮助过滤值选项。
主动选择反应式和反应式参考参数
参数使用 Groovy 脚本或 Scriptler 脚本动态生成构建参数的值选项,其他作业UI控件的值更改时,可以动态更新(主动选择)“反应式”和“反应式参考”参数(级联更新)
示意图:
- “Gender”参数更改时,"Professions”参数的值选项得到更新。
- 此外,当更新“Gender”参数时,也会动态更新显示为图片的反应性参考参数“ Gender_Balance”。
具体设置
安装插件
参数级联更新
勾选参数化构建,选择 Active Choices Parameter
设置代码分支参数:
- Name:设置参数 “Brach”
- Script:设置值脚本
- Description:设置参数描述信息
- ChoiceType:设置按钮形式
设置主机参数:
- Name:设置参数 “Hosts”
- Script:设置值脚本
- Description:设置参数描述信息
- ChoiceType:设置按钮形式
- Referenced parameters:关联参数,此处设置为上面的 “Branch”
Groovy Script:
dev = ["Dev_ALL","Dev_AutoTest","Dev_FunctionTest","Dev_Develop"]
release = ["Release_ALL","Release_AutoTest","Release_FunctionTest","Release_Develop"]
if(Branch.equals("dev")){
return dev
}else if (Branch.equals("release")){
return release
}else {
return ["Unknown Hosts"]
}
设置版本参数:
- Name:设置参数 “Package_Name”
- Script:设置
Groovy Script
从文件中获取变量值 - Description:设置参数描述信息
- ChoiceType:设置按钮形式
- Referenced parameters:关联参数,此处设置为上面的 “Branch”
Groovy Script:
if(Branch.equals("dev")){
lineList = new File("D:\\Jenkins-workspace\\Jenkins\\workspace\\V3C-WEBAPP-Dev\\package_history.txt").readLines()
lineList.sort{it}
Collections.reverse(lineList)
lineList.each {
return it;
}
}else if (Branch.equals("release")){
lineList = new File("D:\\Jenkins-workspace\\Jenkins\\workspace\\V3C-WEBAPP-Release\\package_history.txt").readLines()
lineList.sort{it}
Collections.reverse(lineList)
lineList.each {
return it;
}
}else {
return ["Unknown Hosts"]
}
package_history.txt 内容参考:
在集成编译的时候,通过 Python 脚本把对应程序包名写入 package_history.txt
:
# coding=utf-8
# 获取Jenkins变量
WORKSPACE = os.getenv("WORKSPACE")
def packagehistory(zipname):
Path = WORKSPACE+"\\package_history.txt"
f = open(Path,'a',encoding='utf-8')
f.write(zipname)
f.write("\n")
f.close()
实现效果
那么后续怎么接受参数呢?可以参考图中 shell 脚本设置:
#!/usr/bin/env bash
echo '版本类型:'$Branch
echo '环境类型:'$Hosts
echo '文件名称:'$Package_Name
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
- 点赞
- 收藏
- 关注作者
评论(0)