Nea*_*alR 10 git pull-request jenkins
这应该是 Jenkins 中一个简单的、开箱即用的配置,但我在互联网上没有找到任何简单的东西。我想要做的就是仅在我在 Github 存储库中合并拉取请求时触发构建。
首先,Github 将围绕拉取请求的几乎所有活动聚合到一个 webhook 中(与允许您区分操作的 bitbucket)。
在 Jenkins 方面,我看到帖子指向Generic Webhook Plugin,它允许您摄取 webhook 的 json 并创建变量,但是从这里看来,这些需要在脚本中使用才能触发/不触发一个构建。
Github Pull Request Build是另一个流行的插件,但同样没有明确说明“仅在合并 PR 时触发此构建”,甚至似乎提供了在 webhook json 中查找特定值的选项。
除非有其他插件,否则我还没有找到最好的选择(即开始构建的最少配置)是为 Jenkins 中的 GITSCM 轮询配置 GitHub 钩子触发器,并且在 Github 端仅在推送事件上发送 webhook ...然而,这不是我们正在寻找的确切行为。
现在这一切都是通过 UI 完成的,自从我使用 Jenkins 以来已经有一段时间了,所以也许声明性管道基础设施已经通过了 UI,但看起来这应该更直观。有人可以解释他们发现的最简单的实现,使用 Jenkins 和 Github,仅在拉取请求合并到特定分支时触发构建吗?
小智 7
尝试到处寻找,然后自己想出了这个解决方案
我假设您已经为 jenkins 配置了 webhook,因此跳过它。这个想法是捕获合并状态并且仅在其为真时触发构建。
我在 jenkins 上使用通用 webhook 触发器和可选过滤器来实现此目的。
不再需要 webhooks,因为您现在了解GitHub Actions(假设您正在使用github.com,尽管Actions 随 GHE、GitHub Enterprise 的 Beta 版一起提供,从 2020 年 9 月开始)。
如在此线程中所述,您可以在 GitHub 端在合并拉取请求时触发作业master:
on:
pull_request:
branches:
- master
types: [closed]
jobs:
<job id>:
if: github.event.pull_request.merged == true
steps: // the rest of the code
Run Code Online (Sandbox Code Playgroud)
然后,该作业可以使用 GitHub Action 之类的Trigger Jenkins Job for GitHub Actions,这将调用您的 Jenkins 并触发一个或多个 Jenkins 作业。
jobs:
build:
name: Build
runs-on: ubuntu-latest
steps:
- name: trigger single Job
uses: appleboy/jenkins-action@master
with:
url: "http://example.com"
user: "example"
token: ${{ secrets.TOKEN }}
job: "foobar"
Run Code Online (Sandbox Code Playgroud)
在与 OP 讨论并遵循GitHub Actions 教程之后,我确认:
triggerJenkinsBuild.yml必须.github/workflows在 GitHub 存储库的文件夹中创建一个文件(或您想要的任何其他名称),其中包含上面提到的两个 YAML 部分;url:" 字段只是 Jenkins 实例的基本 URL,没有额外的路径。| 归档时间: |
|
| 查看次数: |
6618 次 |
| 最近记录: |