是否有可能仅从一个特定分支触发Jenkins?

时间:2013-12-20 22:48:35

标签: java git jenkins continuous-integration bitbucket

我的情况如下: 我在回购中有三个分支:master,dev和staging。 我为这些分支中的每一个分配了一个工作,在Jenkins的“Branches to build”部分中进行了配置。 origin / master,origin / dev,origin / staging。

只要存储库挂钩发生了对存储库的更改,Bitbucket就会触发构建作业。(https://confluence.atlassian.com/display/BITBUCKET/Jenkins+hook+management)。

然而,当我推动掌握时,所有工作都开始建立,而其他工作也是如此。

我希望Jenkins“掌握”工作只有在我推动掌握分支时才能建立。詹金斯“开发”工作开发分支。詹金斯“上演”工作进行开发。

有没有办法控制这种行为?

4 个答案:

答案 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项目,我执行了以下操作:

  • 在Jenkins安装Bitbucket Plugin
  • 将正常的帖子作为Hook添加到您的Bitbucket存储库(设置 - > Hooks )并使用以下网址:
  

的https:// YOUR.JENKINS.SERVER:PORT /到位桶钩

  • 按如下方式配置Jenkins项目:
    • 构建触发器下启用在将更改推送到BitBucket时构建
    • 源代码管理下选择 GIT ;输入您的凭据并定义要构建的分支(例如 ** feature / * )< - 这是您为每个项目定义不同分支的地方

通过这种方式,我有三个构建项目,一个用于所有功能,一个用于开发,一个用于发布分支。

最好的是,你不必为新的Jenkins项目添加新的钩子。

答案 3 :(得分:0)

是的!只要有提交或合并到git repo的特定分支中,就可以触发jenkins构建。

STEPS:

  1. 在github仓库的Webhook部分中为jenkins实例配置webhook,有效负载URl看起来类似于

    http://jenkinsinstance:8080/github-webhook/

  2. 只需在Jenkins Job配置中启用, GitHub hook trigger for GITScm polling

  3. 然后在“ SCM”部分中,将以下配置添加到映像中,假设要构建的分支是Hotfix分支。下图定义了SCM部分的确切配置。

SCM Configuartion image

  1. 完成后,尝试将代码更改提交到Hotfix分支,这将触发jenkins作业。