一、背景
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