一尘不染

是否可以仅从一个特定分支触发詹金斯?

jenkins

我的情况如下:回购中有三个分支:master,dev和staging。对于这些分支中的每个分支,我都有一份工作,在詹金斯的“构建分支”部分中进行了配置。原点/母版,原点/开发,原点/阶段。

每当通过存储库挂钩对存储库进行更改时,Bitbucket都会触发构建作业。(https://confluence.atlassian.com/display/BITBUCKET/Jenkins+hook+management)。

但是,当我努力掌握时,所有工作开始建立,其他两个工作也一样。

我希望仅当我按下master分支时才能构建Jenkins的“ master”作业。詹金斯将“开发”工作转移到开发分支。詹金斯将工作“分期”到开发阶段。

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


阅读 250

收藏
2020-07-25

共1个答案

一尘不染

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

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

请注意,此apache端口与Jenkins的端口不同,但与Apache的端口相同。就我而言,Jenkins的运行速度为8080,Apache的运行速度为7777。这样做是为了运行php脚本,但不在Jenkins的目录中。

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

使用简单的“ 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);

还有,

2020-07-25