如何从GitHub安全地触发Jenkins构建
我有一个Jenkins实例在防火墙后面运行,我不想将Jenkins UI公开给Internet。(即使启用了安全功能,这也绝对不是一个选项) 我的愿望是打开一个不同的端口,它只能触发构建,但不能公开UI。我浏览了插件列表,但没有找到任何合适的插件 我当前的设置是将Apache作为代理运行,并允许通过不同端口上的regex模块触发。(但不是任何其他URL。) Apache有太多的额外负载(和内存;它是一台非常小的机器),所以我真的想摆脱它如何从GitHub安全地触发Jenkins构建,jenkins,jenkins-plugins,Jenkins,Jenkins Plugins,我有一个Jenkins实例在防火墙后面运行,我不想将Jenkins UI公开给Internet。(即使启用了安全功能,这也绝对不是一个选项) 我的愿望是打开一个不同的端口,它只能触发构建,但不能公开UI。我浏览了插件列表,但没有找到任何合适的插件 我当前的设置是将Apache作为代理运行,并允许通过不同端口上的regex模块触发。(但不是任何其他URL。) Apache有太多的额外负载(和内存;它是一台非常小的机器),所以我真的想摆脱它 如何通过开放端口允许触发器,但不通过该端口公开Jenkin
如何通过开放端口允许触发器,但不通过该端口公开Jenkins UI或其他Jenkins URL?如果要解决此问题,可以轮询GitHub存储库进行更改。可以使用语法配置轮询计划
crontab中的“5个星号”表示每天每小时每分钟进行一次投票。每一次提交都或多或少与每一个构建相同。我现在有一个满足我的要求的设置:低资源使用率和安全性。我使用
netcat
模拟web服务器,用一个小Bash脚本替换了Apache:
#!/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触发器支持。有效负载被定向到
。重要的是不要查看有效负载,不要试图在shell脚本中提取细节,因为在Bash中消毒输入很容易出错(至少对我来说是这样)/dev/null
- 第二行触发Jenkins查找更改(如果有更改,则触发构建)
- 最后一行中的sleep是为了防止侦听端口被频繁调用的情况
- 脚本本身通过cron以
时间表启动@reboot
安得烈有很多理由认为投票不是一种选择。同意,GitHooks很不错,但在许多公司环境中,设置GitHooks是被阻止的。