Java 是否可能仅从一个特定分支触发Jenkins?
我的情况如下: 我在回购协议中有三个分支:主分支、开发分支和暂存分支。 我为这些分支中的每一个都有一个作业,配置在Jenkins的“构建分支”部分。原点/主机、原点/开发、原点/暂存 每当通过存储库挂钩对存储库进行更改时,Bitbucket就会触发要生成的作业。() 然而,当我推到master时,所有作业都开始构建,其他两个也一样 我希望詹金斯的“大师级”工作只有在我推进到大师级分行时才能完成。詹金斯把“开发”工作交给开发部门。Jenkins将作业“暂存”到dev暂存Java 是否可能仅从一个特定分支触发Jenkins?,java,git,jenkins,continuous-integration,bitbucket,Java,Git,Jenkins,Continuous Integration,Bitbucket,我的情况如下: 我在回购协议中有三个分支:主分支、开发分支和暂存分支。 我为这些分支中的每一个都有一个作业,配置在Jenkins的“构建分支”部分。原点/主机、原点/开发、原点/暂存 每当通过存储库挂钩对存储库进行更改时,Bitbucket就会触发要生成的作业。() 然而,当我推到master时,所有作业都开始构建,其他两个也一样 我希望詹金斯的“大师级”工作只有在我推进到大师级分行时才能完成。詹金斯把“开发”工作交给开发部门。Jenkins将作业“暂存”到dev暂存 有没有办法控制这种行为?您
有没有办法控制这种行为?您是否设置了轮询 。。。这将扫描所有配置为签出指定URL的作业、可选分支和,如果它们也配置了轮询,它将立即触发轮询(如果发现值得一次生成的更改,将依次触发一次生成)我们需要对作业进行轮询配置,以便只触发应该从源树中的更改中删除的作业
我刚刚发现Bitbucket不允许在推到分支时选择特定的钩子。它只是调用所有的钩子,然后开始Jenkins的所有工作 我的解决方案是在我的机器上创建一个特定的文件,Jenkins安装在该文件上,并为此文件设置一个Bitbucket挂钩。(例如http://{jenkins url}:{apache port}/check.php) 请注意,此apache端口与Jenkins的不同,而是apache的。在我的例子中,Jenkins的运行速度是8080,Apache的运行速度是7777。它这样做是为了运行php脚本,但不是在Jenkins的目录中 因为Bitbucket钩子发送了一个json文件,所以我能够在check.php中验证哪个分支被推上。 参考: 在使用一个简单的“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);
瞧。为了给不同的分支机构提供不同的Jenkis项目,我做了以下工作:
- 安装在你的詹金斯
- 将普通Post as挂钩添加到Bitbucket存储库(设置->挂钩),并使用以下url:
- 按如下方式配置Jenkins项目:
- 在生成触发器下将更改推送到BitBucket时启用生成
- 在源代码管理下选择GIT;输入您的凭据并定义要构建的分支(如**功能/*)是!!只要有提交或合并到git repo的特定分支中,就可以触发jenkins构建 步骤:
- 在github存储库的webhook部分为jenkins实例配置webhook,有效负载URl类似于
http://jenkinsinstance:8080/github-webhook/
- 在Jenkins作业配置中,只需启用, 用于GITScm轮询的GitHub钩子触发器
- 然后在“SCM”部分中,在图中添加以下可用配置,假设要生成的分支是修补程序分支。下图定义了SCM部分的确切配置
- 完成后,尝试将代码更改提交到修补程序分支,这将触发jenkins作业李>
很好,这是一个好主意,但是我认为Jenkins CI应该用一些插件来支持这个特性。这是一个比接受的更好的答案,IMVHOHSE的答案需要更多的解释。