如何在推送至master时使用Git触发器制作Jenkins CI?
我正在尝试使用GitHub为一个项目设置Jenkins ci。我已经为Jenkins安装了合适的插件。我希望Jenkins只在项目中有人向master发起请求时才运行构建脚本。到目前为止,我已经能够设置它,以便在任何人推到任何地方的任何时候都会触发构建,但这太广泛了。我用Git上的post receive服务钩子实现了这一点如何在推送至master时使用Git触发器制作Jenkins CI?,git,github,jenkins,Git,Github,Jenkins,我正在尝试使用GitHub为一个项目设置Jenkins ci。我已经为Jenkins安装了合适的插件。我希望Jenkins只在项目中有人向master发起请求时才运行构建脚本。到目前为止,我已经能够设置它,以便在任何人推到任何地方的任何时候都会触发构建,但这太广泛了。我用Git上的post receive服务钩子实现了这一点 我读过Jenkins维基和一些教程,但是缺少这个特别的细节。。。这可能与投票有关吗?或者应该在Git端完成工作,以便Git仅在master更改时触发Jenkins?您需要指
我读过Jenkins维基和一些教程,但是缺少这个特别的细节。。。这可能与投票有关吗?或者应该在Git端完成工作,以便Git仅在
master
更改时触发Jenkins?您需要指定分支。默认情况下,它会侦听任何内容。请参阅博客文章 从0.5版开始,Jenkins的GitHub插件可以。更改Jenkins项目配置,通过轮询触发生成,而不是远程触发生成
Jenkins可以基于固定的内部地址或URL进行投票。如果没有对该分支进行更改,则要跳过生成的是后者。具体细节如下:
在里面实际上,您只需要选中“Poll SCM”选项,将schedule部分留空,并设置一个远程URL以点击JENKINS_URL/job/name/polling
一个问题:如果您有一个安全的Jenkins环境与
/build
不同,/polling
URL需要身份验证。说明中有详细说明。例如,我有一个GitHub Post-Receive钩子指向username:apiToken@JENKIS_URL/job/name/polling
与Git无关,但下面我将详细介绍Mercurial的Jenkins作业配置。它可能会帮助其他有类似问题的人
***
[URLTrigger]-使用URL进行轮询。
现在您可以选择一些选项,如修改日期更改、URL内容等
监视内容更改
。否则,手动启动它的用户。正如gezzed在其评论中所指出的,同时还有一个很好的解决方案(如中所述):
- 将Jenkins作业的生成触发器设置为轮询SCM,但不要指定计划
- 创建GitHub post接收触发器以通知URL
http://yourserver/jenkins/git/notifyCommit?url=<URL of the Git repository>?token=<get token from git to build remotely>
http://yourserver/jenkins/git/notifyCommit?url=?token=
- 这将触发轮询指定Git存储库的所有生成
- 但是,轮询实际上检查是否有任何内容被推送到已使用的分支
curlhttp://localhost:8080/job/someJob/build?delay=0sec
可以运行Jenkins作业,其中someJob
是Jenkins作业的名称
在隐藏的.git文件夹中搜索“hooks”文件夹。将“post commit.sample”文件重命名为“post commit”。用记事本打开它,删除“:Nothing”行并将上面的命令粘贴到其中
就这样。无论何时进行提交,Git都会触发文件中定义的提交后命令。对于GitLab,请使用以下步骤:
http://server.com/jenkins/job/project_name/build?delay=0sec
例如addwebhook
,然后单击testhook
然后,每当您提交到存储库时,就会触发web钩子并创建一个构建。确保在每次生成之前将Jenkins workspace设置为“删除工作区”,以便获得新代码的新副本。使用pull request builder插件:
这真的很简单。然后,您可以设置GitHub webhooks以触发构建。在代码从Git命令/GUI推送到存储库后,继续与Jenkins集成:
.Git/hooks
文件夹hooks
文件夹包含少量文件。检查“post-commit”。如果不存在,则创建一个不带文件扩展名的文件“提交后”:
C:\work\test\\.git\hooks\post-commit
curl -u userName:apiToken -X POST http://localhost:8080/jenkins/job/jobName/build?token=apiToken
例如:
curl -u admin:f1c55b3a07bb2b69b9dd549e96898384 -X POST http://localhost:8080/jenkins/job/Gitcommittest/build?token=f1c55b3a07bb2b69b9dd549e96898384
五,
用户名
:詹金斯用户名
jobName
:生成的作业名称
apiToken
:要获取API令牌,请转到Jenkins用户页面(界面右上角)。可在页面左侧的“配置”菜单中找到:“显示API令牌”http://localhost:8080/jenkins/job/Gitcommittest/
,应该在建筑中- 名为
的变量和表达式ref
$.ref
- 带有文本
和过滤器表达式的过滤器,如$ref
^refs/heads/master$
主机
,该作业都会触发。没有投票
你
stage {
when {
expression {
branch 'develop'
}
}
}
gituser@me:~/project.git/hooks$ pwd
/home/gituser/project.git/hooks
gituser@me:~/project.git/hooks$ cat update
#!/bin/sh
echo "XXX from update file"
curl -u admin:11f778f9f2c4d1e237d60f479974e3dae9 -X POST http://localhost:8080/job/job4_pullsrc_buildcontainer/build?token=11f778f9f2c4d1e237d60f479974e3dae9
exit 0
gituser@me:~/project.git/hooks$