GitHub Actions在错误的分支上运行工作流程

4

我有以下的 .github/workflows/ci.yml 文件用于 GitHub Actions(为了方便理解这个问题,删除了一些代码):

name: CI
on:
  push:
  release:
    types: [published]

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      # ...
  deploy-staging:
    runs-on: ubuntu-latest
    needs: test
    if: github.event_name == 'push' && github.ref == 'staging'
    steps:
      # ...

我按照以下步骤进行了操作:
  1. develop 分支上进行了一些提交,并推送了这些更改。
  2. 在 GitHub Actions 上构建通过后,我从 develop 分支快进合并到 staging 分支。
我期望在第 2 步之后,GitHub Actions 运行 testdeploy-staging 两个作业。但实际上它只是再次运行了 test,而没有运行 deploy-staging

GitHub Actions Workflow Runs

正如您在上面所看到的,即使将代码推送到了“staging”分支,它仍然在“develop”分支上运行,而不是“staging”分支。我有点猜测这可能是由于快进合并的某种奇怪行为引起的。但是GitHub显然已经识别出我将代码推送到了“staging”,因为它提供了从该分支创建PR到“master”的选项。

GitHub offering to create a PR for <code>staging</code>

这让我重新思考了一下它为什么试图在develop上运行而不是staging的理论。
为什么会发生这种情况?是否有任何方法可以修复此问题,以便将合并到staging实际上在staging上运行工作流程,而不是develop

它是否实际运行,例如在“development”分支上的deploy-staging任务中执行任何步骤,还是仅失败但没有运行任何步骤? Github actions存在一个[错误](https://github.community/t5/GitHub-Actions/BUG-Workflows-report-failure-when-action-did-not-run-and/m-p/41566),即将未满足某个条件的任务标记为失败,而不是“未运行”。这就是为什么您需要明确指定发生了什么的原因。还有其他解决问题的方法,但我需要知道您具体遇到了什么问题。 - smac89
这个问题可能与以下相关:https://github.community/t/actions-reporting-wrong-branch-on-merges/16762/10 - fgysin
2个回答

1

${{ github.ref }} 将会是 refs/heads/staging 而不仅仅是 staging

在这种情况下,最好的做法是在它之前的步骤中打印您想要检查的变量值:

    steps:
      - name: Check inputs
        run: |
          echo github.ref is: ${{ github.ref }}
          echo github.event_name is: ${{ github.event_name }}

0

我的方法是将触发器和相关的作业分别放入不同的工作流程中。

因此,为了模仿您的示例,我将有两个文件,而不是一个 ci.yml

  • test.yml
  • deploy-staging.yml

.github/workflows/test.yml 文件中:
name: Test
on: push

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      # ...

.github/workflows/release-staging.yml 文件中:
name: Release Staging

on:
  push:
    branches:
      - staging

jobs:
  deploy-staging:
    runs-on: ubuntu-latest
    steps:
      # test steps ...
      # release ...

诚然,这很烦人,因为发布与测试不在同一次测试运行中,但您希望在部署之前确保所有测试都通过。

如果您想将测试运行工作流链接到部署工作流,我可能会更改release-staging以使用检查套件事件而不是推送。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接