如何从 GitHub 拉取请求触发 Jenkins 2.0 管道作业

How to trigger a Jenkins 2.0 Pipeline job from a GitHub pull request

看起来 GitHubPullRequestBuilder 与 Jenkins v2.0 管道作业不兼容。

如何配置从 GitHub 拉取请求事件触发的管道作业?
关于这个主题的文档很少,我找不到任何例子。还是在 GitHub 中创建网络挂钩以在 PR 事件上触发管道作业更好?

将 Pipeline 与 GitHub 拉取请求一起使用的最直接方法是将脚本放入名为 Jenkinsfile 的存储库中,然后安装 GitHub Branch Source 插件。 Documentation

简而言之,流程可以是这样的:

  1. 您将管道创建为代码并将其保存在项目根目录下名为 Jenkinsfile 的文件中。该代码应描述您的项目将如何构建。有关示例,请参见此处:https://jenkins.io/doc/pipeline/examples/

  2. 然后您应该在 Jenkins 中创建一个新的 "Multibranch Pipeline Project" 项。您应该设置它以便扫描步骤 1 的回购协议。

  3. 现在,只要您在第 1 步回购上打开一个新的 PR 分支,该分支就会被签出,并根据其中包含的 Jenkinsfile 说明进行构建。您可以根据需要设置更多关于构建内容和构建时间的条件。

备注:

  1. "Multibranch Pipeline Project" 示例文档:https://jenkins.io/doc/book/pipeline-as-code/(向下滚动到多分支管道项目)

  2. 请记住,在推荐 PR 后让插件构建 PR 是行不通的。这里有一个分析这个问题的讨论:https://github.com/jenkinsci/gitlab-plugin/issues/298 有解决方法(也在那个讨论中描述)但是它们设置起来很麻烦。

我有类似的问题。这是对我有用的

先决条件

  • 詹金斯版本。 2+(我使用的是 Jenkins 2.60)
  • Git集线器(或Githhub 企业)账户
  • 您的 github 和 Jenkins 必须能够与 彼此。

在Git中心

  1. 创建具有相关权限的 github 个人访问令牌 (PAT)。
  2. 为你的 repo,创建一个 webhook
    • URL 作为 YourJenkinsURL/github-webhook/
    • 选择“让我 select 个人活动”并勾选“拉取请求”
  3. Jenkinsfile 添加到您的存储库的根文件夹中。出于测试目的,您可以将内容作为基本的 hello world,如下所示
    pipeline {
        agent any
        stages {
            stage('Test') {
                steps {
                    echo 'Hello World ...'
                }
            }
        }
    }

关于詹金斯

  1. 安装 GitHub Pull Request Builder 插件。 (您还需要“Github”插件,但通常应作为 Jenkins ver 2+ 的一部分安装)
  2. 詹金斯 – 证书
    • 添加 github 个人访问令牌 (PAT) 作为“秘密文本”凭据。
    • 添加 github 用户名-密码作为“用户名-密码”凭证。
  3. 管理 Jenkins – 配置系统
    • Github – Github 服务器:这是 Github 插件的一部分。添加 github 服务器。 ‘API URL’ 它将默认为 https://api.github.com。如果您使用的是企业 github,请替换为企业 github url,然后是 /api/v3。对于凭据 select PAT 选项。测试连接。 “管理挂钩”已选中。
    • GitHub Pull Request Builder:对于“GitHub 服务器 API URL”,使用与 Git 中指定的相同的 url集线器服务器部分。将“共享秘密”留空。对于凭据,请使用“用户名密码”凭据。测试凭据以确保其正常工作。在我的设置中,选中了“自动管理 webhooks”。
  4. 管道作业
    • 使用“管道”选项创建一个新项目。注意:这是 vanilla Pipeline 作业,而不是 Multibranch Pipeline。
    • 常规部分:勾选‘Github Project’——项目URL:输入你的github repo url
    • 构建触发器:选中“GitHub Pull Request Builder”
      • 对于“GitHub API 凭据”select 选项,您在“管理 Jenkins – 配置系统”屏幕中为 GitHub 拉取请求生成器设置的选项
      • 对于管理员列表:添加您的用户名
      • 选中使用 github 挂钩来触发构建
    • 管道:
      1. Select‘来自 SCM 的流水线脚本’。请注意,这假设您的存储库的根文件夹将包含一个“Jenkinsfile”
      2. 单片机:Select‘Git’
      3. 存储库 - 输入存储库详细信息。对于凭据,请使用基于“用户名-密码”的凭据。
      4. 单击“高级”并将 refspec 添加为 +refs/pull/*:refs/remotes/origin/pr/*
      5. 分支 – 应该是 ${sha1}
      6. 脚本路径:默认为Jenkinsfile,保持原样。
      7. 轻量级结帐 - 取消选中此 (https://github.com/jenkinsci/ghprb-plugin/issues/507)

就是这样。一切就绪。在你的 repo 的 master 分支上创建一个 PR 现在应该触发你的 Jenkins Pipeline 作业

一些观察

  • 从 github 重新传送 PR 的 webhook 负载不会触发管道,但在 github 上打开新的 PR 甚至重新打开已关闭的 PR 会触发管道作业
  • 在管道作业配置中,如果您选择“管道脚本”并将您的管道脚本粘贴到其中,则作业不会触发!!!

按照以下步骤在 GitHub

上生成的拉取请求中自动触发 Jenkins 作业
  1. 在 GitHub 上创建一个网络钩子,即 http:///generic- webhook-trigger/invoke
  2. 内容类型:application/json
  3. Select 现在将请求作为事件 github 配置部分已完成。

Jenkins 作业配置

  1. 在 Jenkins 中下载通用 Webhook 触发器

  2. Git Jenkins 上的集线器配置

Git Hub Configuration

7.Select jenkins 上的通用 Webhook 触发器 8.Generic Webhook Trigger Configuration on Jenkins然后按照步骤 9

9.After 执行第 7 步 Jenkins 作业将触发 PullRequest 10.Step 需要 8 个才能从 Pull request Payload 中获取信息 11.Branch configuration inside Generic Webhook Trigger to get Branch details from Pull Request

谢谢