GitHub Actions:将数据从工作流传递到另一个工作流?

fgy*_*ica 6 github-actions

GitHub Actions 允许workflow_run根据本文档使用事件从另一个工作流触发工作流触发工作流的事件 - Webhook 事件 - 工作流运行

这工作正常。但是,对于我计划使用这个的情况,除了第一个工作流之外的所有工作流都可能依赖于有关先前工作流的一些信息......例如某些字符串/条件/等......

我们如何将数据从一个工作流传递到另一个工作流?

是否有一些类似于needs.jobs.<job_id>.*可用于将数据从一项工作传递到另一项工作的参考?

注意:在工作流 B 中使用工作流 A 中内置的工件是一个不同的问题(在此处提问和回答),可以通过使用以下操作来解决:dawidd6/action-download-artifact@v2

Den*_*uev 17

您可以使用repository_dispatch 操作发送包含所需数据的事件。然后它将触发另一个具有on: repository_dispatch特定事件名称的工作流程。查看该操作的文档以获取更多信息。

你可以在里面传递你想要的数据client-payload。对于更大的文件,我想可以使用工件。

例如,您有第一个工作流程:


name: Test

on:
  - push
jobs:
  preflight-job:
    name: First Step
    runs-on: ubuntu-latest
    steps:
      - name: Repository Dispatch
        uses: peter-evans/repository-dispatch@v1
        with:
          token: ${{ secrets.PAT }}
          event-type: my-event
          client-payload: '{"ref": "${{ github.ref }}", "sha": "${{ github.sha }}", "test": "test message"}'
Run Code Online (Sandbox Code Playgroud)

然后创建另一个将由此事件触发的工作流程文件:


name: Repository Dispatch
on:
  repository_dispatch:
    types: [my-event]
jobs:
  myEvent:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
        with:
          ref: ${{ github.event.client_payload.ref }}
          
      - run: echo ${{ github.event.client_payload.sha }}
      - run: echo ${{ github.event.client_payload.test }}
Run Code Online (Sandbox Code Playgroud)