如何从GitHub安全地触发Jenkins构建

时间:2014-12-27 11:34:18

标签: jenkins jenkins-plugins

我有一个在防火墙后运行的Jenkins实例,我不想将Jenkins UI暴露给Internet。 (即使有安全措施,这绝对不是一种选择)。

我的愿望是打开一个不同的端口,只能触发构建,但不会公开UI。我浏览了插件列表,但是我找不到任何合适的插件。

我当前的设置是将Apache作为代理运行,并允许通过其他端口上的regex-module触发。 (但不是任何其他网址。)

Apache做了太多的额外负载(和内存;它是一个非常小的机器),所以我真的想摆脱它。

如何通过开放端口允许触发器,但不通过该端口公开Jenkins UI或其他Jenkins URL?

2 个答案:

答案 0 :(得分:0)

如果您要解决问题,可以在GitHub存储库中轮询更改。可以使用crontab语法配置轮询计划。

" 5个星号"在crontab中意味着每天每小时的每分钟轮询。每次提交都或多或少与每个建筑相同。

答案 1 :(得分:0)

我现在有一个符合我要求的设置:资源使用率低且安全。我使用net cat通过一个小的Bash脚本替换Apache来模拟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计划启动的。