GitHub Actions - 重复使用其他可复用工作流程的输出

18

我不确定是否可能,但我试图在同一调用工作流程的另一个可重用工作流程中使用输出。请参考以下配置:

调用者工作流程:

jobs:
  call-workflow-calver:
    uses: ./.github/workflows/called-workflow1.yaml
    secrets: inherit

  call-workflow-echo:
    needs: call-workflow-calver
    uses: ./.github/workflows/called-workflow2.yaml
    secrets: inherit

创建CalVer标签的工作(它作为操作的一部分输出为$VERSION)。 调用工作流1:
...
jobs:
  calver:
    name: Create CalVer tag
...
    steps:
      - name: Calver tag
        uses: StephaneBour/actions-calver@1.4.4
        if: ${{ github.ref == 'refs/heads/main' }}
        id: calVer
        with:
          date_format: "%Y-%m-%d"
          release: ${{ github.event_name == 'push' && github.ref == 'refs/heads/main' }}
...

尝试在其他调用工作流中使用CalVer $VERSION输出 被调用的工作流2:
...
- name: Echo
  run: |
    echo ${{needs.calver.outputs.VERSION}}
...

基本概念是我试图在第一个可重用的工作流程中使用输出,在第二个工作流程中设置CalVer版本,以使其成为图像版本。 最终,我将在第三个可重用的工作流程中部署指定的图像。 如果可能,那就太好了!希望这一切都有点意义,但如果需要澄清任何事情,请告诉我!非常感谢!
1个回答

32
根据官方文档,您现在可以声明可重用工作流的输出。
这些输出与作业输出类似,并且一旦您声明输出,就可以通过needs.<reusable>.outputs.<output>格式使用。
示例
1. 可重用工作流配置:
name: Reusable workflow

on:
  workflow_call:
    # Map the workflow outputs to job outputs
    outputs:
      firstword:
        description: "The first output string"
        value: ${{ jobs.example_job.outputs.output1 }}
      secondword:
        description: "The second output string"
        value: ${{ jobs.example_job.outputs.output2 }}

jobs:
  example_job:
    name: Generate output
    runs-on: ubuntu-latest
    # Map the job outputs to step outputs
    outputs:
      output1: ${{ steps.step1.outputs.firstword }}
      output2: ${{ steps.step2.outputs.secondword }}
    steps:
      - id: step1
        run: echo "firstword=hello" >> $GITHUB_OUTPUT
      - id: step2
        run: echo "secondword=world" >> $GITHUB_OUTPUT

2. 使用可重用性的工作流程:

name: Call a reusable workflow and use its outputs

on:
  workflow_dispatch:

jobs:
  job1:
    uses: octo-org/example-repo/.github/workflows/called-workflow.yml@v1

  job2:
    runs-on: ubuntu-latest
    needs: job1
    steps:
      - run: echo ${{ needs.job1.outputs.firstword }} ${{ needs.job1.outputs.secondword }}

请注意,如果使用矩阵策略执行设置输出的可重用工作流,则输出将是矩阵中最后一个成功完成且实际设置值的可重用工作流所设置的输出。这意味着,如果最后一个成功完成的可重用工作流为其输出设置了空字符串,并且倒数第二个成功完成的可重用工作流为其输出设置了实际值,则输出将包含倒数第二个成功完成的可重用工作流的值。
我在此处使用此工作流作为示例here,如果您想要检查工作流运行的日志。

2
啊,太棒了!不确定我怎么错过了这个!最近我的谷歌搜索能力似乎有点差 :D 我会尝试一下 :) - Kris

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