git - 在 Github 中 merge pull 请求时触发 Jenkins 构建

标签 git jenkins pull-request

这应该是 Jenkins 中一个简单的、开箱即用的配置,但我在互联网上没有找到任何简单的东西。我想要做的就是仅当我在我们的 Github 存储库中 merge pull 请求时才触发构建。
首先,Github 将围绕 pull 请求的几乎所有事件聚合到一个 webhook 中(与允许您区分操作的 bitbucket 相比)。
enter image description here
在 Jenkins 方面,我看到帖子指向 Generic Webhook Plugin它允许您摄取 webhook 的 json 并创建变量,但是从这里看起来需要在脚本中使用这些变量才能触发/不触发构建。
Github Pull Request Build是另一个流行的插件,但同样没有明确说明“仅在 merge PR 时触发此构建”,甚至似乎提供了在 webhook json 中查找特定值的选项。
除非那里有其他插件,否则我没有找到最好的选择(即最少的配置才能开始构建)是为 Jenkins 中的 GITSCM 轮询配置 GitHub Hook 触发器,并且在 Github 端仅在推送事件上发送 webhook ...但是这不是我们正在寻找的确切行为。
enter image description here
现在这一切都是通过 UI 完成的,而且自从我使用 Jenkins 以来已经有一段时间了,所以也许声明性管道基础设施已经通过了 UI,但看起来这应该更直观。有人可以解释他们发现的最简单的实现,使用 Jenkins 和 Github,仅在 pull 请求 merge 到特定分支时触发构建?

最佳答案

不再需要 webhook,因为您现在如何 GitHub Actions (假设您使用的是 github.com ,尽管 Actions are coming with GHE, GitHub Enterprise, in Beta, starting Sept. 2020 )。
如解释 on this thread ,您可以在 GitHub 端在 master 上 merge pull 请求时触发作业:

on:
  pull_request:
    branches:
      - master
    types: [closed]

jobs:
  <job id>:
    if: github.event.pull_request.merged == true
    steps: // the rest of the code
然后该作业可以使用 GitHub 操作,例如 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"
之后discussion with the OP并关注 GitHub Actions tutorial ,我确认:
  • Jenkins 不必从 Docker 开始,它只需要通过其公共(public) URL 从 GitHub 可寻址;
  • 需要在 Jenkins 上激活“触发远程构建”;
  • 需要为有权启动 Jenkins 作业的 Jenkins 用户生成 token ;
  • 文件triggerJenkinsBuild.yml (或您想要的任何其他名称)必须在文件夹 .github/workflows 中创建在你的 GitHub 存储库中,上面提到的两个 YAML 部分;
  • url:”字段只是 Jenkins 实例的基本 URL,没有额外的路径。
  • 关于git - 在 Github 中 merge pull 请求时触发 Jenkins 构建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64050510/

    相关文章:

    java - Maven 依赖项失败并出现 501 错误

    Github 拉取请求历史

    git - 清除 Bitbucket 上的 git 存储库?

    Git 子模块最佳实践 - 始终使用 ssh 协议(protocol)而不是 https?

    git - 如何找到两个 git 提交之间的交集?

    groovy - 不要删除标记为 "Keep this build forever"的 Jenkins 构建 - 用于删除 Jenkins 构建的 Groovy 脚本

    python - 触发 Jenkins 的命令不起作用

    git - 在 Bitbucket : error "Unrelated branches" 中创建 pull 请求

    git - 使用 Intellij 解决 pull 请求期间的冲突

    git - 通过 Jenkins 标记 GitHub 项目