繁体   English   中英

触发GitHub PUSH上的Jenkins作业到特定分支

[英]Trigger Jenkins job on GitHub PUSH to specific branch

我试图触发基于GitHub PUSH到某个分支的工作。

我将JENKINS_URL/git/notifyCommit?url=REPO_URL设置为JENKINS_URL/git/notifyCommit?url=REPO_URL和没有计划的Poll SCM

每次push都会触发该作业,但我无法过滤出分支-我希望仅在有主控推送时才发生。

为此,您必须使用git hook。

git挂钩获取分支名称作为参数。

Hook code

#!/bin/sh

while read oldrev newrev refname
do
    branch=`echo $refname | cut -d'/' -f3`

    ###
    # Do whatever you want to do here with the branch name
    ###

done

您可以参考以下答案: 在bitbucket的特定分支上的jenkins中触发构建

我刚刚发现Bitbucket不允许选择推送到任何分支的特定挂钩。 它只是调用所有钩子,然后启动所有Jenkins作业。

 My solution was to create an specific file on my machine which Jenkins is installed and set a Bitbucket hook to this file. (eg 

http:// {jenkins网址}:{apache端口} /check.php)

 Note that this apache port is not the same of Jenkins', but Apache's. In my case, Jenkins was running at 8080 and Apache at 7777. 

它这样做是为了运行php脚本,但不在Jenkins的目录中。

 Since Bitbucket hook sends a json file, I was able to verify in check.php which branch has been pushed on. Reference: POST hook 

管理

 After the verification using a simple 'if', I just called the right url to start the right job with exec_curl, like: $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, http://{jenkins url}:{jenkins port}/job/{job name}/build?token={job token}); curl_setopt($ch, CURLOPT_HEADER, 0); curl_exec($ch); curl_close($ch); And voilà. 

最初,我寻找一些插件,但没有找到任何符合您要求的插件。

最初,我曾经创建一个单独的作业并在那里检测分支,而不是仅在下游构建另一个作业。

这就是我所做并成功实现的目标。 该功能已经在Jenkins中提供,我们不必为此安装任何插件。

我认为,下面的图像可以使所有事情变得清晰。

在此处输入图片说明

因此,如果我们只想在将更改推送或合并到TEST分支时才触发作业,则可以执行此操作。

最简单的解决方案。 没有脚本,没有插件。 单击高级按钮以添加refspec,该默认情况下是隐藏的,同时在“源代码管理”部分中添加存储库URL

有关完整信息,请阅读我的博客

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM