Jenkins延迟触发构建项目

一、背景

1. 需求

公司采用蓝绿发布模式上线代码,当把代码通过 Jenkins 发布到绿色环境上的时候,测试大概有2个小时的时间去测试,如果测试没有问题的话,通过脚本调用阿里云SLBAPI的方式更改蓝绿环境服务器的权重实现发布。

我们打算把改权重的脚本在 Jenkins 上,当执行完绿色环境的 job 后,延迟两个小时自动执行更改权重的job(这段时间用于测试)。
image-20200412164343851

2. 环境说明

Job名称 对应关系 说明
release-chaifen-fabu Job A 通过文本参数进行传参,输入要发布的环境(蓝、绿)和要发布的服务
change_weight_test Job B 通过文本参数进行传参,输入要上线的环境为蓝色还是绿色

release-chaifen-fabu
image-20200412170248260

change_weight_test
image-20200412170322139

二、配置

1. 配置延时触发

1.1 非Pipeline配置

需要使用到 Join插件 ,自行安装,在构建后操作中配置,可参考利用Jenkins插件实现多个job并行后再触发job
image-20200412165954925

1.2 Pipeline配置

需要在 Job B 中配置延迟触发机制,由于是测试环境,所以将延迟时间设置为150秒.

release-chaifen-fabu 构建用完后,等待150S再构建此 Job
image-20200412170900109

测试可以成功,但是有个新的问题,我的 Job B 也需要传参,传入 Blue 或者 Green ,这个该如何实现?

2. Job间传参

2.1 非Pipeline配置

需要使用到 Parameterized Trigger plugin插件 ,自行安装,安装不成功的话,可以重启 Jenkins 试试
image-20200412172402966

接下来操作可参考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
原文地址:https://www.cnblogs.com/oldxu/p/15463881.html