歡迎通路我的GitHub
這裡分類和彙總了欣宸的全部原創(含配套源碼):https://github.com/zq2599/blog_demos
- 由于工作需要,要在程式中通過http請求觸發jenkins任務的建構,并且查詢建構狀态,在此記錄下來作為備忘;
介紹
- 整體情況如下圖所示,通過浏覽器送出到web伺服器的請求,會導緻web伺服器向Jenkins發起一次http請求,Jenkins收到請求後開始建構任務;
通過http請求啟動jenkins的任務 - 總的來說,為了達到遠端觸發Jenkins任務的目的,需要做以下操作:
- 安裝遠端授權的插件"Build Authorization Token Root Plugin"
- 全局設定;
- 生成授權token;
- 将Jenkins任務設定成可以遠端觸發;
- 驗證遠端觸發是否正常;
關于Jenkins的安裝和設定
- 為了節省時間可以在Docker環境下搭建Jenkins,有關細節請參考《docker下的Jenkins安裝和體驗》
- 接下來,開始實戰;
安裝插件
- 先安裝遠端授權的插件"Build Authorization Token Root Plugin"。
- 如下圖,"系統管理"->"插件管理":
通過http請求啟動jenkins的任務 - 選中"Avaliable"這個Tab頁,搜尋插件"Build Authorization Token Root Plugin",然後安裝,如下圖:
通過http請求啟動jenkins的任務
設定
- 為了遠端觸發任務成功,要先做以下設定:
- 如下圖,點選"系統管理"->"全局安全配置":
通過http請求啟動jenkins的任務 - 如下圖,取消勾選紅框中的"Prevent Cross Site Request Forgery exploits"單選框:
通過http請求啟動jenkins的任務 - 如下圖,勾選紅框中的"Allow anonymous read access",這樣可以遠端查詢任務狀态:
通過http請求啟動jenkins的任務 - 點選頁面底部的"儲存"按鈕;
- 如下圖,點選右上角的使用者名稱進入使用者設定頁面,再點選紅框3中的"Add new Token"按鈕;
通過http請求啟動jenkins的任務 - 如下圖,點選紅框中的"Generate"按鈕,會生成token:
通過http請求啟動jenkins的任務 - 如下圖,紅框中就是生成的token,此處儲存下來,稍後會用到:
通過http請求啟動jenkins的任務 - 接下來建立一個任務,來驗證遠端觸發這個任務;
建立任務
- 建立一個自由風格的軟體項目:
通過http請求啟動jenkins的任務 - 增加一個參數,字元串類型的,如下圖所示:
通過http請求啟動jenkins的任務 - 如下圖,Build Triggers的設定勾選第一個"Trigger builds remotely (e.g., from scripts)",紅框2中填入前面生成的token:
通過http請求啟動jenkins的任務 - 本次任務的主要工作是在控制台輸出腳本,如下圖:
通過http請求啟動jenkins的任務 - 點選底部的"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表示成功,如下圖所示:
通過http請求啟動jenkins的任務 - 此時去Jenkins頁面上看看,任務已經被觸發,并且輸出的腳本中把userName參數也成功列印了,如下圖:
通過http請求啟動jenkins的任務
查詢任務
- 有時候我們通過程式發起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 ,得到的結果如下圖所示:
通過http請求啟動jenkins的任務