我有以下用于 GitHub Actions 的 .github/workflows/ci.yml 文件(删除了一些代码以使其更容易理解这个问题):

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:
      # ...

我经历了以下步骤:
  • develop 分支上进行一些提交,并推送这些更改。
  • 在 GitHub Actions 上构建通过后,我进行了从 developstaging 的快速合并。

  • 我希望 GitHub Actions 在第 2 项之后运行 testdeploy-staging 作业。但它只是再次运行 test 而不运行 deploy-staging

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

    正如您在上面看到的,即使在推送到 staging 之后,它仍然在 develop 分支而不是 staging 分支上运行它。我有点假设这可能是由于快进合并的一些奇怪行为。但是 GitHub 显然意识到我推送到 staging ,因为它提供了从该分支创建 PR 到 master

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

    所以这让我重新思考我的理论,为什么它试图在 develop 而不是 staging 上运行。

    为什么会发生这种情况?有没有办法解决这个问题,所以合并到 staging 实际上在 staging 而不是 develop 上运行工作流?

    最佳答案

    ${{ 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 }}
    

    关于GitHub Actions 在错误的分支上运行工作流,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59020994/

    10-13 05:10