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

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

我有一个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

字符串

pjngdqdw

pjngdqdw1#

在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}}'


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

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


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

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


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

相关问题