我怎样才能使jenkinsCI与GIT触发器推动主?
我正在尝试使用github为一个项目设置Jenkins-ci。 我已经用适当的插件设置了jenkins。 我希望jenkins只有在项目的某个人推动主人时才能运行构build脚本。 到目前为止,我已经能够设置它,以便任何时候任何人都可以触发构build,但是这太宽泛了。 我已经用git上的post-receive服务钩子完成了。
我读过jenkins wiki和一些教程,但是这个特殊的细节已经被忽略了……是否可以使用轮询呢? 还是应该在git方面进行工作,以便git只在Master更改时触发jenkins?
谢谢你的帮助!
正如他在评论中已经指出的那样 ,同时还有一个很好的解决scheme(由http://kohsuke.org/2011/12/01/polling-must-die-triggering-jenkins-builds-from-a-git-挂钩/ ):
-
将Jekins作业的构build触发器设置为轮询SCM ,但不指定计划
-
创build一个github post-receive触发器来通知URL
http://yourserver/jenkins/git/notifyCommit?url=<URL of the Git repository>?token=<get token from git to build remotely>
-
这将触发所有轮询指定的git回购的构build。
-
然而,轮询实际上检查是否有任何东西被推送到使用的分支。
它完美的作品。
从版本0.5开始,Jenkins的Github插件可以在更改推送到GitHub时触发构build
而不是远程触发构build ,更改您的Jenkins项目configuration通过轮询触发构build。 jenkins可以根据固定的内部或URL进行轮询。 后者是你想要跳过构build,如果没有更改该分支。 具体细节在文档中 。 本质上,您只需要检查“Poll SCM”选项,将时间表部分留空,并设置远程URL以打JENKINS_URL / job / name / polling。
一个问题,如果你有一个安全的Jenkins环境是不同的/build立,/轮询URL需要authentication。 这里的说明有详细信息。 例如,我有一个Github Post-Receive hook去用户名:apiToken @ JENKIS_URL / job / name / polling。
对于Gitlab ,请使用以下步骤:
- 转到您的项目设置> Web钩子
-
从Jenkins项目中input“立即生成”URL作为推送事件URL
例如
http://server.com/jenkins/job/project_name/build?delay=0sec
- 单击
Add Web Hook
,然后test hook
然后,无论何时您提交回购,都会触发Web钩子并创build一个构build。 确保delete workspace before each build
将Jenkins工作区设置为delete workspace before each build
以便获得新代码的新副本。
你需要指定分支。 默认情况下,它监听任何东西。 在这里看到这个职位:
与Git无关,但下面我将与Mercurial详细介绍Jenkins作业configuration。 可以帮助他人解决类似的问题。
- 安装URL触发器插件
- 转到作业configuration页面并select
Poll SCM
选项。 将值设置为* * * * *
- 检查选项:
[URLTrigger] - Poll with a URL
。
现在您可以select修改date更改,url内容等选项 - 在选项中,selectURL内容更改,select第一个选项 –
Monitor change of content
- 保存更改。
现在,通过一些testing检查来触发对mercurial存储库的一些更改
看到jenkins的工作现在运行通过检测SCM的变化。 当由于mercurial更改而运行构build时,您将看到Started by an SCM change
文本。 否则,手动启动它的用户。
希望这有助于: http : //nrecursions.blogspot.in/2014/02/how-to-trigger-jenkins-build-on-git.html
这只是使用curl触发一个使用git提供的git钩子的Jenkins作业的问题。
命令curl http://localhost:8080/job/someJob/build?delay=0sec
可以运行Jenkins作业,其中someJob
是Jenkins作业的名称。
search隐藏的.git文件夹中的“钩子”文件夹。 将“post-commit.sample”文件重命名为“post-commit”。 用记事本打开它,删除“:Nothing”行,并将上面的命令粘贴到它。
而已。 无论何时你提交,Git都会触发文件中定义的提交后命令。
解决这个问题的另一个可能的方法是使用类似于“如何在特定文件集发生更改时才触发构build”的问题 。
我为www.appboy.com的Jenkins实例写了一个简短的构build部署脚本。 我们的要求是:
- build立每个分支
- 从开发中不断部署到我们的升级环境
- 从主站不断部署到我们的生产环境
- 部署完成后,对运行中的服务器运行冒烟testing
- 如果有问题,回滚
- 发布状态更新到Hipchat
这是构build和部署脚本。 填写适当的值和步骤。 如果您使用的是Heroku,Engine Yard或DotCloud等云托pipe服务,则部署和回滚操作非常简单。
https://gist.github.com/2399693
下载这个文件,更新它,在你的仓库中提交它,并且把你的Jenkins构build脚本设置成类似于
#!/bin/bash source ~/.bashrc ruby ci_runner.rb
使用pull request builder插件: https : //wiki.jenkins-ci.org/display/JENKINS/GitHub+pull+request+builder+plugin
这真的很简单。 然后你可以设置GitHub的webhooks来触发构build。