我的情况如下:回购中有三个分支:master,dev和staging。对于这些分支中的每个分支,我都有一份工作,在詹金斯的“构建分支”部分中进行了配置。原点/母版,原点/开发,原点/阶段。
每当通过存储库挂钩对存储库进行更改时,Bitbucket都会触发构建作业。(https://confluence.atlassian.com/display/BITBUCKET/Jenkins+hook+management)。
但是,当我努力掌握时,所有工作开始建立,其他两个工作也一样。
我希望仅当我按下master分支时才能构建Jenkins的“ master”作业。詹金斯将“开发”工作转移到开发分支。詹金斯将工作“分期”到开发阶段。
有没有办法控制这种行为?
我刚刚发现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);
还有,