1. 程式人生 > >通過http請求啟動jenkins任務

通過http請求啟動jenkins任務

由於工作需要,要在程式中通過http請求觸發jenkins任務的構建,並且查詢構建狀態,在此記錄下來作為備忘;

介紹

整體情況如下圖所示,通過瀏覽器提交到web伺服器的請求,會導致web伺服器向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"。

  1. 如下圖,“系統管理”->“外掛管理”:
    在這裡插入圖片描述

  2. 選中"Avaliable"這個Tab頁,搜尋外掛"Build Authorization Token Root Plugin",然後安裝,如下圖:在這裡插入圖片描述

設定

為了遠端觸發任務成功,要先做以下設定:

  1. 如下圖,點選"系統管理"->“全域性安全配置”:
    在這裡插入圖片描述

  2. 如下圖,取消勾選紅框中的"Prevent Cross Site Request Forgery exploits"單選框:
    在這裡插入圖片描述

  3. 如下圖,勾選紅框中的"Allow anonymous read access",這樣可以遠端查詢任務狀態:
    在這裡插入圖片描述

  4. 點選頁面底部的"儲存"按鈕;

  5. 如下圖,點選右上角的使用者名稱稱進入使用者設定頁面,再點選紅框3中的"Add new Token"按鈕;
    在這裡插入圖片描述

  6. 如下圖,點選紅框中的"Generate"按鈕,會生成token:
    在這裡插入圖片描述

  7. 如下圖,紅框中就是生成的token,此處儲存下來,稍後會用到:
    在這裡插入圖片描述

接下來建立一個任務,來驗證遠端觸發這個任務;

建立任務

  1. 建立一個自由風格的軟體專案:
    在這裡插入圖片描述

  2. 增加一個引數,字串型別的,如下圖所示:
    在這裡插入圖片描述

  3. 如下圖,Build Triggers的設定勾選第一個"Trigger builds remotely (e.g., from scripts)",紅框2中填入前面生成的token:
    在這裡插入圖片描述

  4. 本次任務的主要工作是在控制檯輸出指令碼,如下圖:
    在這裡插入圖片描述

  5. 點選底部的"Save"按鈕儲存任務;

至此,相關的設定工作已經完成,我們來驗證一下吧;

驗證遠端觸發Jenkins任務

為了調整引數方便,我這裡使用了postman來發起http請求,您也可以選擇寫程式碼發起;

  1. Jenkins伺服器的IP地址是192.168.1.103,因此整個url地址就是:http://192.168.1.103:8080/buildByToken/buildWithParameters
  2. 請求型別是POST,請求引數有四個,如下列表所示:
引數名 引數值 說明
job hello-world Jenkins上建立的任務名
token 11ccef68782a94c7f393a1bc2247523de2 前面生成的token,遠端驗證使用
userName Tom 任務中增加的業務引數
cause 123456 這個引數在查詢任務詳情的時候可以查到
  1. 上述所有引數,在postman上填寫的效果如下圖所示,注意要選中紅框中的tab頁填寫引數:
    在這裡插入圖片描述
  2. 在postman頁面上點選"Send"按鈕發起請求,收到的響應沒有body,只有header,返回碼是201表示成功,如下圖所示:
    在這裡插入圖片描述
  3. 此時去Jenkins頁面上看看,任務已經被觸發,並且輸出的指令碼中把userName引數也成功列印了,如下圖:
    在這裡插入圖片描述

查詢任務

有時候我們通過程式發起http請求觸發了任務後,還想通過http請求獲取任務的執行狀態,這裡介紹一下我這現在的做法:

  1. 如下圖,發起GET請求,獲取所有構建情況,紅框中就是每次任務的id,請求請求地址是:http://192.168.1.103:8080/job/hello-world/api/json
    在這裡插入圖片描述
  2. 上面已經得到了四個任務ID:1、2、3、4,接下來發四次請求查詢每個任務的詳情,查詢4號任務的地址是:http://192.168.1.103:8080/job/hello-world/4/api/json,得到的結果如下圖所示:
    在這裡插入圖片描述
    注意上圖紅框中的note欄位,該欄位的值"123456",就是我們在POST觸發任務時的cause欄位,所以,這個欄位只要能對上,就表示該任務就是您之前遠端觸發的任務了,因此請在觸發的時候保證cause欄位的唯一性;

至此,遠端觸發Jenkins任務的實戰就完成了,希望能給您做自動化構建的時候提供一些參考;