azure 环境变量不总是在GitHub操作工作流文件中展开

deikduxw  于 2023-11-21  发布在  Git
关注(0)|答案(1)|浏览(180)

我有一个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.
为什么除了最后一步之外,变量扩展在任何地方都能正确工作?我如何修复它?

  1. on: [push]
  2. name: Azure ARM
  3. jobs:
  4. build-and-deploy:
  5. runs-on: ubuntu-latest
  6. env:
  7. resourceGroupName: rg-blue-${GITHUB_REF#refs/heads/}
  8. resourceGroupLocation: 'uksouth'
  9. - name: Use the custom ENV variable
  10. run: |
  11. echo "${{ env.resourceGroupName}}"
  12. echo ${{ env.resourceGroupName}}
  13. // these two work perfectly fine and prints "rg-blue-my-branch-name" etc
  14. - uses: actions/checkout@master
  15. - uses: azure/login@v1
  16. with:
  17. creds: ${{ secrets.AZURE_CREDENTIALS }}
  18. - uses: azure/CLI@v1
  19. with:
  20. inlineScript: |
  21. #!/bin/bash
  22. // works perfectly fine here too
  23. if $(az group exists --name ${{ env.resourceGroupName }}) ; then
  24. echo "Azure resource group ${{ env.resourceGroupName }} already exists, skipping creation..."
  25. else
  26. az group create --name ${{ env.resourceGroupName }} --location ${{ env.resourceGroupLocation }}
  27. echo "Azure resource group ${{ env.resourceGroupName }} created"
  28. fi
  29. # Deploy Bicep file
  30. - name: deploy
  31. uses: azure/arm-deploy@v1
  32. with:
  33. subscriptionId: ${{ secrets.AZURE_SUBSCRIPTION }} <- this one works fine!
  34. resourceGroupName: "${{ env.resourceGroupName }}" <- Error: Resource Group rg-blue-$***GITHUB_REF#refs/heads/*** could not be found.
  35. template: infrastructure/blue.bicep
  36. parameters: storagePrefix=mystore
  37. failOnStdErr: false

字符串

pjngdqdw

pjngdqdw1#

在YAML中赋值时,不会发生Shell参数扩展。

  1. env:
  2. resourceGroupName: rg-blue-${GITHUB_REF#refs/heads/}

字符串
resourceGroupName的值是文字字符串rg-blue-${GITHUB_REF#refs/heads/}。它 * 似乎 * 工作,因为当你使用

  1. echo "${{ env.resourceGroupName}}"


这被替换为

  1. echo "rg-blue-${GITHUB_REF#refs/heads/}"


然后 * shell* 执行扩展。您可以使用

  1. echo '${{ env.resourceGroupName}}'


而是抑制壳参数扩展。
要修复,您可以使用单独的步骤来正确设置环境变量:

  1. - name: Set env variable
  2. run: |
  3. echo "resourceGroupName=${GITHUB_REF#refs/heads/}" >> "$GITHUB_ENV"


而不是预先在env中设置它。
或者,你可以使用github.ref_name,这是已经缩短的Git ref:

  1. env:
  2. resourceGroupName: rg-blue-${{ github.ref_name }}


这在环境中也可以作为$GITHUB_REF_NAME使用。

展开查看全部

相关问题