我有一个在防火墙后运行的Jenkins实例,我不想将Jenkins UI暴露给Internet。 (即使有安全措施,这绝对不是一种选择)。
我的愿望是打开一个不同的端口,只能触发构建,但不会公开UI。我浏览了插件列表,但是我找不到任何合适的插件。
我当前的设置是将Apache作为代理运行,并允许通过其他端口上的regex-module触发。 (但不是任何其他网址。)
Apache做了太多的额外负载(和内存;它是一个非常小的机器),所以我真的想摆脱它。
如何通过开放端口允许触发器,但不通过该端口公开Jenkins UI或其他Jenkins URL?
答案 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
计划启动的。