Azure DevOps管道传递参数报错:RESOURCEGRP未绑定变量求助
解决Azure DevOps AzureCLI@1任务中RESOURCEGRP未绑定变量的问题
问题原因
AzureCLI@1任务的arguments字段是用于传递给az命令的参数,并非用来定义Shell脚本可调用的环境变量。你在inlineScript中使用$RESOURCEGRP时,该变量未被定义,再加上脚本开头的set -u(包含在set -euo pipefail中)会严格检查未绑定变量,因此触发错误。
解决方法
以下两种方案可直接解决问题:
方案1:在脚本内直接定义变量
删除arguments字段,在Shell脚本开头直接声明RESOURCEGRP变量:
- task: AzureCLI@1 displayName: 'Run helmfile - diff' inputs: azureSubscription: ${{ parameters.keyvault_service_connection }} scriptLocation: 'inlineScript' inlineScript: | set -euo pipefail set -x RESOURCEGRP='TEST-RG' # 直接在脚本内定义变量 SERVICEHELM=$(mktemp) $(Build.SourcesDirectory)/pipeline-templates/build/bin/resolve_keyvaults_in_helm.sh ${{ parameters.keyvault_name }} ${{ parameters.env }}.yaml > $SERVICEHELM cp $SERVICEHELM ${{ parameters.env }}.yaml rm -f $SERVICEHELM echo $RESOURCEGRP helmfile -b /usr/local/bin/helm3 -e ${{ parameters.env }} repos # helmfile -b /usr/local/bin/helm3 -e ${{ parameters.env }} diff workingDirectory: ${{ parameters.environment_directory }}
方案2:通过环境变量传递变量
利用Azure DevOps任务的env字段定义环境变量,适用于需要从外部参数传入值的场景:
- task: AzureCLI@1 displayName: 'Run helmfile - diff' inputs: azureSubscription: ${{ parameters.keyvault_service_connection }} scriptLocation: 'inlineScript' inlineScript: | set -euo pipefail set -x SERVICEHELM=$(mktemp) $(Build.SourcesDirectory)/pipeline-templates/build/bin/resolve_keyvaults_in_helm.sh ${{ parameters.keyvault_name }} ${{ parameters.env }}.yaml > $SERVICEHELM cp $SERVICEHELM ${{ parameters.env }}.yaml rm -f $SERVICEHELM echo $RESOURCEGRP helmfile -b /usr/local/bin/helm3 -e ${{ parameters.env }} repos # helmfile -b /usr/local/bin/helm3 -e ${{ parameters.env }} diff workingDirectory: ${{ parameters.environment_directory }} env: RESOURCEGRP: 'TEST-RG' # 可替换为参数:${{ parameters.resource_group }}
内容的提问来源于stack exchange,提问作者Jananath Banuka
相关产品推荐
相关产品推荐

