天天看點

通過http請求啟動jenkins的任務

歡迎通路我的GitHub

這裡分類和彙總了欣宸的全部原創(含配套源碼):https://github.com/zq2599/blog_demos
  • 由于工作需要,要在程式中通過http請求觸發jenkins任務的建構,并且查詢建構狀态,在此記錄下來作為備忘;

介紹

  • 整體情況如下圖所示,通過浏覽器送出到web伺服器的請求,會導緻web伺服器向Jenkins發起一次http請求,Jenkins收到請求後開始建構任務;
    通過http請求啟動jenkins的任務
  • 總的來說,為了達到遠端觸發Jenkins任務的目的,需要做以下操作:
  1. 安裝遠端授權的插件"Build Authorization Token Root Plugin"
  2. 全局設定;
  3. 生成授權token;
  4. 将Jenkins任務設定成可以遠端觸發;
  5. 驗證遠端觸發是否正常;

關于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頁填寫參數:
通過http請求啟動jenkins的任務
  • 在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
通過http請求啟動jenkins的任務
  • 上面已經得到了四個任務ID:1、2、3、4,接下來發四次請求查詢每個任務的詳情,查詢4号任務的位址是:http://192.168.1.103:8080/job/hello-world/4/api/json ,得到的結果如下圖所示:
    通過http請求啟動jenkins的任務

歡迎關注51CTO部落格:程式員欣宸