通過http請求啟動jenkins任務
由於工作需要,要在程式中通過http請求觸發jenkins任務的構建,並且查詢構建狀態,在此記錄下來作為備忘;
介紹
整體情況如下圖所示,通過瀏覽器提交到web伺服器的請求,會導致web伺服器向Jenkins發起一次http請求,Jenkins收到請求後開始構建任務;
總的來說,為了達到遠端觸發Jenkins任務的目的,需要做以下操作:
- 安裝遠端授權的外掛"Build Authorization Token Root Plugin"
- 全域性設定;
- 生成授權token;
- 將Jenkins任務設定成可以遠端觸發;
- 驗證遠端觸發是否正常;
關於Jenkins的安裝和設定
為了節省時間可以在Docker環境下搭建Jenkins,有關細節請參考《docker下的Jenkins安裝和體驗》
接下來,開始實戰;
安裝外掛
先安裝遠端授權的外掛"Build Authorization Token Root Plugin"。
-
如下圖,“系統管理”->“外掛管理”:
-
選中"Avaliable"這個Tab頁,搜尋外掛"Build Authorization Token Root Plugin",然後安裝,如下圖:
設定
為了遠端觸發任務成功,要先做以下設定:
-
如下圖,點選"系統管理"->“全域性安全配置”:
-
如下圖,取消勾選紅框中的"Prevent Cross Site Request Forgery exploits"單選框:
-
如下圖,勾選紅框中的"Allow anonymous read access",這樣可以遠端查詢任務狀態:
-
點選頁面底部的"儲存"按鈕;
-
如下圖,點選右上角的使用者名稱稱進入使用者設定頁面,再點選紅框3中的"Add new Token"按鈕;
-
如下圖,點選紅框中的"Generate"按鈕,會生成token:
-
如下圖,紅框中就是生成的token,此處儲存下來,稍後會用到:
接下來建立一個任務,來驗證遠端觸發這個任務;
建立任務
-
建立一個自由風格的軟體專案:
-
增加一個引數,字串型別的,如下圖所示:
-
如下圖,Build Triggers的設定勾選第一個"Trigger builds remotely (e.g., from scripts)",紅框2中填入前面生成的token:
-
本次任務的主要工作是在控制檯輸出指令碼,如下圖:
-
點選底部的"Save"按鈕儲存任務;
至此,相關的設定工作已經完成,我們來驗證一下吧;
驗證遠端觸發Jenkins任務
為了調整引數方便,我這裡使用了postman來發起http請求,您也可以選擇寫程式碼發起;
- Jenkins伺服器的IP地址是192.168.1.103,因此整個url地址就是:http://192.168.1.103:8080/buildByToken/buildWithParameters
- 請求型別是POST,請求引數有四個,如下列表所示:
引數名 | 引數值 | 說明 |
---|---|---|
job | hello-world | Jenkins上建立的任務名 |
token | 11ccef68782a94c7f393a1bc2247523de2 | 前面生成的token,遠端驗證使用 |
userName | Tom | 任務中增加的業務引數 |
cause | 123456 | 這個引數在查詢任務詳情的時候可以查到 |
- 上述所有引數,在postman上填寫的效果如下圖所示,注意要選中紅框中的tab頁填寫引數:
- 在postman頁面上點選"Send"按鈕發起請求,收到的響應沒有body,只有header,返回碼是201表示成功,如下圖所示:
- 此時去Jenkins頁面上看看,任務已經被觸發,並且輸出的指令碼中把userName引數也成功列印了,如下圖:
查詢任務
有時候我們通過程式發起http請求觸發了任務後,還想通過http請求獲取任務的執行狀態,這裡介紹一下我這現在的做法:
- 如下圖,發起GET請求,獲取所有構建情況,紅框中就是每次任務的id,請求請求地址是:http://192.168.1.103:8080/job/hello-world/api/json
- 上面已經得到了四個任務ID:1、2、3、4,接下來發四次請求查詢每個任務的詳情,查詢4號任務的地址是:http://192.168.1.103:8080/job/hello-world/4/api/json,得到的結果如下圖所示:
注意上圖紅框中的note欄位,該欄位的值"123456",就是我們在POST觸發任務時的cause欄位,所以,這個欄位只要能對上,就表示該任務就是您之前遠端觸發的任務了,因此請在觸發的時候保證cause欄位的唯一性;
至此,遠端觸發Jenkins任務的實戰就完成了,希望能給您做自動化構建的時候提供一些參考;