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

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

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

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

我希望Jenkins“掌握”工作只有在我推动掌握分支时才能建立。 jenkins“开发”工作开发分支。 jenkins“分期”工作到开发阶段。

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

你设置了民意调查吗?

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

…这将扫描配置为检出指定URL,可选分支的所有作业, 如果它们也配置了轮询 ,它将立即触发轮询(如果发现值得构建的更改,将依次触发构建。)我们需要在作业上进行轮询配置,以便我们只触发应该从源树中的更改中踢出的作业。

我刚刚发现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中validation哪个分支已被推送。 参考: POST挂钩管理

在使用简单的’if’进行validation后,我只是使用exec_curl调用正确的url来启动正确的工作,例如:

$ 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);

瞧。

要为不同的分支机构创建不同的Jenkis项目,我执行了以下操作:

  • 在Jenkins安装Bitbucket插件
  • 将正常的Post作为Hook添加到您的Bitbucket存储库( 设置 – >挂钩 )并使用以下URL:

https:// YOUR.JENKINS.SERVER:PORT / bitbucket-hook

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

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

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

Interesting Posts