我正在尝试使用GitHub为项目设置Jenkins-ci。我已经给Jenkins安装了合适的插件。我希望Jenkins只在项目中有人推动master时运行构建脚本。到目前为止,我已经能够设置一个构建将触发任何时候任何人推到任何地方,但这太广泛了。我已经用Git上的post-receive service钩子做到了这一点。
我读过Jenkins的维基和一些教程,但这个细节缺失了……也许这和民意调查有关?或者应该在Git端进行工作,以便Git只在master更改时触发Jenkins ?
我正在尝试使用GitHub为项目设置Jenkins-ci。我已经给Jenkins安装了合适的插件。我希望Jenkins只在项目中有人推动master时运行构建脚本。到目前为止,我已经能够设置一个构建将触发任何时候任何人推到任何地方,但这太广泛了。我已经用Git上的post-receive service钩子做到了这一点。
我读过Jenkins的维基和一些教程,但这个细节缺失了……也许这和民意调查有关?或者应该在Git端进行工作,以便Git只在master更改时触发Jenkins ?
当前回答
正如gezzed在他的评论中已经提到的,同时有一个很好的解决方案(在Polling must die中描述:从Git钩子触发Jenkins构建):
将Jenkins作业的构建触发器设置为Poll SCM,但不要指定时间表。 创建一个GitHub接收后触发器来通知URL http://yourserver/jenkins/git/notifyCommit?url=< Git存储库的URL >?Token =<从git获取Token来远程构建> 这将触发轮询指定Git存储库的所有构建。 但是,轮询实际上检查是否有任何内容已推送到已使用的分支。
它工作得很完美。
其他回答
我希望这篇文章对您有所帮助:如何在Git提交上触发Jenkins构建
这只是使用curl使用Git提供的Git钩子触发Jenkins作业的问题。
命令curl http://localhost:8080/job/someJob/build?delay=0sec可以运行Jenkins作业,其中someJob是Jenkins作业的名称。
在隐藏的。git文件夹中搜索“hooks”文件夹。重命名“post-commit”。样本文件,以“后提交”。用记事本打开它,删除“:Nothing”行,并将上面的命令粘贴进去。
就是这样。无论何时执行提交,Git都会触发文件中定义的提交后命令。
管理Jenkins/配置系统/GitHub服务器 在jenkins job / git凭证和分支说明符上(给你想要查找的分支推送)
在github上的Webhook
使用pull request builder插件: https://wiki.jenkins-ci.org/display/JENKINS/GitHub+pull+request+builder+plugin
这真的很简单。然后你可以设置GitHub webhook来触发构建。
在我目前的组织中,我们不在master中这样做,但在开发和发布/分支中都这样做(我们使用Git Flow),以生成快照构建。
当我们使用多分支管道时,我们在Jenkinsfile中使用when{}语法…
stage {
when {
expression {
branch 'develop'
}
}
}
这篇博客文章详细介绍了这一点: https://jenkins.io/blog/2017/01/19/converting-conditional-to-pipeline/#longer-pipeline
我对本地git服务器的解决方案: 转到本地git服务器钩子目录,忽略现有的更新。示例并创建一个名为“update”的新文件,例如:
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$
echo语句将显示在你的git推送结果下,令牌可以从你的jenkins作业配置中获取,浏览找到它。如果没有调用文件“update”,请尝试其他具有相同名称但没有扩展名为“sample”的文件。
这就是你所需要的