1. 程式人生 > >Jenkins job 之間實現帶引數觸發

Jenkins job 之間實現帶引數觸發

1 背景

開發打包的 jenkins job A 是在 local 的一臺 windows 上,同時在這臺 local 的 windows 上還有一 另一個 jenkins job B 是用來上傳 job A 生成的包(build)到測試平臺的倉庫(比如 saucelabs storage)。然而 我們測試的 jenkins job C 是在 azure 上的一臺 windows server 2012 上。我們期望的是當 job A 一旦有包(build)生成就傳遞 build number 給 job B 同時觸發 job B 執行,一旦 Job B 執行就會 上傳 build 到測試平臺的倉庫,接著由 job B 把 build number 傳遞給 Job C 同時觸發,job C 執行。那麼 問題就來了 job B 和 Job C 不在同一臺機器,job B 怎麼實現傳引數遠端觸發 job C 呢? 下面 我們分兩部分來介紹。

2 同一 jenkins 傳參觸發

要實現同一 jenkins 上的 job A 傳遞引數(build number)並觸發 job B 執行我們需要做的步驟如下:

1、首先安裝 jenkins 引數化外掛:Parameterized Trigger Plugin。

2、對 Job A 進行配置;在 Job A 配置面板中 Post-build Actions 選項中選擇 Trigger parameterized build on other projects ,如下圖:

這裡寫圖片描述

3、對 Job B 進行配置;在 JobA 中配置了 build_number 引數,在 B job 中要使用此引數,那麼需要在Job B 的配置介面中勾選 The build is parameterized。具體配置資訊如下所示:

這裡寫圖片描述

4、檢查引數是否成功的由 Job A 傳給了 Job B;在 job B 的 windows bat 視窗輸入如下命令,在 job B 的控制檢視輸出引數是否正確。如下圖:

這裡寫圖片描述
這裡寫圖片描述

經過上面幾步我們就可以很容易的實現同一 jenkins 的傳參觸發,愉快的享用吧。

3 不同 jenkins 傳參遠端觸發

要實現不同 jenkins 上的 job B 傳遞引數(build number)並觸發遠端機器上的 job C 執行我們需要做的步驟如下:

1、首先要把 Job A 傳遞給 Job B 的引數 build_number 以 key-vaule 的方式(便於 job C 讀取引數使用和更新引數)寫入屬性檔案(test.properties),在 Job B 中使用如下命令:

echo build_name="%build_number%" >> E:\test.properties
  • 1

如下圖:

這裡寫圖片描述

2、獲取 Job C 所在的 jenkins 的 API Token,如下圖所示:

這裡寫圖片描述

3、在 Job B 中使用 jenkins 的 remote API 通過 curl 命令列來傳引數給 Job C 並觸發 Job C 執行,具體命令如下:

curl -X POST http://192.168.181.11:8080/job/C/build --user linda:2a2511f75356f6691f6049bf9ee3806b  --form [email protected]"E:\test.properties" --form json="{\"parameter\": [{\"name\":\"test.properties\", \"file\":\"file0\"}]}
  • 1

如下圖:

這裡寫圖片描述

上面執行的命令引數說明:

  • 192.168.181.11:8080 是 job C 所在的 windows 2012 sever 的 ip 地址;
  • C 是 job 的名稱,這裡我們觸發的是 Job C;
  • linda:2a2511f75356f6691f6049bf9ee3806b 中 linda 是 jenkins 使用者名稱,2a2511f75356f6691f6049bf9ee3806b 是 jenkins 的 API Token;

4、既然是通過檔案傳遞引數那麼 Job C 也要配置接收。如下圖:

這裡寫圖片描述

經過上面幾步我們就可以很容易的實現不同 jenkins 傳參遠端觸發,愉快的享用吧。總之這樣一來當 job A 帶引數觸發了 job B,Job B 帶引數檔案觸發 Job C,你會看到在 Job C 的根目錄下有了引數檔案test.properties,這樣就可以在 Job C 中使用該引數去測試平臺的倉庫獲取對應的 build 來進行全自動化測試。

附上 jenkins remote api 的 URL: https://wiki.jenkins.io/display/JENKINS/Remote+access+API