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