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

如何从GitHub安全地触发Jenkins构建,jenkins,jenkins-plugins,Jenkins,Jenkins Plugins,我有一个Jenkins实例在防火墙后面运行,我不想将Jenkins UI公开给Internet。(即使启用了安全功能,这也绝对不是一个选项) 我的愿望是打开一个不同的端口,它只能触发构建,但不能公开UI。我浏览了插件列表,但没有找到任何合适的插件 我当前的设置是将Apache作为代理运行,并允许通过不同端口上的regex模块触发。(但不是任何其他URL。) Apache有太多的额外负载(和内存;它是一台非常小的机器),所以我真的想摆脱它 如何通过开放端口允许触发器,但不通过该端口公开Jenkin

我有一个Jenkins实例在防火墙后面运行,我不想将Jenkins UI公开给Internet。(即使启用了安全功能,这也绝对不是一个选项)

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

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

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


如何通过开放端口允许触发器,但不通过该端口公开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触发器支持。有效负载被定向到
    /dev/null
    。重要的是不要查看有效负载,不要试图在shell脚本中提取细节,因为在Bash中消毒输入很容易出错(至少对我来说是这样)

  • 第二行触发Jenkins查找更改(如果有更改,则触发构建)

  • 最后一行中的sleep是为了防止侦听端口被频繁调用的情况

  • 脚本本身通过cron以
    @reboot
    时间表启动


  • 安得烈有很多理由认为投票不是一种选择。同意,GitHooks很不错,但在许多公司环境中,设置GitHooks是被阻止的。