由另一个 Action 成功触发的 Github Action

12

我想在不同的动作成功运行后触发 Github 动作。

这两个工作流程分别是:

单元测试动作(首先运行,应该触发下面的跟进测试动作)

name: unit-tests

on:
  push:
    branches:
      - '**'

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v2
      - name: Setup .NET Core
        uses: actions/setup-dotnet@v1
        with:
          dotnet-version: "3.1.x"
      - name: Test
        run: dotnet test src/XXXXXXXXXX

跟进测试操作(这只是一个测试行动)

name: Test action triggered by previous action success

on:
  workflow_run:
    workflows:
      - unit-tests
    types:
      - completed

jobs:
  test-job:
    name: Test Step
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
        with:
          ref: ${{ github.event.workflow_run.head_branch }}
      - run: echo "The follow on works!!"

问题在于当此操作在一个特性分支上被触发而不是默认分支时(因为我希望该操作在所有分支上运行),它就会失效。有什么想法吗?

特性分支上是否也存在这两种工作流程? - GuiFalourd
@GuiFalourd 是的,它们是。我后来发现你必须先将分支合并到默认分支中,然后从那时起它才会起作用。但这非常令人沮丧,因为在合并到默认分支之前无法测试触发器。 - bruzza42
我也读到过可以使用 "if: ${{ github.event.workflow_run.conclusion == 'success' }}" 来仅在前一个工作流成功时运行作业,但我还没有成功实现。 - bruzza42
你需要将它添加到 test-job 行以下。这里有一个示例 - GuiFalourd
这是另一个示例:https://github.com/GuillaumeFalourd/poc-github-actions/blob/main/.github/workflows/12-run-workflow.yml - GuiFalourd
1个回答

20

正如在评论中讨论的:

首先,有必要在分支上同时拥有两个工作流,并将该分支合并到默认分支中,然后它才能正常工作。

其次,可以使用if: ${{ github.event.workflow_run.conclusion == 'success' }}来仅在之前的工作流成功时运行作业。

示例

 on:
   workflow_run:
     workflows: ["Other Workflow Name"]
     types: [completed] #requested

 jobs:
   on-success:
     runs-on: ubuntu-latest
     if: ${{ github.event.workflow_run.conclusion == 'success' }}
     steps:
       - run: echo "First workflow was a success"

   on-failure:
     runs-on: ubuntu-latest
     if: ${{ github.event.workflow_run.conclusion == 'failure' }}
     steps:
       - run: echo "First workflow was a failure"

如果触发器同时具有 on: workflow_runon: workflow_dispatch,那该怎么办呢?是否有一种方法可以说“如果工作流是手动触发的(在这种情况下没有 workflow_run.conclusion),则不要检查 workflow_run.conclusion == 'success'”? - preritdas
你可以使用类似于 if: ${{ github.event.workflow_run.conclusion == 'success' || github.event.workflow_dispatch == 'true' }} 的语句(我不确定确切的语法是否是这个)。 - GuiFalourd
谢谢你的回复,可惜它没有起作用。当工作流由另一个工作流触发时,一切都正常,但是当我手动通过调度运行它时,工作流被“跳过”了。 - preritdas
9
我在这里检查了一下,检查事件是否是workflow_dispatch的正确语法是使用 github.event_name == 'workflow_dispatch。因此完整的表达式应为: if: ${{ github.event.workflow_run.conclusion == 'success' || github.event_name == 'workflow_dispatch' }} - GuiFalourd
1
搞定了!非常感谢。@GuiFalourd - preritdas

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