遠程觸發Jenkins的Pipeline任務的並發問題處理


前文概述

本文是《遠程觸發Jenkins的pipeline任務》的續篇,上一篇文章實戰了如何通過Http請求遠程觸發指定的Jenkins任務,並且將參數傳遞給Jenkins任務去使用,文末提到了有個並發問題待處理,這就是本文的內容:處理上一篇文章提到的遺留問題。

遠程觸發Jenkins的問題

對Jenkins服務來說,很有可能在某一時刻同時收到多個Http請求,並且這些請求都想觸發同一個任務,在實際使用中發現此時Jenkins並不對每個請求都運行一次任務,接下來的實戰,我們就來重現並解決此問題;

用Java代碼實現多個並發請求

  • 我們用代碼來模擬同一時刻多個Http請求到達Jenkins的情況:寫個Java程序,一次性發送10個Http請求,都是遠程觸發上一章的Jenkins任務的,參考源碼如下:
package com.bolingcavalry;

import com.alibaba.fastjson.JSONObject;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;

public class App {
    public static void main( String[] args ) throws Exception {
        for(int i=0;i<10;i++) {
            JSONObject jsonObject = new JSONObject();
            jsonObject.put("ref", "ref-"+i);
            jsonObject.put("repositoryURL","https://github.com/zq2599/jenkinsdemo.git");
            jsonObject.put("branch", "master");

            CloseableHttpClient httpClient = HttpClients.createDefault();
            HttpPost httpPost = new HttpPost("http://192.168.133.149:32049/generic-webhook-trigger/invoke?token=token-remote-test");
            httpPost.addHeader("Content-Type", "application/json");
            httpPost.setEntity(new StringEntity(jsonObject.toJSONString()));
            CloseableHttpResponse response = httpClient.execute(httpPost);
            response.close();
            httpClient.close();

            System.out.println("response code : " + response.getStatusLine().getStatusCode() + "\n");
        }
    }
}
  • 執行上述Java代碼,控制台輸出如下圖,返回碼都是200,證明這10個請求全部成功了:
    在這里插入圖片描述
  • 去Jenkins網頁上卻發現只執行了一次任務,但是10此請求的ref參數都被打印出來了,如下圖:
    在這里插入圖片描述
  • 10次請求,Jenkins只執行了一次任務,這樣的結果顯然不是我們想要的,經過摸索和嘗試,終於找到了解決此問題的辦法;
  • 打開任務remote-test的設置頁面,如下圖,勾選紅框1(This project is parameterized),點擊紅框2增加一個參數,再點擊紅框3增加一個字符串類型的參數:
    在這里插入圖片描述
  • 在參數的編輯框中,Name字段填寫ref,如下圖紅框所示,注意這個參數在上一篇文章中在Generic Webhook Trigger的參數中設置過,是個固定參數:
    在這里插入圖片描述
  • 點擊底部的Save按鈕保存設置;
  • 在此運行前面的Java程序,發起10個請求,這次Jenkins創建了10個任務了,如下圖:
    在這里插入圖片描述
  • 點開其中的一個查看日志,如下圖,可見參數正確,並且任務執行成功:
    在這里插入圖片描述
    遠程觸發Jenkins任務的並發問題已經修復,如果您也遇到了類型問題,希望本文能給您一些參考。
    https://github.com/zq2599/blog_demos


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM