我正在尝试使用GitHub为一个项目设置Jenkins-ci.我已经使用适当的插件设置了Jenkins.我希望Jenkins只在项目中有人推动掌握时运行构建脚本.到目前为止,我已经能够设置它,以便在任何人推送到任何地方时都会触发构建,但这太宽泛了.我在Git上使用post-receive服务挂钩完成了这个.
我已经阅读了Jenkins wiki和一些教程,但缺少这个特殊的细节......它可能与民意调查有关吗?或者应该在Git方面完成工作,这样Git只会在master
更改时触发Jenkins ?
正如他在评论中已经注意到的那样,同时有一个很好的解决方案(描述在Polling必须死:从Git钩子触发Jenkins构建):
将Jenkins作业的构建触发器设置为Poll SCM,但不指定计划.
创建GitHub post-receive触发器以通知URL
http://yourserver/jenkins/git/notifyCommit?url=?token=
这将触发轮询指定Git存储库的所有构建.
但是,轮询实际上会检查是否已将任何内容推送到已使用的分支.
它完美地运作.
从版本0.5开始,Jenkins的GitHub插件可以在将更改推送到GitHub时触发构建.
而不是远程触发构建,更改Jenkins项目配置以通过轮询触发构建.
Jenkins可以根据固定的内部或URL进行轮询.如果没有针对该分支的更改,则后者是您要跳过构建的内容.具体细节在文档中.基本上你只需要检查"轮询SCM"选项,将计划部分留空,并设置一个远程URL以命中JENKINS_URL/job/name/polling.
如果您有一个安全的Jenkins环境/build
,那么一个问题就是不同,/polling
URL需要身份验证.这里的说明有详细信息.例如,我有一个GitHub Post-Receive挂钩username:apiToken@JENKIS_URL/job/name/polling
.
对于GitLab,请使用以下步骤:
转到项目的设置→Web挂钩
从Jenkins项目输入"Build Now"URL作为推送事件URL:
http://server.com/jenkins/job/project_name/build?delay=0sec
例如
单击Add Web Hook
然后test hook
然后,只要您提交到存储库,就会触发Web挂钩并创建构建.请务必将Jenkins工作区设置为,delete workspace before each build
以便获得新代码的全新副本.