未使用 $GITHUB_OUTPUT 设置值

Mr *_*rth 17 powershell github github-actions

我之前一直使用 set-output 来设置值,但现在我们收到“已弃用的功能”消息,并且我按照规定使用 $GITHUB_OUTPUT 。

我替换了所有实例

   run: echo ::set-output name=Key::Value
Run Code Online (Sandbox Code Playgroud)

   run: "Key=Value" >> $GITHUB_OUTPUT
Run Code Online (Sandbox Code Playgroud)

但密钥似乎没有设置。

我的运行器运行在 Windows 版本 2.299.1 上,工作流程使用 CMD。所有对 set-output 的调用都有效,而所有使用 $GITHUB_OUTPUT 的调用都无效。

简化的操作代码

defaults:
run:
shell: cmd

jobs:
  EnvSetup:
    name: Publish Base Environment Vars
    runs-on: [self-hosted, Windows, myLabel]
    outputs:
      var_Project: ${{ steps.set-Project.outputs.Project }}
      var_Val1: ${{ steps.set-Val1.outputs.Val1 }}
      var_Val2: ${{ steps.set-Val2.outputs.Val2 }}
    steps:
      - name: Project
        id: set-Project
        run: echo ::set-output name=Project::Larry

      - name: Val1
        id: set-Val1
        run: echo "Val1=Curly" >> $GITHUB_OUTPUT

      - name: Val2
        id: set-Val2
        run: echo "Val2=Moe" >> $GITHUB_OUTPUT

...

  Testing:
    name: ShowStuff
    runs-on: [self-hosted, Windows, myLabel]
    needs: [EnvSetup]
    env:
      MyProject: ${{ needs.EnvSetup.outputs.var_Project }}_ABC
    steps:
      - name: Print environment variables
        run: |
          echo "Project: ${{ needs.EnvSetup.outputs.var_Project }}" ^
          echo "MyProject: ${{ env.MyProject }}" ^
          echo "Val1: ${{ needs.EnvSetup.outputs.var_Val1 }}" ^
          echo "Val2: ${{ needs.EnvSetup.outputs.var_Val2 }}"
Run Code Online (Sandbox Code Playgroud)

输出:

echo "Project: Larry"
echo "MyProject: Larry_ABC"
echo "Val1: "
echo "Val2: "
Run Code Online (Sandbox Code Playgroud)

从我所看到的一切来看,引用值的方式没有改变,只是集合改变了。

有没有其他人尝试过使用CMD?如果有必要,我会使用 PowerShell,但如果我可以避免的话,这并不是一个小变化。

jes*_*ing 30

官方文档已更新,但您需要切换到页面顶部的“PowerShell”才能查看 PowerShell 语法中的所有示例:

在此输入图像描述

如果您正在寻找Windows Shell 语法来发出 GitHub Actions 命令,我已经撰写了一篇博客来介绍该语法。


Windows 默认使用 PowerShell Core 运行脚本任务,而不是 bash。因此,您需要使用 PowerShell 语法,或shell: bash在脚本操作上设置属性。

  - name: Val2
    id: set-Val2
    run: echo "Val2=Moe" >> $GITHUB_OUTPUT
    shell: bash
Run Code Online (Sandbox Code Playgroud)

在 PowerShell 中使用这些命令时,请确保重定向到$env:GITHUB_OUTPUT

  - name: Val2
    id: set-Val2
    run: echo "Val2=Moe" >> $env:GITHUB_OUTPUT
    shell: pwsh
Run Code Online (Sandbox Code Playgroud)

我还在shell: pwsh上面明确添加了,因为需要告诉“旧 PowerShell”写入 UTF-8:

  - shell: powershell
    run: |
      "mypath" | Out-File -FilePath $env:GITHUB_OUTPUT -Encoding utf8 -Append
Run Code Online (Sandbox Code Playgroud)

使用时,shell: cmd您需要使用%GITHUB_OUTPUT%,并将代码页更改为 Unicode:

@chcp 65001>nul
echo Val2=Moe >> %GITHUB_OUTPUT%
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述