【问题标题】:Jenkins: Git push will trigger a Jenkins build for only that branchJenkins:Git push 将触发仅针对该分支的 Jenkins 构建
【发布时间】:2019-01-07 00:57:58
【问题描述】:

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

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

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

对于每个新特性我们都有一个分支,所以分支的数量是不固定的。

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

【问题讨论】:

    标签: git github jenkins


    【解决方案1】:

    如果用例是为每次 git push 触发构建,您可以添加一个 git pre-receive 钩子,一旦 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
    

    【讨论】:

    • 谢谢。我会研究你的答案。您还有其他资源可以帮助我吗?
    【解决方案2】:

    通过 GUI 构建 Jenkins 作业的一个更好的替代方法是将它们作为 Jenkins 管道。

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

    怎么样?您可以在几分钟内轻松地自己创建这样的配置。在这种情况下,我有一个 Jenkins 服务器在我的本地 PC 上运行。因此,默认情况下,此 Jenkins 服务器对于 Git 项目中的 webhook 是不可访问的。 (注意:您可以使用 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。
    • Jenkins 现在将扫描 Git 项目以查找具有“Jenkinsfile”的分支。对于每个匹配的分支(有一个 Jenkinsfile),它会自动创建一个 Jenkins 流水线作业。作业具有分支的名称。起初只有 1 个分支,因此将创建 1 个名为“master”的作业。新创建的 jenkins 作业将为“master”分支执行“Jenkinsfile”。在控制台中,您将看到带有分支名称的输出:master。
    • 创建一个分支并对 Jenkinsfile 进行更改。将更改推送到分支。
    • 在等待最多 1 分钟后(由于轮询),多分支作业将扫描是否有带有 Jenkinsfile 的新分支。在这种情况下,使用分支名称创建了一个新的 jenkins 作业。所有作业都在多分支作业下方可见。该作业将被执行并打印出分支名称。
    • 如果您只对现有分支进行更改并将更改推送到 Git 项目,那么会在 1 分钟内扫描分支。 Jenkins 将看到分支已更改并启动 Jenkins 管道作业。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-07-28
      • 2020-08-24
      • 1970-01-01
      • 2015-02-07
      • 1970-01-01
      • 1970-01-01
      • 2020-01-09
      相关资源
      最近更新 更多