如何从 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
简而言之,流程可以是这样的:
您将管道创建为代码并将其保存在项目根目录下名为 Jenkinsfile
的文件中。该代码应描述您的项目将如何构建。有关示例,请参见此处:https://jenkins.io/doc/pipeline/examples/
然后您应该在 Jenkins 中创建一个新的 "Multibranch Pipeline Project" 项。您应该设置它以便扫描步骤 1 的回购协议。
现在,只要您在第 1 步回购上打开一个新的 PR 分支,该分支就会被签出,并根据其中包含的 Jenkinsfile 说明进行构建。您可以根据需要设置更多关于构建内容和构建时间的条件。
备注:
"Multibranch Pipeline Project" 示例文档:https://jenkins.io/doc/book/pipeline-as-code/(向下滚动到多分支管道项目)
请记住,在推荐 PR 后让插件构建 PR 是行不通的。这里有一个分析这个问题的讨论:https://github.com/jenkinsci/gitlab-plugin/issues/298 有解决方法(也在那个讨论中描述)但是它们设置起来很麻烦。
我有类似的问题。这是对我有用的
先决条件
- 詹金斯版本。 2+(我使用的是 Jenkins 2.60)
- Git集线器(或Githhub
企业)账户
- 您的 github 和 Jenkins 必须能够与
彼此。
在Git中心
- 创建具有相关权限的 github 个人访问令牌 (PAT)。
- 为你的 repo,创建一个 webhook
- URL 作为
YourJenkinsURL/github-webhook/
- 选择“让我 select 个人活动”并勾选“拉取请求”
- 将 Jenkinsfile 添加到您的存储库的根文件夹中。出于测试目的,您可以将内容作为基本的 hello world,如下所示
pipeline {
agent any
stages {
stage('Test') {
steps {
echo 'Hello World ...'
}
}
}
}
关于詹金斯
- 安装 GitHub Pull Request Builder 插件。 (您还需要“Github”插件,但通常应作为 Jenkins ver 2+ 的一部分安装)
- 詹金斯 – 证书
- 添加 github 个人访问令牌 (PAT) 作为“秘密文本”凭据。
- 添加 github 用户名-密码作为“用户名-密码”凭证。
- 管理 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”。
- 管道作业
- 使用“管道”选项创建一个新项目。注意:这是 vanilla Pipeline 作业,而不是 Multibranch Pipeline。
- 常规部分:勾选‘Github Project’——项目URL:输入你的github repo url
- 构建触发器:选中“GitHub Pull Request Builder”
- 对于“GitHub API 凭据”select 选项,您在“管理 Jenkins – 配置系统”屏幕中为 GitHub 拉取请求生成器设置的选项
- 对于管理员列表:添加您的用户名
- 选中使用 github 挂钩来触发构建
- 管道:
- Select‘来自 SCM 的流水线脚本’。请注意,这假设您的存储库的根文件夹将包含一个“Jenkinsfile”
- 单片机:Select‘Git’
- 存储库 - 输入存储库详细信息。对于凭据,请使用基于“用户名-密码”的凭据。
- 单击“高级”并将 refspec 添加为
+refs/pull/*:refs/remotes/origin/pr/*
- 分支 – 应该是
${sha1}
- 脚本路径:默认为Jenkinsfile,保持原样。
- 轻量级结帐 - 取消选中此 (https://github.com/jenkinsci/ghprb-plugin/issues/507)
就是这样。一切就绪。在你的 repo 的 master 分支上创建一个 PR 现在应该触发你的 Jenkins Pipeline 作业
一些观察
- 从 github 重新传送 PR 的 webhook 负载不会触发管道,但在 github 上打开新的 PR 甚至重新打开已关闭的 PR 会触发管道作业
- 在管道作业配置中,如果您选择“管道脚本”并将您的管道脚本粘贴到其中,则作业不会触发!!!
按照以下步骤在 GitHub
上生成的拉取请求中自动触发 Jenkins 作业
- 在 GitHub 上创建一个网络钩子,即 http:///generic-
webhook-trigger/invoke
- 内容类型:application/json
- Select 现在将请求作为事件 github 配置部分已完成。
Jenkins 作业配置
在 Jenkins 中下载通用 Webhook 触发器
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
谢谢
看起来 GitHubPullRequestBuilder 与 Jenkins v2.0 管道作业不兼容。
如何配置从 GitHub 拉取请求事件触发的管道作业?
关于这个主题的文档很少,我找不到任何例子。还是在 GitHub 中创建网络挂钩以在 PR 事件上触发管道作业更好?
将 Pipeline 与 GitHub 拉取请求一起使用的最直接方法是将脚本放入名为 Jenkinsfile
的存储库中,然后安装 GitHub Branch Source 插件。 Documentation
简而言之,流程可以是这样的:
您将管道创建为代码并将其保存在项目根目录下名为
Jenkinsfile
的文件中。该代码应描述您的项目将如何构建。有关示例,请参见此处:https://jenkins.io/doc/pipeline/examples/然后您应该在 Jenkins 中创建一个新的 "Multibranch Pipeline Project" 项。您应该设置它以便扫描步骤 1 的回购协议。
现在,只要您在第 1 步回购上打开一个新的 PR 分支,该分支就会被签出,并根据其中包含的 Jenkinsfile 说明进行构建。您可以根据需要设置更多关于构建内容和构建时间的条件。
备注:
"Multibranch Pipeline Project" 示例文档:https://jenkins.io/doc/book/pipeline-as-code/(向下滚动到多分支管道项目)
请记住,在推荐 PR 后让插件构建 PR 是行不通的。这里有一个分析这个问题的讨论:https://github.com/jenkinsci/gitlab-plugin/issues/298 有解决方法(也在那个讨论中描述)但是它们设置起来很麻烦。
我有类似的问题。这是对我有用的
先决条件
- 詹金斯版本。 2+(我使用的是 Jenkins 2.60)
- Git集线器(或Githhub 企业)账户
- 您的 github 和 Jenkins 必须能够与 彼此。
在Git中心
- 创建具有相关权限的 github 个人访问令牌 (PAT)。
- 为你的 repo,创建一个 webhook
- URL 作为
YourJenkinsURL/github-webhook/
- 选择“让我 select 个人活动”并勾选“拉取请求”
- URL 作为
- 将 Jenkinsfile 添加到您的存储库的根文件夹中。出于测试目的,您可以将内容作为基本的 hello world,如下所示
pipeline { agent any stages { stage('Test') { steps { echo 'Hello World ...' } } } }
关于詹金斯
- 安装 GitHub Pull Request Builder 插件。 (您还需要“Github”插件,但通常应作为 Jenkins ver 2+ 的一部分安装)
- 詹金斯 – 证书
- 添加 github 个人访问令牌 (PAT) 作为“秘密文本”凭据。
- 添加 github 用户名-密码作为“用户名-密码”凭证。
- 管理 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”。
- 管道作业
- 使用“管道”选项创建一个新项目。注意:这是 vanilla Pipeline 作业,而不是 Multibranch Pipeline。
- 常规部分:勾选‘Github Project’——项目URL:输入你的github repo url
- 构建触发器:选中“GitHub Pull Request Builder”
- 对于“GitHub API 凭据”select 选项,您在“管理 Jenkins – 配置系统”屏幕中为 GitHub 拉取请求生成器设置的选项
- 对于管理员列表:添加您的用户名
- 选中使用 github 挂钩来触发构建
- 管道:
- Select‘来自 SCM 的流水线脚本’。请注意,这假设您的存储库的根文件夹将包含一个“Jenkinsfile”
- 单片机:Select‘Git’
- 存储库 - 输入存储库详细信息。对于凭据,请使用基于“用户名-密码”的凭据。
- 单击“高级”并将 refspec 添加为
+refs/pull/*:refs/remotes/origin/pr/*
- 分支 – 应该是
${sha1}
- 脚本路径:默认为Jenkinsfile,保持原样。
- 轻量级结帐 - 取消选中此 (https://github.com/jenkinsci/ghprb-plugin/issues/507)
就是这样。一切就绪。在你的 repo 的 master 分支上创建一个 PR 现在应该触发你的 Jenkins Pipeline 作业
一些观察
- 从 github 重新传送 PR 的 webhook 负载不会触发管道,但在 github 上打开新的 PR 甚至重新打开已关闭的 PR 会触发管道作业
- 在管道作业配置中,如果您选择“管道脚本”并将您的管道脚本粘贴到其中,则作业不会触发!!!
按照以下步骤在 GitHub
上生成的拉取请求中自动触发 Jenkins 作业- 在 GitHub 上创建一个网络钩子,即 http:///generic- webhook-trigger/invoke
- 内容类型:application/json
- Select 现在将请求作为事件 github 配置部分已完成。
Jenkins 作业配置
在 Jenkins 中下载通用 Webhook 触发器
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
谢谢