Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 是否可能仅从一个特定分支触发Jenkins?_Java_Git_Jenkins_Continuous Integration_Bitbucket - Fatal编程技术网

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

Java 是否可能仅从一个特定分支触发Jenkins?,java,git,jenkins,continuous-integration,bitbucket,Java,Git,Jenkins,Continuous Integration,Bitbucket,我的情况如下: 我在回购协议中有三个分支:主分支、开发分支和暂存分支。 我为这些分支中的每一个都有一个作业,配置在Jenkins的“构建分支”部分。原点/主机、原点/开发、原点/暂存 每当通过存储库挂钩对存储库进行更改时,Bitbucket就会触发要生成的作业。() 然而,当我推到master时,所有作业都开始构建,其他两个也一样 我希望詹金斯的“大师级”工作只有在我推进到大师级分行时才能完成。詹金斯把“开发”工作交给开发部门。Jenkins将作业“暂存”到dev暂存 有没有办法控制这种行为?您

我的情况如下: 我在回购协议中有三个分支:主分支、开发分支和暂存分支。 我为这些分支中的每一个都有一个作业,配置在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:
https://YOUR.JENKINS.SERVER:PORT/bitbucket-钩子

  • 按如下方式配置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的答案需要更多的解释。