簡體   English   中英

如何從GitHub安全地觸發Jenkins構建

[英]How to securely trigger Jenkins builds from GitHub

我有一個在防火牆后運行的Jenkins實例,我不想將Jenkins UI暴露給Internet。 (即使有安全措施,這絕對不是一種選擇)。

我的願望是打開一個不同的端口,只能觸發構建,但不暴露UI。 我瀏覽了插件列表,但是我找不到任何合適的插件。

我當前的設置是將Apache作為代理運行,並允許通過regex-module在不同的端口上觸發。 (但不是任何其他網址。)

Apache做了太多額外的負載(和內存;它是一個非常小的機器),所以我真的想擺脫它。

如何通過開放端口允許觸發器,但不通過該端口公開Jenkins UI或其他Jenkins URL?

如果您要解決問題,可以在GitHub存儲庫中輪詢更改。 可以使用crontab語法配置輪詢計划。

crontab中的“5個星號”表示每天每小時的每分鍾輪詢。 每個提交都或多或少與每個建築相同。

我現在有一個符合我要求的設置:資源使用率低且安全。 我用一個小的Bash腳本替換了Apache,使用net cat來模擬Web服務器:

#!/bin/bash
while true ; do
   echo -e "HTTP/1.1 204 No Content\r\nConnection: close\r\n\r" | nc -l -v -p [outer port number] > /dev/null
   wget -O /dev/null [jenkins base url]/git/notifyCommit?url=[repository url] &>/dev/null
   sleep 5
done
  • 第一行(在循環中)響應HTTP,沒有GitHub觸發器支持的內容狀態。 有效負載定向到/dev/null 重要的是不要查看有效負載並嘗試在shell腳本中提取詳細信息,因為在Bash中很容易對輸入進行清理(至少對我而言)。

  • 第二行觸發Jenkins查找更改(如果有更改,則觸發構建)。

  • 如果過於頻繁地調用偵聽端口,則最后一行中的睡眠是為了防止DDoS場景。

  • 腳本本身是通過cron啟動的,帶有@reboot計划。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM