在GitHub Actions中,我可以返回一个值以稍后用作条件吗



我正在为我的一个项目设置GitHub Actions作为CI,整个构建过程基本上是一个PowerShell脚本,由环境变量驱动。

这既是为了最大限度地减少供应商锁定,也是为了确保我可以用几乎相同的流程在本地运行构建。

现在,我的构建脚本确定了一些内容,并将其放入环境变量中——特别是,我有一个MH_IS_PROD_BUILD变量,它是True或False,并确定我推送到哪个nuget包存储库。

然而,当运行shell的步骤完成时,环境变量就不存在了,因为在新的环境中运行更多的步骤。

想要做的事情是这样的(缩写(:

steps:
- name: Run build script
id: pwshbuild
shell: pwsh
run: |
cd scripts
./build.ps1
# The above sets $Env:MH_IS_PROD_BUILD to either True or False
- name: Push Publish to GPR (Dev Package)
if: steps.pwshbuild.outputs.MH_IS_PROD_BUILD == 'False'
shell: pwsh
run: |
# omitted: determine $nupkgPath
nuget push $nupkgPath -Source "GPR" -SkipDuplicate
- name: Push Publish to Nuget.org (Release Package)
if: steps.pwshbuild.outputs.MH_IS_PROD_BUILD == 'True' 
shell: pwsh
run: |
# omitted: determine $nupkgPath
nuget push $nupkgPath -Source "NugetOrg" -SkipDuplicate

输出似乎是我所需要的,但这似乎需要创建一个自定义操作?

当然,上面的内容不起作用(因此提出要求(。所以我想知道,最好的前进道路是什么?

  • 我可以从PowerShell设置步骤的输出吗?(首选(
  • 我是否必须创建一个自定义操作来封装对build.ps1的调用,以便通过输出返回内容

我认为您可以通过将Powershell的输出回显到控制台来设置它们。Powershell有一个别名映射回显到Write-Output

jobs:
windows-test:
runs-on: windows-latest
steps:
- uses: actions/checkout@v1
- name: Set outputs
id: vars
shell: pwsh
run: echo "::set-output name=production::true"
- name: Check outputs
shell: pwsh
run: echo ${{ steps.vars.outputs.production }}

参考:https://help.github.com/en/github/automating-your-workflow-with-github-actions/development-tools-for-github-actions#set-输出参数集输出

除了通过peterevans回答外,您仍然可以使用环境变量作为条件,只要它们是通过:set env"command"设置的

示例:

- run:   |
if [ -f FileMightNotExists.txt ]; then
echo ::set-env name=HAVE_FILE::true
fi
shell: bash
- run: echo "I have file!"
if:  env.HAVE_FILE == 'true'

如前所述,已经有:设置输出,所以这主要是品味问题。

使::set env更易于使用(在我看来(的是,您不需要为步骤设置id(较少键入(,引用vars要短得多(再次键入较少(,您添加的所有变量都将为每个步骤列出(折叠在Run块内,在尝试查找工作流中的错误时很有用(,以及。。。它最终只是一个正则变量,它可能更容易使用,取决于shell。

最新更新