Bitrise 在代码推送时运行部署工作流(当它不应该这样做时)

Bitrise Runs Deployment Workflow on Code Push (when it shouldn't)

我很困惑为什么会发生以下两件事:

  1. 当我将一些提交推送到我的 feature_foo 分支时,2 个工作流(构建)是 运行:针对最新提交的主要工作流,并针对 我的最后一次提交部署工作流PR,都在 feature_foo。我希望只有主要工作流程 运行 因为我还没有发布 PR
  2. artifacts+\<my-bitrise-project-id\>@bitrise.io 在同一分钟内向我发送了 2 封相同的电子邮件通知。我知道 PR can lead to two builds(因为 PR 在技术上是一种推动),但怀疑这是这里的问题,因为我还没有创建 PR。

这是我当前的 bitrise.yml 触发图:

trigger_map:
- push_branch: "*"
  workflow: primary
- pull_request_source_branch: "*"
  pull_request_target_branch: feature
  workflow: deployment-staging
- tag: "v*.*.*"
  workflow: deployment-production

顺便说一下,这是我想要的 3 工作流程设置:

  1. 运行 两次集成测试(主要工作流程):
    1. 代码推送到*(任意分支)
    2. 将请求拉到 feature 分支(创建 PR 时,即预合并状态,以便贡献者可以预览他们提议的更改的潜在影响)
  2. 运行 部署(部署工作流)到 staging 来自 * 到 feature 分支的 PR 合并时
  3. 运行 部署(部署工作流)到 生产 标签 v*.*.* 被推送时

实现此目的的正确 bitrise.yml 配置是什么? docs 没有说明我们如何按状态区分 PR(发布与合并)。我只想 在代码被审查 之后部署。

谢谢

如果您打开 PR,是否会触发另一个构建?确定PR还没打开吗?

回答

I want to deploy only after the code has been reviewed.

我猜你的意思是当 PR 被审查 并合并 到目标分支时,例如进入 master.

为此,您可以使用这样的配置:https://devcenter.bitrise.io/builds/triggering-builds/trigger-map/#dont-start-two-builds-for-pull-requests-from-the-same-repository

trigger_map:
- push_branch: master
  workflow: deploy
- pull_request_target_branch: "*"
  workflow: primary

当您打开 PR 和每次更新 PR 时,这将 运行 使用名为 primary 的工作流构建。在这种情况下,通常您希望 运行 在 primary 工作流程中进行一些自动化测试(unit/ui 测试,linters and/or 可能会进行测试构建)。

然后,当您合并 PR(在本例中合并到 master 分支)时,它将使用 deploy 工作流程触发构建(从技术上讲,合并会生成 commit/push事件)。

希望对您有所帮助,如有任何问题,请告诉我!

Viktor 的回答已经足够了,但我想补充一些可能与其他人相关的发现:

When I push some commits to my feature_foo branch, 2 workflows (builds) are run: the primary workflow against the latest commit, and deploy workflow against my last PR, both on feature_foo

我相信这是因为我有一个开放的 PR 并将额外的提交推送到该 PR 的源代码分支。根据当时我的触发图(在 OP 上共享),它将 运行 一个 deploy-staging 工作流程。 Viktor 分享的触发图对我的用例更有意义

2 identical email notifications are sent to me from artifacts+\@bitrise.io within the same minute

事实证明,Bitrise 在两封单独的电子邮件中同时发送了已签名和未签名的 APK(无论如何)