Jenkins参数化构建与触发
前言
我们在使用Jenkins进行项目构建时,有时会出现两个项目之间关联的情况,比如项目1构建结束后想要直接执行项目2,或者项目1中的某些参数需要传递给项目2来使用,此时可以使用Jenkins的参数化构建方法来完成该过程。
No.1
Jenkins参数化构建
- 勾选参数化构建过程
- 选择你想要添加的参数类型
- 参数定义,这里以选项参数类型为例
- 参数的使用,例如将构造时所选的参数打印10次:
for((index=0;index<10;index++));
do
echo ${Param}
done
- 参数化构建,回到首页,点击 Build with Parameters,在弹出的选项框中勾选你想要使用的参数
例如我们选择了option2,然后点击立即构建,可以在该构建的项目下,查看控制台输出:
此时可以看到控制台log中打印了10次option2,说明参数化构建成功。
No.2
Jenkins任务触发
在进行多任务的持续集成项目构建时,经常会遇到需要执行完任务1,然后再执行任务2,如果任务2的执行不需要用到任务1中的参数,那么可以在任务2中的触发器中添加任务1的名字。还是以write为任务1,以test_write为任务2举例,在任务2的构建触发器选项中勾选其他工程构建后触发,然后在关注的项目中填写任务1的名字write,如下图所示:
然后在任务2的执行shell脚本中写入打印3次‘test’的指令,保存。最后参数化构建任务1,还是打印10次选项,这次勾选option3,可以看到该界面中,出现了下级项目为test_write的链接:
构建任务1,参数选项为option3,则任务1的输出为:
然后点进test_write中,发现刚刚完成一个构建项目:
点击可以查看这个项目的控制台输出:
任务2正常打印了3遍test,说明任务1成功触发了任务2并且正常构建了。无参数触发的方法不止这一种,还可以通过在任务1中添加构建后操作-构建其他工程-填写要构建的项目来完成,如下图所示,原理与上述类似,不再赘述。
No.3
Jenkins参数化触发
当任务1中有构建后需要传递给任务2的参数时,要想实现带参数构建,需要借助一个Jenkins插件:Parameterized Trigger,读者可以自行安装一下,安装成功后,在项目的构建后操作选项中可以看到多了一个Trigger parameterized build on other projects选项:
还是以write任务为任务1,test_write任务为任务2为例进行讲解。
1.在任务1中将执行中的参数保存到properties文件中
因为终端shell执行完毕后变量都会回收,所以不能够将变量直接传递给任务2,需要将其写入到文件中然后以文件的形式传递,在任务1的执行shell代码中加入如下代码:
echo "PARAM_NAME=$Param" > profile.txt
PARAM_NAME表示的就是将要传递给任务2的参数,如图所示:
2.在任务1中增加构建后操作
在任务1中的增加构建后操作中,选择Trigger parameterized build on other projects,然后在项目名字中填写test_write,在Add Parameters选项中选择Parameters from properties file:
在Use properties from file中添加profile.txt的路径,注意此处一定要填你在服务器上保存的profile.txt的绝对路径,否则会提示找不到(重要!!!)。
然后点击保存。
3.在任务2中添加构建参数
将在任务1的properties文件中定义的参数PARAM_NAME 传递给任务2,那么PARAM_NAME就是任务2的构建参数,定义其为字符类型,并在执行shell中打印三次这个参数。
任务2执行shell代码:
for((index=0;index<3;index++));
do
echo ${PARAM_NAME}
done
然后点击保存。
4.测试是否构建成功
至此完成了任务1到任务2的参数化触发过程,此时打开任务1,参数化构建任务1,选择option2测试:
我们期望任务1打印10次option2之后将该值通过保存在profile.txt中的PARAM_NAME来传递给任务2,并且触发任务2进行构建,最终在任务2中打印3次:
如图所示,此时说明任务2已经由任务1带参数触发成功了。
结语
2020/09/01
至此我们已经介绍了Jenkins参数化构建与触发的三种常用场景,使用Jenkins自带的该工具可以在构建多项目时节省很多时间,提升工作效率。
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- TRTC Android端开发接入学习之环境快速搭建(三)
- 为了满足UI小姐姐要求,自己动手实现了Android面包屑效果(支持Fragment联动)
- Jenkins持续集成「编译打包、代码检查、单元测试、环境部署、软件测试」
- 斗鱼直播带你实现:你主播最爱的Android音视频开发
- 深度解析Redis线程模型设计原理
- 聊聊claudb的hash command
- Exceptionless 5.x 无法正常发送邮件的问题解决
- 详解 Linux 中的硬链接与软链接
- 程序员进阶之算法练习(四十七)
- Git 合并多个 commit,保持历史简洁
- Vue开源项目使用探索
- 自定义View | 仿QQ运动步数进度效果
- TS 设计模式05 - 装饰者模式
- 四、学编程语言前,不了解Git,怎么入坑
- 【设计模式系列(三)】彻底搞懂原型模式