github - 如何从 GitHub 拉取请求触发 Jenkins 2.0 Pipeline 作业

标签 github jenkins jenkins-pipeline jenkins-2

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

如何配置从 GitHub 拉取请求事件触发的管道作业?
关于这个主题的文档很少,我找不到任何这方面的例子。或者在 GitHub 中创建一个 Web Hook 来触发 PR 事件的管道作业是否更好?

最佳答案

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

先决条件

  • Jenkins 版本。 2+(我使用的是 Jenkins 2.60)
  • Github(或 Github 企业)账户
  • 您的 github 和 Jenkins 必须能够对话 彼此。

在 Github 上

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

关于 Jenkins

  1. 安装GitHub Pull Request Builder插件。 (您还需要“Github”插件,但通常应作为 Jenkins 版本 2+ 的一部分安装)
  2. Jenkins – 凭证
    • 添加 github 个人访问 token (PAT) 作为“密文”凭据。
    • 添加 github 用户名-密码作为“用户名-密码”凭证。
  3. 管理 Jenkins – 配置系统
    • Github – Github 服务器:这是 Github 插件的一部分。添加 github 服务器。 ‘API URL’ 默认为https://api.github.com 。如果您使用的是企业 github,请替换为企业 github url,后跟/api/v3。对于凭据,请选择 PAT 选项。测试连接。选中“管理 Hook ”。
    • GitHub Pull Request Builder:对于“GitHub 服务器 API URL”,使用与 Github 服务器部分中指定的相同的 URL。将“共享 secret ”留空。对于凭据,请使用“用户名-密码”凭据。测试凭据以确保其正常工作。在我的设置中,选中了“自动管理网络钩子(Hook)”。
  4. 管道作业
    • 使用“管道”选项创建一个新项目。注意:这是普通的管道作业,而不是多分支管道。
    • 常规部分:检查“Github 项目”- 项目 URL:输入您的 github 存储库 URL
    • 构建触发器:检查“GitHub Pull Request Builder”
      • 对于“GitHub API 凭证”,选择您在“管理 Jenkins – 配置系统”屏幕中为 GitHub 拉取请求构建器设置的选项
      • 对于管理员列表:添加您的用户名
      • 选中使用 github Hook 进行构建触发
    • 管道:
      1. 选择“来自 SCM 的管道脚本”。请注意,这假设您的存储库的根文件夹将包含“Jenkinsfile”
      2. SCM:选择“Git”
      3. 存储库 - 输入存储库详细信息。对于凭据,请使用基于“用户名-密码”的凭据。
      4. 点击“高级”并将引用规范添加为 +refs/pull/*:refs/remotes/origin/pr/*
      5. 分支 – 应为 ${sha1}
      6. 脚本路径:默认为Jenkinsfile,保持原样。
      7. 轻量级结帐 - 取消选中此选项 ( https://github.com/jenkinsci/ghprb-plugin/issues/507 )

就是这样。你已经准备好了。在您的存储库的 master 分支上创建 PR 现在应该会触发您的 Jenkins Pipeline 作业

一些观察

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

关于github - 如何从 GitHub 拉取请求触发 Jenkins 2.0 Pipeline 作业,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36850485/

相关文章:

jenkins - 如何将 Jenkins REST API 与 JENKINS_SERVER_COOKIE 一起使用?

jenkins - 部署在服务器上的服务(Jenkins 和 Apache Tomcat)的 Cent OS 防火墙问题

jenkins - Groovy值未附加在 Jenkins 管道中

maven - Jenkins Pipeline - 无法连接到 Docker 守护进程

jenkins - 从变量 Groovy 获取 YAML 值

python - 使用 tensorflow 使用对象检测代码时无法看到结果

github actions的参数传递问题

git - 推送到 GitHub 与使用 webpack 包部署到 Heroku

git - 无法克隆 github 存储库

jenkins - groovy 捕获标准输出最后一行