Windows 托管运行器上 Github Actions 的输出

Yog*_*fel 3 powershell github github-actions

我想在 Windows 自托管运行器上访问之前作业的步骤结果。为了做到这一点,我使用如下输出变量,效果很好(在最后一步中打印“成功”)。

name: Debug workflow

on: workflow_dispatch
jobs:
  job1:
    runs-on: tester-1
    outputs:
      output1: ${{ steps.step1.outputs.MY_OUTPUT }}
    steps:
      - name: Checkout with submodules
        id: checkout_step
        uses: actions/checkout@v3
      - name: Write variable to output
        id: step1
        run: echo '::set-output name=MY_OUTPUT::${{ steps.checkout_step.outcome }}'
  job2:
    runs-on: tester-1
    needs: job1
    env:
      OUTPUT1: '${{needs.job1.outputs.output1}}'
    steps:
    - name: Print outputs from previous 
      run: echo ${{ env.OUTPUT1 }}
Run Code Online (Sandbox Code Playgroud)

然而::set-output 已被弃用,所以我想转换为正确的方法。根据另一个问题,我已经尝试将我的替换echo '::set-output name=MY_OUTPUT::${{ steps.checkout_step.outcome }}'

  1. echo "MY_OUTPUT=${{ steps.checkout_step.outcome }}" >> $env:GITHUB_ENV
  2. echo "MY_OUTPUT=${{ steps.checkout_step.outcome }}" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append

使用任一版本都会导致打印步骤和空变量出错OUTPUT1。我究竟做错了什么?

Run echo 
  echo 
  shell: C:\Windows\System32\WindowsPowerShell\v1.0\powershell.EXE -command ". '{0}'"
  env:
    OUTPUT1: 
Write-Output : Cannot process command because of one or more missing mandatory parameters: InputObject.
At C:\tester-1-runner\_work\_temp\a19d4f45-cf0e-4ddb-b62e-4f05a2f00461.ps1:2 char:1
+ echo
+ ~~~~
    + CategoryInfo          : InvalidArgument: (:) [Write-Output], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : MissingMandatoryParameter,Microsoft.PowerShell.Commands.WriteOutputCommand
 
Error: Process completed with exit code 1.
Run Code Online (Sandbox Code Playgroud)

Akn*_*sis 6

您混淆了输出和环境变量。

填充环境变量的正确语法shell: bash是:

echo "foo=bar" >> $GITHUB_ENV
Run Code Online (Sandbox Code Playgroud)

对于输出:

echo "foo=bar" >> $GITHUB_OUTPUT
Run Code Online (Sandbox Code Playgroud)

当您使用 Windows 运行程序时,您的解决方案应该是$ENV:GITHUB_OUTPUT

run: echo "MY_OUTPUT=${{ steps.checkout_step.outcome }}" >> $ENV:GITHUB_OUTPUT
Run Code Online (Sandbox Code Playgroud)

之后,echo应该可以正常工作:

echo ${{ env.OUTPUT1 }}
Run Code Online (Sandbox Code Playgroud)

或者,

echo $ENV:OUTPUT1
Run Code Online (Sandbox Code Playgroud)

请参阅这些线程了解更多详细信息: