Jenkins参数化构建犀利插件Active-Choices-Plugin
# 1,前言。
有时候我们在测试环境当中,可能同一个项目,需要部署多套的环境,这个时候可以针对每套环境来创建多个项目进行构建,这样做不无不可,但是今天要介绍一个插件,可以非常优雅的将这些情况,浓缩到一个 job 里边。
刚刚还在一个博主的自我介绍里看到这样一句话:喜欢一切优雅的运维方式···
通过今天的这个插件,可以让我们优雅很多。
# 2,插件介绍。
- 官方地址:https://wiki.jenkins.io/display/JENKINS/Active+Choices+Plugin
- 安装方式:在 Jenkins 插件当中直接搜索即可安装。
- 功能说明:根据所选参数,自动调出对应参数所依赖的后续参数。
# 3,使用插件前的方案。
那么在这种需求之下,基本思路就是,创建两个项目,每个项目负责进行分发部署。详细配置不讲解了,直接看截图内容:
简单说就是创建一个自由风格的项目,可以部署到 192.168.10.1 以及 192.168.10.2 上去,然后再创建一个项目 b,内容也是一样,只不过分发主机变成了 192.168.10.3 和 192.168.10.4。这么做其实也没什么,但是有点不太优雅。
# 4,使用插件后的方案。
首先安装上边介绍的插件,接着对项目开始进行配置。
这里着重介绍一下参数以及使用新参数构建时的部署脚本的调整。
# 1,添加 Active Choices Parameter。
去掉刚刚的 host 的选项参数,然后替换为 Active Choices Parameter,首选设置第一道参数,也就是我们刚刚规划的两套环境的参数:
name:定义一个名称为 plan 的参数,是的,已经开始了,我们的 A 计划以及 B 计划。
script:这里使用 Jenkins 的 groovy 语言进行编写,不了解也没关系,按这个来修改即可。
return[ "Aplan", "Bplan" ]
1
2
3
4Description:写入一些描述信息。
Choice Type:这里定义的是构建时选择的类型,这个地方推荐使用 Radio Buttons。
接着来添加上述定义参数所依赖的第二步骤参数。
# 2,添加 Active Choices Reactive Parameter。
通过添加被动参数,从而实现如上参数选择之后,此处配置的参数自动跟随变动的效果:
Name:定义一个名称为 host 的参数,从而追随如上我们定义的 A 计划或者 B 计划。
script:特有的格式,如果需要更多参数,动态添加即可。
A=["all","192.168.10.1","192.168.10.2"] B=["all","192.168.10.3","192.168.10.4"] if(plan.equals("Aplan")){ return A } if(plan.equals("Bplan")){ return B }
1
2
3
4
5
6
7
8Description:写入一些描述信息。
Choice Type:这里定义的是构建时选择的类型,这个地方推荐使用默认的。
# 3,调整 shell。
接下来要做的工作,就是根据如上定义的参数,进行相应的调整,从而适用于新的构建方式,我这里简单做了一个小例子作为展示:
##set color##
echoRed() { echo $'\e[0;31m'"$1"$'\e[0m'; }
echoGreen() { echo $'\e[0;32m'"$1"$'\e[0m'; }
echoYellow() { echo $'\e[0;33m'"$1"$'\e[0m'; }
##set color##
source /etc/profile
project="config"
remote_user="root"
remote_port="22"
remote_dir=/usr/local/$project
script_dir=/usr/local/scripts
#cd $WORKSPACE && mvn clean install -DskipTests=true
deploy(){
IP=$1
echoGreen "start scp $project on $IP"
#scp -P $remote_port $project.jar $remote_user@$IP:$remote_dir/$project.jar && echo "success scp $project"
#ssh -p $remote_port $remote_user@$IP "/bin/bash $script_dir/deploy.sh $mode $project"
}
if [ $mode == "deploy" ];then
if [ $plan == "Aplan" ];then
echoRed "您选择执行的是A计划"
if [ $host == "all" ];then
deploy 192.168.10.1
sleep 3
deploy 192.168.10.2
else
deploy $host
fi
elif [ $plan == "Bplan" ];then
echoRed "您选择执行的是B计划"
if [ $host == "all" ];then
deploy 192.168.10.3
sleep 3
deploy 192.168.10.4
else
deploy $host
fi
fi
fi
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
最后来张完整截图:
5,验证效果。
先来看最神奇的一个小展示:
可以看到,效果已经如我们所需求的那样,同一套代码下,首先分出 A 计划与 B 计划,然后再每套计划之下,又能有不同的需求走向可供选择,堪称完美。
接下来真正的构建一下,真刀真枪的拉出来练一练。这里我只是为了演示,并没有连接代码库,不过每个地方的构建走向都有清晰的打印输出,所以也能够很容易看出效果。
- 首先来构建一下 A 计划的 all 主机,看看效果。
通过构建日志可以看到,构建已经触及到 A 计划所囊括的两台主机了。
- 再来构建一下 B 计划的 all 主机,看看效果。
同样的效果,构建就走向了 B 计划囊括的两台主机了。
最后构建一下 B 计划的第一台主机,看看效果。
可见,各个流向都是通了的,这样,就把我们一开始的需求,使用一种优雅的方式,给实现了出来。