如何在 GitHub 中设置和读取多个依赖工作流程的输出?

问题描述 投票:0回答:1

我有多个相互依赖的工作流程。第一个工作流程将生成一些 ID 或编号,相关工作流程将读取这些 ID 或编号。

流量:

第一个工作流程(

generated number
)手动触发-->第一个工作流程执行后会触发第二个工作流程(需要
generated number
)-->第二个工作流程执行后会触发第三个工作流程(需要
generated number
)

workflow1.yml

name: First workflow  

on:
  workflow_dispatch:

jobs:
  some_job:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout code
        uses: actions/checkout@v2

      - name: Generate some number
        run: ${{ github.run_number }}
    
    # How to save/store this number?

workflow2.yml

name: Second workflow

on:
  workflow_run:
    workflows: ["First workflow"]
    types:
      - completed

jobs:
  deploy:
    runs-on: ubuntu-latest

    steps:
      # How do we get the generated number in the First workflow?

workflow3.yml

name: Third workflow

on:
  workflow_run:
    workflows: ["Second workflow"]
    types:
      - completed

jobs:
  deploy:
    runs-on: ubuntu-latest

    steps:
      # How do we get the generated number in the First workflow?
github automation github-actions workflow github-api
1个回答
0
投票

上面评论中分享的

workflow_dispatch
解决方案在您的情况下看起来像这样:

name: First workflow  

on:
  workflow_dispatch:

jobs:
  some_job:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout code
        uses: actions/checkout@v2

      - name: Generate some number
        run: ${{ github.run_number }}
    
      - name: INIT second WORKFLOW
        run: |
          curl -X POST https://api.github.com/repos/OWNER/REPO/dispatches \
          -H 'Accept: application/vnd.github.everest-preview+json' \
          -u ${{ secrets.ACCESS_TOKEN }} \
          --data '{"event_type": "EVENT_NAME", "client_payload": { "input1": "value1"  }}'

第一个工作流程的最后一步将发送请求以启动下面的第二个工作流程:

name: Second workflow

on:
  workflow_dispatch:
    inputs:
      input1:
        description: 'input1 to process'
        required: true

jobs:
  deploy:
    runs-on: ubuntu-latest

    steps:
      - name: Use input 1
        run: echo "INPUT received from workflow one '${{github.event.client_payload.input1 }}'"

      - name: INIT third WORKFLOW
        run: |
          curl -X POST https://api.github.com/repos/OWNER/REPO/dispatches \
          -H 'Accept: application/vnd.github.everest-preview+json' \
          -u ${{ secrets.ACCESS_TOKEN }} \
          --data '{"event_type": "EVENT_NAME", "client_payload": { "input1": "value1", "input2": "value2"  }}'

第二个工作流程的最后一步将向第三个工作流程发送请求。

name: Third workflow

on:
  workflow_dispatch:
    inputs:
      input1:
        description: 'input1 to process'
        required: true
      input2:
        description: 'input2 to process'
        required: true

jobs:
  deploy:
    runs-on: ubuntu-latest

    steps:
      - name: Use input 1
        run: echo "INPUT received from workflow two '${{github.event.client_payload.input1 }}'"

      - name: Use input 2
        run: echo "INPUT received from workflow two '${{github.event.client_payload.input2 }}'"

如您所见,此解决方案的升级效果不是很好,因为您需要向添加到链中的每个新工作流程添加新输入。

这就是为什么使用某些工件的原因,正如@Azeem在评论中所建议的那样可能有用(即使有点复杂)。

© www.soinside.com 2019 - 2024. All rights reserved.