环境变量并不总是在 GitHub Actions 工作流文件中展开
Posted
技术标签:
【中文标题】环境变量并不总是在 GitHub Actions 工作流文件中展开【英文标题】:Environment variables not always being expanded in GitHub Actions workflow file 【发布时间】:2021-10-18 20:39:23 【问题描述】:我有一个 GitHub Actions 工作流文件,其中并不总是扩展环境变量。
根据 cmets,环境变量的使用可以正常工作,直到它在 name: deploy
部分中的最后一次使用,它不会扩展并从字面上变成字符串 rg-blue-$***GITHUB_REF#refs/heads/***
,而不是它所在的正确扩展的字符串前几节:rg-blue-my-branch-name
.
这会导致 Azure ARM 错误:Error: Resource Group rg-blue-$***GITHUB_REF#refs/heads/*** could not be found.
为什么除了最后一步之外,变量扩展在任何地方都能正常工作?我该如何解决?
on: [push]
name: Azure ARM
jobs:
build-and-deploy:
runs-on: ubuntu-latest
env:
resourceGroupName: rg-blue-$GITHUB_REF#refs/heads/
resourceGroupLocation: 'uksouth'
- name: Use the custom ENV variable
run: |
echo "$ env.resourceGroupName"
echo $ env.resourceGroupName
// these two work perfectly fine and prints "rg-blue-my-branch-name" etc
- uses: actions/checkout@master
- uses: azure/login@v1
with:
creds: $ secrets.AZURE_CREDENTIALS
- uses: azure/CLI@v1
with:
inlineScript: |
#!/bin/bash
// works perfectly fine here too
if $(az group exists --name $ env.resourceGroupName ) ; then
echo "Azure resource group $ env.resourceGroupName already exists, skipping creation..."
else
az group create --name $ env.resourceGroupName --location $ env.resourceGroupLocation
echo "Azure resource group $ env.resourceGroupName created"
fi
# Deploy Bicep file
- name: deploy
uses: azure/arm-deploy@v1
with:
subscriptionId: $ secrets.AZURE_SUBSCRIPTION <- this one works fine!
resourceGroupName: "$ env.resourceGroupName " <- Error: Resource Group rg-blue-$***GITHUB_REF#refs/heads/*** could not be found.
template: infrastructure/blue.bicep
parameters: storagePrefix=mystore
failOnStdErr: false
【问题讨论】:
【参考方案1】:在 YAML 中分配值时不会发生 Shell 参数扩展。也就是说,在这之后
env:
resourceGroupName: rg-blue-$GITHUB_REF#refs/heads/
resourceGroupName
的值是字符串rg-blue-$GITHUB_REF#refs/heads/
。它似乎可以工作,因为当您使用时
echo "$ env.resourceGroupName"
替换为
echo "rg-blue-$GITHUB_REF#refs/heads/"
然后 shell 进行扩展。您可以使用
进行测试echo '$ env.resourceGroupName'
而不是抑制shell参数扩展。
要修复,您可以使用单独的步骤来正确设置环境变量:
- name: Set env variable
run: |
echo "resourceGroupName=$GITHUB_REF#refs/heads/" >> "$GITHUB_ENV"
而不是事先在env
中设置。
【讨论】:
以上是关于环境变量并不总是在 GitHub Actions 工作流文件中展开的主要内容,如果未能解决你的问题,请参考以下文章
在 Github Actions 中注入 .env.local 文件或自定义环境变量集到 yarn build
使用 GitHub Actions 在 .net 应用程序中填充特定于环境的变量
使用加密的 SECRET_KEY 作为环境变量的 GitHub Actions 不起作用
使用 jest-puppeteer 在 GitHub Actions 中构建和启动 2 个应用程序会导致读取环境变量时出现问题