Jenkins:Git push将仅针对该分支触发Jenkins构建

时间:2018-01-27 08:15:26

标签: git github jenkins

我们在许多Git分支上并行工作。

当推送特定的Git分支时,我们如何启动将触发特定分支构建的Jenkins项目/作业?

作为一个例子:我们推送一个Git分支“feature-abc”==>这应该触发Jenkins构建作业使用/拉动该分支“feature-abc”。

对于每个新功能,我们都有一个分支,因此分支数量不固定。

所以,我认为它与this answer with a manual action不同。

2 个答案:

答案 0 :(得分:1)

如果用例是为每个git push触发一个构建,你可以添加一个git pre-receive hook,一旦git-push完成就会触发构建。

#!/bin/bash
while read oldrev newrev refname
do
    branch=$(git rev-parse --symbolic --abbrev-ref $refname)
    #Trigger based on branch name "$branch" or pass this parameter to trigger the build
    curl -X POST -u "user" "http://<jenkins_url>/job/buildWithParameters?branch_name=$branch"
done

答案 1 :(得分:0)

通过GUI构建Jenkins作业的更好的替代方案,使它们成为Jenkins管道。

(下面)简单的演示配置的结果是,每次将更新推送到Git存储库时,都会启动该(更改的)分支的Jenkinsfile。在Jenkins文件中,您可以输出分支名称。

如何?您可以在几分钟内轻松地自己创建这样的配置。在这种情况下,我的本地PC上运行的是Jenkins服务器。因此,默认情况下,Git项目中的Webhook无法访问此Jenkins服务器。 (注意:您可以使用Webhook中继来模拟真实的Webhook)。当Git服务器可以访问Jenkins服务器时,则绝对应使用Webhook。

  • 创建一个项目并将其放入Git(lab)存储库中。
  • 将此简单的Jenkinsfile(管道)添加到您的项目中。

node {
    stage('Preparation') {
        checkout scm
    }
    stage('Who am i?') {
        echo "This job was triggered by a Git push to branch: ${env.BRANCH_NAME}"
    }
}
  • Jenkins>新项目>多分支管道。如果Git服务器无法访问您的Jenkins服务器,则可以使用轮询。否则,您可以通过Git服务器设置一个Webhook。 enter image description here
  • Jenkins现在将在Git项目中扫描具有“ Jenkinsfile”的分支。对于每个匹配的分支(具有Jenkinsfile),它将自动创建Jenkins Pipeline作业。作业具有分支的名称。最初只有1个分支,因此将创建1个名称为“ master”的作业。新创建的jenkins作业将为“ master”分支执行“ Jenkinsfile”。在控制台中,您将看到带有分支名称的输出:master。
  • 创建一个分支,然后更改Jenkinsfile。将更改推送到分支。
  • 最多等待1分钟(由于轮询),多分支作业将扫描是否存在带有Jenkinsfile的新分支。在这种情况下,将使用分支的名称创建一个新的jenkins作业。所有作业均在多分支作业下方可见。作业将被执行并打印出分支名称。
  • 如果仅对现有分支进行更改并将更改推送到Git项目,则将在1分钟内扫描分支。 Jenkins将看到分支已更改,并开始Jenkins管道作业。