如何在主工作流中获取可重用工作流的输出变量。

huangapple go评论84阅读模式
英文:

How to get reusable workflow output variables in main workflow

问题

My main workflow mainjob1调用一个可重用的工作流reusable_workflow_job,然后继续执行它的mainjob2

工作流级别的变量XML_PATH传递给并被可重用的工作流使用,该工作流通过调用Powershell脚本getXMLkey-value.ps1生成一个变量$returnvalue,即app_name=myapp1,然后使用echo "$returnvalue" >> $env:GITHUB_OUTPUT将其设置为GITHUB_OUTPUT

在可重用的工作流中,成功打印了App Name in reusable workflow: myapp1,如下所示:

  1. App Name in reusable workflow: myapp1

然后,流程返回到主工作流mainjob2,在这里我希望现在打印相同的app_name,即myapp1,但是在这里不会打印任何内容:

  1. echo "App name in mainjob2: ${{ needs.reusuable_workflow_job.outputs.app_name }}"

如何在主工作流的mainjob2中打印app_namemyapp1

英文:

My main workflow mainjob1 calls a reusable workflow reusable_workflow_job and then proceeds to execute its mainjob2

Workflow level variable XML_PATH is passed to and used by reusable workflow which generates a variable $returnvalue" i.e. app_name=myapp1 by calling a powershell getXMLkey-value.ps1 and is set to GITHUB_OUTPUT using echo "$returnvalue" >> $env:GITHUB_OUTPUT.

Inside the reusable workflow the App Name in reusable workflow: ${{ steps.run-scriptsx.outputs.app_name }}" is printed successfully as App Name in reusable workflow: myapp1

The flow then returns to main workflow mainjob2 where I wish to now print the same app_name i.e myapp1 but it does not print anything here: echo "App name in mainjob2: ${{ needs.reusuable_workflow_job.outputs.app_name }}"

How can I print app_name as myapp1 in main workflow's mainjob2?


Below are my workflow files:

Main workflow file:

  1. env:
  2. XML_PATH: "\\\\remotehost7\$D\\Logs\\test.xml"
  3. on:
  4. push: main
  5. jobs:
  6. mainjob1:
  7. runs-on: "mylocal_windows"
  8. outputs:
  9. userxmlpath: ${{ steps.step1.outputs.userxmlpath }}
  10. steps:
  11. - name: Print variable
  12. id: step1
  13. run: |
  14. echo "user XML path: ${{ env.XML_PATH }}"
  15. echo "userxmlpath=${{ env.XML_PATH }}">> $env:GITHUB_OUTPUT
  16. reusuable_workflow_job:
  17. needs:
  18. - mainjob1
  19. uses: knowyrtech/betech/.github/workflows/getvalue.yml@mm365
  20. with:
  21. xml_Path: "${{ needs.mainjob1.outputs.userxmlpath }}"
  22. secrets: inherit
  23. mainjob2:
  24. needs:
  25. - reusuable_workflow_job
  26. runs-on: "mylocal_windows"
  27. steps:
  28. - name: Back to main workflow
  29. run: |
  30. echo "App name in mainjob2: ${{ needs.reusuable_workflow_job.outputs.app_name }}"

Reusable workflow:

  1. name: Read XML
  2. on:
  3. workflow_call:
  4. inputs:
  5. xml_Path:
  6. required: true
  7. default: '\\remotehost5$D\Logs\test.xml'
  8. jobs:
  9. Extract-keys:
  10. runs-on: "mylocal_windows"
  11. steps:
  12. - name: Checkout reusable repo
  13. uses: actions/checkout@v3
  14. with:
  15. repository: knowyrtech/betech
  16. ref: mm365
  17. path: "${{ github.workspace }}/betech"
  18. token: ${{ secrets.my_automated_token }}
  19. - name: Call powershell
  20. id: run-scriptsx
  21. run: |
  22. set-location "${{ github.workspace}}\betech\scripts"
  23. $returnvalue=& "./getXMLkey-value.ps1"
  24. echo "$returnvalue"
  25. echo "$returnvalue" >> $env:GITHUB_OUTPUT
  26. - name: Inside reusable workflow
  27. run: |
  28. echo "App Name in reusable workflow: ${{ steps.run-scriptsx.outputs.app_name }}"

答案1

得分: 1

根据官方文档,您需要将 outputs 配置添加到您的 Read XML 可重用工作流程中的 Extract-keys 作业,以及在 workflow_call 级别:

  1. on:
  2. workflow_call:
  3. # 将工作流程的输出映射到作业的输出
  4. outputs:
  5. app_name:
  6. description: "应用程序名称描述"
  7. value: ${{ jobs.Extract-keys.outputs.app_name }}
  8. jobs:
  9. Extract-keys:
  10. runs-on: "mylocal_windows"
  11. outputs: # 在这里添加
  12. app_name: ${{ steps.run-scriptsx.outputs.returnvalue }}
  13. steps:
  14. [ ... ]
  15. - name: 调用 PowerShell
  16. id: run-scriptsx
  17. run: |
  18. set-location "${{ github.workspace}}\betech\scripts"
  19. $returnvalue=& "./getXMLkey-value.ps1"
  20. echo "$returnvalue"
  21. echo "$returnvalue" >> $env:GITHUB_OUTPUT

否则,您将无法在 mainjob2 中按预期访问输出值:

  1. jobs:
  2. [ ... ]
  3. mainjob2:
  4. needs:
  5. - reusuable_workflow_job
  6. runs-on: "mylocal_windows"
  7. steps:
  8. - name: 返回主工作流程
  9. run: |
  10. echo "主job2中的应用程序名称: ${{ needs.reusable_workflow_job.outputs.app_name }}"

我在这里创建了一个示例:

注意:这个其他线程 类似,并可能提供一些额外的见解。

英文:

According to the official documentation, you need to add the outputs configuration to your Read XML reusable workflow, in the Extract-keys job, as well as at the workflow_call level:

  1. on:
  2. workflow_call:
  3. # Map the workflow outputs to job outputs
  4. outputs:
  5. app_name:
  6. description: "app name description"
  7. value: ${{ jobs.Extract-keys.outputs.app_name }}
  8. jobs:
  9. Extract-keys:
  10. runs-on: "mylocal_windows"
  11. outputs: # HERE
  12. app_name: ${{ steps.run-scriptsx.outputs.returnvalue }}
  13. steps:
  14. [ ... ]
  15. - name: Call powershell
  16. id: run-scriptsx
  17. run: |
  18. set-location "${{ github.workspace}}\betech\scripts"
  19. $returnvalue=& "./getXMLkey-value.ps1"
  20. echo "$returnvalue"
  21. echo "$returnvalue" >> $env:GITHUB_OUTPUT

Otherwise, you won't be able to access the output value as expected in your mainjob2:

  1. jobs:
  2. [ ... ]
  3. mainjob2:
  4. needs:
  5. - reusuable_workflow_job
  6. runs-on: "mylocal_windows"
  7. steps:
  8. - name: Back to main workflow
  9. run: |
  10. echo "App name in mainjob2: ${{ needs.reusable_workflow_job.outputs.app_name }}"

I've made an example here:

Observation: This other thread is similar and might give some insights as well)

huangapple
  • 本文由 发表于 2023年5月23日 00:42:31
  • 转载请务必保留本文链接:https://go.coder-hub.com/76308317.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定