我有一个 DevOps 流水线,给出了这个错误:
我用于此的步骤是:
我正在使用的配置可以动态查找“订阅名称”。资源授权问题: “流水线无效。Job ExecutionTerraform: 步骤 AzureCLI 输入 connectedServiceNameARM 引用了服务连接 Azure: $(subscriptionName),但该服务连接不存在或未被授权使用。有关授权详细信息,请参阅 https://aka.ms/yamlauthz。
我用于此的步骤是:
- bash: |
# pull the subscription data
# ... read data into local variables
# set the shared variables
echo "##vso[task.setvariable variable=subscriptionId]${SUBSCRIPTION_ID}"
echo "##vso[task.setvariable variable=subscriptionName]${SUBSCRIPTION_NAME}"
我尝试通过模板调用Azure CLI:
- template: execution-cli.yml
parameters:
azureSubscriptionId: $(subscriptionId)
azureSubscriptionName: $(subscriptionName)
我的CLI步骤使用的模板内部:
steps:
- task: AzureCLI@2
displayName: Test CLI
inputs:
azureSubscription: "ARMTest ${{ parameters.azureSubscriptionName }}"
scriptType: bash
scriptLocation: inlineScript
inlineScript: |
az --version
addSpnToEnvironment: true
useGlobalConfig: true
看起来Pipelines试图在没有注意到其中有一个变量的情况下预先检查授权。 我在其他管道中也这样做,没有任何问题,我不确定在这种特殊情况下有什么不同。
更新1:我在其他地方使用的工作模板
完整模板:
parameters:
- name: environment
type: string
jobs:
- job: AKSCredentials
displayName: "AKS Credentials Pull"
steps:
- task: AzureCLI@2
displayName: AKS Credentials
inputs:
azureSubscription: "Azure: testbed-${{ parameters.environment }}"
scriptType: bash
scriptLocation: inlineScript
inlineScript: az aks get-credentials -g testbed-${{ parameters.environment }} -n testbed-${{ parameters.environment }}-aks
addSpnToEnvironment: true
useGlobalConfig: true
${{ parameters.environment }}
这会起作用,如果你没有将运行时设定的变量作为值传递。 - Krzysztof Madej