31

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

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

4

4 回答 4

45

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

先决条件

  • 詹金斯版 2+(我使用的是 Jenkins 2.60)
  • Github(或 Github 企业)帐户
  • 您的 github 和 Jenkins 必须能够相互交谈。

在 Github 上

  1. 创建具有相关权限的 github 个人访问令牌 (PAT)。
  2. 对于您的 repo,创建一个 webhook
    • 网址为YourJenkinsURL/github-webhook/
    • 选择“让我选择单个事件”并选中“拉取请求”
  3. Jenkinsfile添加到存储库的根文件夹。出于测试目的,您可以将内容作为基本的 hello world 如下所示
    管道{
        代理任何
        阶段{
            阶段('测试'){
                脚步 {
                    回声'你好世界...'
                }
            }
        }
    }

关于詹金斯

  1. 安装GitHub 拉取请求生成器插件。(您还需要“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。对于凭证,选择 PAT 选项。测试连接。“管理挂钩”已选中。
    • GitHub 拉取请求生成器:对于“GitHub 服务器 API URL”,使用与 Github 服务器部分中指定的相同的 url。将“共享秘密”留空。对于凭据,请使用“用户名密码”凭据。测试凭据以确保其正常工作。在我的设置中,选中了“自动管理 webhook”。
  4. 管道作业
    • 使用“管道”选项创建一个新项目。注意:这是 vanilla Pipeline 作业,而不是 Multibranch Pipeline。
    • 一般部分:检查'Github Project' - Project URL:输入你的github repo url
    • 构建触发器:检查“GitHub 拉取请求构建器”
      • 对于“GitHub API 凭据”,选择您在“管理 Jenkins – 配置系统”屏幕中为 GitHub 拉取请求构建器设置的选项
      • 对于管理员列表:添加您的用户名
      • 检查 Use github hooks for build triggering
    • 管道:
      1. 选择“来自 SCM 的管道脚本”。请注意,这假设您的 repo 的根文件夹将包含一个“Jenkinsfile”
      2. SCM:选择“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 会触发管道作业
  • 在流水线作业配置中,如果您选择“流水线脚本”并将您的流水线脚本粘贴到那里,作业不会触发!!!
于 2017-07-15T18:43:03.500 回答
3

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

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

  2. 然后你应该在你的 Jenkins 中创建一个新的“多分支管道项目”项目。您应该设置它以便扫描您的步骤 1 的存储库。

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

笔记:

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

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

于 2017-04-05T12:59:09.387 回答
2

将 Pipeline 与 GitHub 拉取请求一起使用的最直接方法是将脚本以名称放入您的存储库Jenkinsfile,然后安装GitHub 分支源插件。文档

于 2016-04-26T18:55:29.507 回答
0

按照以下步骤在 GitHub 上生成的拉取请求上自动触发 Jenkins 作业

  1. 在 GitHub 上创建一个网络挂钩,即 http:///generic-webhook-trigger/invoke
  2. 内容类型:应用程序/json
  3. 选择 Pull Request 作为事件 现在 github 配置部分已完成。

詹金斯作业配置

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

  2. Jenkins 上的 Git Hub 配置

Git Hub 配置

7.选择 Generic Webhook Trigger on jenkins 8. Generic Webhook Trigger Configuration on Jenkins并按照步骤 9

9.在执行第 7 步之后,Jenkins 作业将在 PullRequest 上获得触发器 10.第 8 步需要从拉取请求有效负载中获取信息 11.通用 Webhook 触发器中的分支配置以从拉取请求中获取分支详细信息

谢谢

于 2018-10-12T20:23:25.870 回答