Bitrise 在代码推送时运行部署工作流(当它不应该这样做时)
Bitrise Runs Deployment Workflow on Code Push (when it shouldn't)
我很困惑为什么会发生以下两件事:
- 当我将一些提交推送到我的
feature_foo
分支时,2 个工作流(构建)是 运行:针对最新提交的主要工作流,并针对 我的最后一次提交部署工作流PR,都在 feature_foo
。我希望只有主要工作流程 运行 因为我还没有发布 PR
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 工作流程设置:
- 运行 两次集成测试(主要工作流程):
- 代码推送到*(任意分支)
- 将请求拉到
feature
分支(创建 PR 时,即预合并状态,以便贡献者可以预览他们提议的更改的潜在影响)
- 运行 部署(部署工作流)到 staging 当 来自 * 到
feature
分支的 PR 合并时
- 运行 部署(部署工作流)到 生产 当 标签
v*.*.*
被推送时
实现此目的的正确 bitrise.yml 配置是什么? docs 没有说明我们如何按状态区分 PR(发布与合并)。我只想 在代码被审查 之后部署。
谢谢
如果您打开 PR,是否会触发另一个构建?确定PR还没打开吗?
回答
I want to deploy only after the code has been reviewed.
我猜你的意思是当 PR 被审查 并合并 到目标分支时,例如进入 master
.
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(无论如何)
我很困惑为什么会发生以下两件事:
- 当我将一些提交推送到我的
feature_foo
分支时,2 个工作流(构建)是 运行:针对最新提交的主要工作流,并针对 我的最后一次提交部署工作流PR,都在feature_foo
。我希望只有主要工作流程 运行 因为我还没有发布 PR 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 工作流程设置:
- 运行 两次集成测试(主要工作流程):
- 代码推送到*(任意分支)
- 将请求拉到
feature
分支(创建 PR 时,即预合并状态,以便贡献者可以预览他们提议的更改的潜在影响)
- 运行 部署(部署工作流)到 staging 当 来自 * 到
feature
分支的 PR 合并时 - 运行 部署(部署工作流)到 生产 当 标签
v*.*.*
被推送时
实现此目的的正确 bitrise.yml 配置是什么? docs 没有说明我们如何按状态区分 PR(发布与合并)。我只想 在代码被审查 之后部署。
谢谢
如果您打开 PR,是否会触发另一个构建?确定PR还没打开吗?
回答
I want to deploy only after the code has been reviewed.
我猜你的意思是当 PR 被审查 并合并 到目标分支时,例如进入 master
.
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(无论如何)