我正在尝试使用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 ?
当前回答
您需要指定分支。默认情况下,它会监听任何内容。请参阅博客文章Hudson: Git和Maven插件。
其他回答
从0.5版开始,针对Jenkins的GitHub插件可以在将更改推送到GitHub时触发构建。
与Git无关,但下面我将帮助使用Mercurial详细配置Jenkins作业。它可能会帮助其他有类似问题的人。
安装URL触发器插件 进入作业配置页面,选择Poll SCM选项。设置为* * * * * 检查选项:[URLTrigger] -使用URL轮询。 现在您可以选择一些选项,如修改日期更改,URL内容等。 在选项中,选择“URL内容更改”,选择第一个选项“监控内容更改” 保存更改。
现在,通过一些测试签入触发对Mercurial存储库的一些更改。
查看Jenkins作业现在通过检测SCM更改来运行。当构建由于Mercurial的更改而运行时,您将看到文本Started by an SCM发生更改。Else,手动启动它的用户。
一般Webhook触发器插件可以配置过滤器来实现这一点。
当配置为
名为ref的变量和表达式$.ref。 一个带有文本$ref的过滤器和像^refs/heads/master$这样的过滤器表达式。
那这项工作就会触发每一次突破。没有投票。
你可能需要webhook提供更多的值来实际执行构建。只需使用JSONPath添加更多变量,以选择所需的变量。
这里有一些用例:https://github.com/jenkinsci/generic-webhook-trigger-plugin/tree/master/src/test/resources/org/jenkinsci/plugins/gwt/bdd
在我目前的组织中,我们不在master中这样做,但在开发和发布/分支中都这样做(我们使用Git Flow),以生成快照构建。
当我们使用多分支管道时,我们在Jenkinsfile中使用when{}语法…
stage {
when {
expression {
branch 'develop'
}
}
}
这篇博客文章详细介绍了这一点: https://jenkins.io/blog/2017/01/19/converting-conditional-to-pipeline/#longer-pipeline
使用pull request builder插件: https://wiki.jenkins-ci.org/display/JENKINS/GitHub+pull+request+builder+plugin
这真的很简单。然后你可以设置GitHub webhook来触发构建。