从另一个工作流程触发新的工作流程?

bAr*_*don 11 github-actions

我可以从另一个工作流程触发新的工作流程吗?

我试图在第一个工作流程推送新版本后运行工作流程,但它似乎忽略了它。

jon*_*ckt 12

如此处所述,您可以使用该workflow_run事件触发另一个工作流。

例如,我们可以想到这样的两个工作流程定义(唯一的先决条件是,两者都驻留在同一个存储库中 - 但我确信,其他存储库也有一个事件):

release.yml

name: CI release

on: [push]

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v2

    - name: Release artifact
      run: ...
Run Code Online (Sandbox Code Playgroud)

do-something-different.yml

name: Do anything after the release of the first workflow

on:
  workflow_run:
    workflows: ["CI release"]
    types:
      - completed

jobs:
  notify:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v2

      - name: Do something
        run: ...
Run Code Online (Sandbox Code Playgroud)

这里的关键点是name: CI release第一个 yaml 文件的定义必须workflow_run: workflows: ["CI release"]与第二个 yaml 文件中的定义完全匹配。main另一点是,这种方法需要在默认分支(主要是or master)上完成,如文档所述

注意:仅当工作流文件位于默认分支上时,此事件才会触发工作流运行。

  • 遗憾的是,我认为 `workflow_run` 在大多数情况下几乎没有用: 1. 它在默认分支上运行,这有时会出现问题 2. 当从 pull_request 工作流触发时,它会丢失 pull_request 上下文并“只运行”并且不知道 PR (7认同)

bAr*_*don 9

在这里找到答案:

工作流运行中的操作无法触发新的工作流运行。例如,如果操作使用存储库的 GITHUB_TOKEN 推送代码,则即使存储库包含配置为在推送事件发生时运行的工作流,新工作流也不会运行。

编辑:上面的引用可能会令人困惑。当我将个人访问令牌 (PAT)添加到授予权限(而不是存储库的 GITHUB_TOKEN)的签出操作repo时,以下命令会触发其他工作流程:

        - name: Checkout Repo
          uses: actions/checkout@v2
          with:
              token: ${{ secrets.PAT_TOKEN }}
Run Code Online (Sandbox Code Playgroud)

(就我而言,在此结账后运行 semnatic-release 会创建一个带有新标签的新版本 - 确实会触发另一个工作流程,该工作流程仅在创建标签时运行)

  • 文档提到的“GITHUB_TOKEN”是仅限于该存储库的默认令牌。您使用的不是“GITHUB_TOKEN”,而是个人访问令牌(PAT),其范围更广。PAT 有意允许触发进一步的工作流程,而“GITHUB_TOKEN”则不允许。 (2认同)