我的情况如下: 我在回购中有三个分支:master,dev和staging。 我为这些分支中的每一个分配了一个工作,在Jenkins的“Branches to build”部分中进行了配置。 origin / master,origin / dev,origin / staging。
只要存储库挂钩发生了对存储库的更改,Bitbucket就会触发构建作业。(https://confluence.atlassian.com/display/BITBUCKET/Jenkins+hook+management)。
然而,当我推动掌握时,所有工作都开始建立,而其他工作也是如此。
我希望Jenkins“掌握”工作只有在我推动掌握分支时才能建立。詹金斯“开发”工作开发分支。詹金斯“上演”工作进行开发。
有没有办法控制这种行为?
答案 0 :(得分:7)
您是否设置了投票?
https://wiki.jenkins-ci.org/display/JENKINS/Git+Plugin#GitPlugin-Pushnotificationfromrepository
...这将扫描配置为检出指定网址的所有作业,可选分支,以及 ,如果它们也配置了轮询 ,它' ll立即触发轮询(如果找到值得构建的更改,则将依次触发构建。)我们需要在作业上进行轮询配置,以便我们只触发应该从源中的更改中踢出的作业树。
答案 1 :(得分:4)
我刚刚发现Bitbucket不允许在推送到任何分支时选择特定的钩子。它只调用所有挂钩,然后启动所有Jenkins工作。
我的解决方案是在我的机器上创建一个安装了Jenkins的特定文件,并为此文件设置Bitbucket挂钩。 (例如http:// {jenkins url}:{apache port} /check.php)
请注意,这个apache端口与Jenkins不同,而是Apache的。就我而言,Jenkins运行在8080,Apache运行在7777.它这样做是为了运行php脚本,但不是在Jenkins的目录中运行。
由于Bitbucket hook发送了一个json文件,我能够在check.php中验证哪个分支已被推送。 参考:POST hook management
在使用简单的'if'进行验证后,我只是调用了正确的url以使用exec_curl开始正确的工作,例如:
$ 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);
瞧瞧。
答案 2 :(得分:2)
要为不同的分支机构创建不同的Jenkis项目,我执行了以下操作:
的https:// YOUR.JENKINS.SERVER:PORT /到位桶钩
通过这种方式,我有三个构建项目,一个用于所有功能,一个用于开发,一个用于发布分支。
最好的是,你不必为新的Jenkins项目添加新的钩子。
答案 3 :(得分:0)
是的!只要有提交或合并到git repo的特定分支中,就可以触发jenkins构建。
STEPS:
在github仓库的Webhook部分中为jenkins实例配置webhook,有效负载URl看起来类似于
http://jenkinsinstance:8080/github-webhook/
只需在Jenkins Job配置中启用,
GitHub hook trigger for GITScm polling
然后在“ SCM”部分中,将以下配置添加到映像中,假设要构建的分支是Hotfix分支。下图定义了SCM部分的确切配置。