我有多个相互依赖的工作流程。第一个工作流程将生成一些 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?
上面评论中分享的
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在评论中所建议的那样可能有用(即使有点复杂)。