Jenkins延迟触发构建项目
一、背景
1. 需求
公司采用蓝绿发布模式上线代码,当把代码通过 Jenkins
发布到绿色环境上的时候,测试大概有2
个小时的时间去测试,如果测试没有问题的话,通过脚本调用阿里云SLB
的API
的方式更改蓝绿环境服务器的权重实现发布。
我们打算把改权重的脚本在 Jenkins
上,当执行完绿色环境的 job
后,延迟两个小时自动执行更改权重的job
(这段时间用于测试)。
2. 环境说明
Job名称 | 对应关系 | 说明 |
---|---|---|
release-chaifen-fabu | Job A | 通过文本参数进行传参,输入要发布的环境(蓝、绿)和要发布的服务 |
change_weight_test | Job B | 通过文本参数进行传参,输入要上线的环境为蓝色还是绿色 |
release-chaifen-fabu
change_weight_test
二、配置
1. 配置延时触发
1.1 非Pipeline配置
需要使用到 Join
插件 ,自行安装,在构建后操作
中配置,可参考利用Jenkins插件实现多个job并行后再触发job
1.2 Pipeline配置
需要在 Job B
中配置延迟触发机制,由于是测试环境,所以将延迟时间设置为150秒.
当 release-chaifen-fabu
构建用完后,等待150S
再构建此 Job
测试可以成功,但是有个新的问题,我的 Job B
也需要传参,传入 Blue
或者 Green
,这个该如何实现?
2. Job间传参
2.1 非Pipeline配置
需要使用到 Parameterized Trigger plugin
插件 ,自行安装,安装不成功的话,可以重启 Jenkins
试试
接下来操作可参考Jenkins:多job之间带参数触发的实现
2.2 Pipeline配置
由于我们采用的是 Pipeline
没有 构建后操作
选项,我们将 Job A
中的参数传到文本中
Get-Date -Format 'yyyy.M.d.H.m' >> C:\fabulogs\test.txt
echo "SystemName:$xinxi" >> C:\fabulogs\test.txt
echo "BusinessEnv:$system" >> C:\fabulogs\test.txt
echo "SystemEnv:$huanjing" >> C:\fabulogs\test.txt
C:\fabulogs\test.txt
内容如下
########################
2020.4.13.22.44
SystemName:OscarSystem.BatchDownWorker
BusinessEnv:0
SystemEnv:Blue
########################
上线蓝色环境
2020.4.13.22.45
########################
2020.4.13.23.6
SystemName:OscarSystem.BatchDownWorker;OscarSystem.Service;OscarSystem.ServiceWorker
BusinessEnv:0
SystemEnv:Green
########################
上线绿色环境
2020.4.13.23.6
########################
2020.4.13.23.7
SystemName:OscarSystem.BatchDownWorker;OscarSystem.Service;OscarSystem.ServiceWorker
BusinessEnv:0
SystemEnv:Blue
在 Job B
执行的脚本中,规定其通过读取发布的日志文件( C:\fabulogs\test.txt
)方式传参
# 取出包含SystemEnv内容的最后一条信息
# $a=SystemEnv:Blue
$a=(cat C:\fabulogs\test.txt | findstr "SystemEnv" | C:\tools\tail.exe -n 1 )
# $huanjing=Blue
$huanjing=($a -split ":")[1]
使用的是
Windows
环境,需要下载tail for windows
别妄自尊大!
别妄自菲薄!
QQ技术交流群:Linux架构师之路~ 471443208