环境变量并不总是在 GitHub 操作工作流文件中扩展
Environment variables not always being expanded in GitHub Actions workflow file
我有一个 GitHub 操作工作流文件,其中的环境变量并不总是被扩展。
根据评论,环境变量的使用可以正常工作,直到最后一次在 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
Shell 在 YAML 中分配值时不会发生参数扩展。也就是说,在这之后
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 操作工作流文件,其中的环境变量并不总是被扩展。
根据评论,环境变量的使用可以正常工作,直到最后一次在 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
Shell 在 YAML 中分配值时不会发生参数扩展。也就是说,在这之后
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
中设置它。