jenkisn 简单的 参数化构建
实现测试环境的前端和后端的更新、回滚、以及上传线上服务器的功能
需要插件有:Git Parameter Plug-in Active Choices Plug-in
Git Parameter Plug-in:实现自动获取git的所有分支信息,在构建前手动选择分支构建
Active Choices Plug-in:自定义一些变量(groovy脚本),在构建前使用选择相应的选择来控制整个构建过程,如选择发送到哪个服务器,目标是构建还是回滚等
效果如下图
一、简单jenkisn job
一个简单的java程序的构建由三部分构成,代码、构建、部署
代码
构建
部署
以上三个步骤实现了 拉取git代码、构建成jar包、上传到服务器上并执行自定义的重启脚本 三个简单功能,完成了一个服务的升级操作。
但是一般工作中需要额外的需求。比如备份上一个版本的jar包、回滚上一个版本,这些功能最简单的方式就是通过shell脚本来解决。本文的操作依然是最简单的shell脚本,只是尝试使用参数化构建来较少job的数目,让一个job拥有多种功能
下载安装插件略
1.配置选择git分支功能
定义变量
在通用(general)中选择 勾选该选项
添加参数 选择Git Pramameter,
说明:name,定义变量名称,之后可以用$变量名 来调用
Parameter,一般选branch
default value: 构建不选择时,默认 branch=填写的默认值
使用变量:
完成后,构建按钮就会出现选择框
这样git就会根据选择来构建不同分支的代码
2.配置功能的参数化构建
使用的的groovy语法很简单
return [“部署”,“回滚”] 这句代码的效果就是
在刚刚的git parameter 下添加参数,选择Active Choices Parameter (主动选择参数)
name填写为mode ,
勾选上groovy script,内容填写return [“部署”,“回滚”]
这就完成了一个选择框的设计,根据鼠标选择,$mode的值就随之变换。
到这一步完成了变量的定义,接下来就是如何使用变量
因为部署和回滚的shell脚本是不同的,那么有两种方式来实现
原来的部署shell
回滚shell
第一种就是简单的判断mode的值
if [[$mode == "deploy"]];then
部署shell
elif [[$mode == "rollback"]];then
回滚shell
fi
这种适用于同一个服务器根据需要执行不同的脚本
如果服务器地址不一样或者不适合在一个脚本里呢,jenkisn 的 send build artifacts over ssh就提供了参数选择功能
点击服务地址下面的高级按钮
里面有一个label选项,填入 deploy
新增一个ssh server,label填入 rollback
最下面还有一个高级
在这个里面勾选并填入刚刚的变量mode
这就完成了参数选择的功能,这两个构建后动作一个标签是deploy,另一个标签是rollback,构建时选择mode为deploy或者rollback,Jenkins就会自动选择匹配的任务来执行
验证 ,保存配置后点击构建时,选择branch和mode,开始构建
查看控制台窗口,最后就会显示
......
SSH: Skipping [测试环境-10.0.0.114] - Label [deploy] does not match expression [rollback]
SSH: Publishing to [测试环境-10.0.0.114] - Label [deploy] matches expression [deploy]
......
这就是最简单的一个参数化构建,如果遇见情况比较复杂,需要多个变量呢,如果选择mode=deploy,服务器=10.0.0.114,那么就可以使用反应参数来协助
在原来的基础上添加参数,这次选择Active Chioces Reactive Parameter
区别:
Active Choices Parameter (主动选择参数)
Active Choices Reactive Parameter (主动选择反应参数)
reactive
英 [riˈæktɪv] 美 [riˈæktɪv]
adj.
反应的;有反应的;回应的;能起化学反应的;易反应的
该模块的功能是根据之前定义的变量mode来改变自己属性
示例:
设置name 为 action
groovy script:
A = ["test"]
B = ["rollback_test"]
if(mode.equals("deploy")){
return A
} else if(mode.equals("rollback")){
return B
}
简单的判断,如果mode=deploy,则active = test,这就实现了变量的联动反应
多个选择构建
A=["test-deploy"]
B=["test-rollback"]
C=["release-deploy"]
D=["release-rollback"]
if(hostname.equals("test")){
if(mode.equals("deploy")){
return A
}else if(mode.equals("rollback")){
return B
}
}else if (hostname.equals("release")){
if(mode.equals("deploy")){
return C
}else if(mode.equals("rollback")){
return D
}
}
之后在对应返回值来添加不同的【构建后操作】,就可以实现多个参数构建。