是否有可能仅从一个特定分支触发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项目添加新的钩子。