2013-12-20 25 views
6

我的情况如下: 我在回购中有三个分支:master,dev和staging。 对于这些分支中的每一个,我都有一份工作,在詹金斯的'分支构建'部分进行配置。起源/主,起源/开发,起源/分期。是否可以从一个特定分支触发Jenkins?

Bitbucket通过存储库挂钩触发作业以创建存储库(https://confluence.atlassian.com/display/BITBUCKET/Jenkins+hook+management)。

然而,当我推动掌握时,所有的工作开始建立,并与其他两个一样。

我希望詹金斯的“主”工作只有在我推到主分支时才能建立。詹金斯“开发”工作到dev分支。詹金斯“分期”工作开展分期。

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

回答

4

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

我的解决方案是在我的机器上创建一个Jenkins安装的特定文件,并为此文件设置一个Bitbucket钩子。 (例如http:// {jenkins url}:{apache port} /check.php)

请注意,这个apache端口不是Jenkins的,而是Apache的。在我的情况下,詹金斯在8080和Apache在7777运行。它这样做是为了运行php脚本,但不是在詹金斯的目录中。

由于Bitbucket挂钩发送一个json文件,我能够在check.php中验证哪个分支已被推送。 参考:POST hook management

验证后使用一个简单的 '如果',我刚打电话的权利网址开头为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);

和voilà。

+1

不错,这是一个好主意,但我认为Jenkins-CI应该使用某个插件来支持这个功能。 – dylanninin

6

您是否设置了轮询?

https://wiki.jenkins-ci.org/display/JENKINS/Git+Plugin#GitPlugin-Pushnotificationfromrepository

...这将扫描是配置为检查指定的URL,可选分支的所有作业,并如果他们还与轮询配置,它立刻会触发轮询(如果发现有值得构建的变更,则会依次触发构建)。我们需要在作业上进行轮询配置,以便我们只触发源树中的更改将被踢掉的作业。

+1

这是一个比接受的更好的答案,IMVHO – Rondo

1

有不同的Jenkis项目不同的分支,我做了以下内容:

  • 你詹金斯安装Bitbucket Plugin
  • 添加普通帖子钩到您的到位桶库(设置 - >钩)和使用以下网址:

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

  • 配置您的詹金斯项目如下:
    • 构建触发使时所建的变化被推向到位桶
    • 源代码管理选择GIT;输入您的凭据,并定义分行建立(如**功能/ *)< - 这是您为每个项目

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

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

相关问题