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