【问题标题】:Run CI build on pull request merge in TeamCity在 TeamCity 中的拉取请求合并上运行 CI 构建
【发布时间】:2021-07-27 20:51:57
【问题描述】:

我有一个在 TeamCity 中设置的 CI 构建,它将在 BitBucket (git) 中发出拉取请求时触发。它目前是针对拉取请求的源分支构建的,但如果它可以构建合并的拉取请求会更有意义。

我的研究为我提供了以下可能的解决方案:

  1. 脚本作为构建的一部分运行 - 如果可能,不要这样做
  2. 服务器/代理插件 - 没有找到足够的文档来确定这是否可行

之前有没有人在 TeamCity 中这样做过,或者对我如何实现它有建议?

更新:(基于 John Hoerr 的回答)

替代解决方案 - 忘记 TeamCity 进行合并,使用 BitBucket Web 挂钩像 github 一样创建合并分支并遵循 John Hoerr 的回答。

【问题讨论】:

  • 令人着迷的是,CI 服务器的这种基本功能需要许多问题、解释和半有效或无效的解决方案...????‍♂️

标签: merge continuous-integration teamcity bitbucket pull-request


【解决方案1】:

分支规范refs/pull-requests/*/merge添加到项目的VCS Root。这将导致 TeamCity 监控默认分支的合并输出拉取请求。

【讨论】:

  • 不幸的是,BitBucket 没有为拉取请求创建该分支,它是 GitHub 特定的东西。
  • 嗯...您对 BitBucket 的投入程度如何? :)
  • 确实...该链接确实让我对使用 BitBucket 网络挂钩有所不同
  • +:refs/pull-requests/*/from 如果我们想在合并之前构建 PR 可以使用这个
  • 使用 TeamCity 2019.1,这仅适用于您不过滤 VCS ROOT 中的分支或添加以下格式的分支过滤器:+:*/merge+:pull-requests/*
【解决方案2】:

在我看来,您正在寻找的功能是通过 TeamCity 的“远程运行”功能提供的。这基本上是一个包含合并源和目标合并分支的个人构建。

https://confluence.jetbrains.com/display/TCD8/Branch+Remote+Run+Trigger

“这些分支是常规版本控制分支,TeamCity 不管理它们(即,如果您不再需要该分支,则需要使用常规版本控制手段删除该分支)。

默认情况下,TeamCity 会为在分支的最后一次提交中检测到的用户触发个人构建。您还可以在分支名称中指定 TeamCity 用户。为此,请在模式中使用占位符 TEAMCITY_USERNAME,在分支名称中使用您的 TeamCity 用户名,例如模式 remote-run/TEAMCITY_USERNAME/* 将匹配分支 remote-run/joe/my_feature 并为 TeamCity 开始个人构建用户 joe(如果存在这样的用户)。”

然后在 Bitbucket 中设置一个自定义的“Pull Request Created”Webhook。

https://confluence.atlassian.com/display/BITBUCKET/Tutorial%3A+Create+and+Trigger+a+Webhook

因此,对于您与 BitBucket 集成的特定用例,您可以利用您创建的 WebHook,然后拥有一个自动运行远程运行 git 命令的 shell / bash 脚本(取决于您的 TeamCity 服务器操作系统),这将反过来自动触发服务器上的 TeamCity Remote Run CI 构建。然后,您将能够转到 TeamCity UI,+HEAD:remote-run/my_feature 分支,并基于每个功能查看远程运行结果,并对合并到您的代码的构建结果充满信心主代码行。

【讨论】:

    【解决方案3】:

    似乎 BitBucket/Stash 在以下条件下为拉取请求创建了分支:

    refs/pull-requests//来自

    您应该能够通过 Teamcity run-from-branch 功能或通过 BitBucket/Stash 中的 http post 接收挂钩为该位置设置远程运行。

    【讨论】:

    • 是 - git ls-remote 显示 refs/pull-requests/#/from(其中 # 是拉取请求的编号)和 refs/pull-requests/#/merge。似乎可以通过将# 替换为* 来在分支规范 下的TeamCity 中配置这些。
    • 这适用于 Bitbucket Server(又名 Stash),但不适用于我认为 OP 正在使用的 Bitbucket Cloud
    【解决方案4】:

    你也可以使用这个插件:https://github.com/ArcBees/teamcity-plugins/wiki/Configuring-Bitbucket-Pull-Requests-Plugin

    (完全披露:我是主要贡献者:P,我每天都在使用它)

    【讨论】:

    • 这可以防止合并,直到构建通过 TC?我们正在寻找一种阻止 PR 的方法,直到 TC 给予支持。理想情况下,没有 Bamboo 作为中介...
    • @X_Trust 你做到了吗?
    • @IbrahimAwad 我不记得了,抱歉 :(
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-20
    • 1970-01-01
    • 2013-10-07
    • 1970-01-01
    • 1970-01-01
    • 2013-12-12
    • 2010-09-06
    相关资源
    最近更新 更多