Github 操作 powershell 退出代码和错误操作首选项

问题描述 投票:0回答:1

我正在尝试在 Github Action 工作流程中从 git 获取最新标签 (

runs-on: windows-2022
)。

      - name: Get the latest tag from Git
        shell: pwsh
        run: |
          try {
            $LATEST_TAG = git describe --tags --abbrev=0
          } catch {
            Write-Host "Failed to get the latest tag from Git. Setting LATEST_TAG to 'none'."
            $LATEST_TAG = "none"
          }
          echo "LATEST_TAG=$LATEST_TAG" >> $env:GITHUB_ENV  # Save latest tag to the environment file

问题是,只要历史记录中没有标签,

git describe
就会退出并显示错误代码。这应该不是问题,因为我用 try/catch 块包含代码。

failing github action step

本文档https://docs.github.com/en/actions/writing-workflows/workflow-syntax-for-github-actions#exit-codes-and-error-action-preference指出这是由于

$ErrorActionPreference
由 Github 设置为
stop

我似乎可以绕过 Github 前置和附加到脚本中的代码来避免这种行为,但我无法使其正常工作。

如果

git describe
返回错误,如何避免停止整个过程?

git powershell github github-actions
1个回答
0
投票

native 类型的命令(如

git
)默认情况下不会像 PowerShell 命令那样产生错误。了解差异的起点可能是 $PSNativeCommandUseErrorActionPreference
文档。

因此,如果您希望本机命令产生可以使用 try-catch 语句捕获的错误,则可以

  1. $ErrorActionPreference
    设置为“停止”。
  2. $PSNativeCommandUseErrorActionPreference
    设置为
    $true

如果您根据 文档选择退出内置 shell,那就足够了:

用户始终可以通过不使用内置 shell 来选择退出,并根据需要提供自定义 shell 选项,例如:

pwsh -File {0}
powershell -Command "& '{0}'"

如果您坚持使用内置 shell,您可能必须在 catch 子句中将

$LASTEXITCODE
重置为 0,因为根据 相同的文档

...操作状态反映了脚本的最后退出代码。

© www.soinside.com 2019 - 2024. All rights reserved.