el *_*00b 5 azure-devops azure-pipelines
我的 DevOps 管道给了我这个错误:
存在资源授权问题: “管道无效。作业执行Terraform:步骤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}"
Run Code Online (Sandbox Code Playgroud)
从那里我尝试通过模板调用 Azure CLI:
- template: execution-cli.yml
parameters:
azureSubscriptionId: $(subscriptionId)
azureSubscriptionName: $(subscriptionName)
Run Code Online (Sandbox Code Playgroud)
在模板内,我的 CLI 步骤使用:
steps:
- task: AzureCLI@2
displayName: Test CLI
inputs:
azureSubscription: "ARMTest ${{ parameters.azureSubscriptionName }}"
scriptType: bash
scriptLocation: inlineScript
inlineScript: |
az --version
addSpnToEnvironment: true
useGlobalConfig: true
Run Code Online (Sandbox Code Playgroud)
看起来 Pipelines 正在尝试先发制人地检查授权,而没有注意到其中存在变量。我在这里做错了什么,导致 Azure 在错误的时间尝试解决该问题?
我在其他管道中执行此操作没有出现任何问题,并且我不确定在这个特定实例中有何不同。
完整模板:
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
Run Code Online (Sandbox Code Playgroud)
这是不可能的,因为需要在编译时知道天蓝色订阅。您在运行时设置变量。
这里解释了类似情况的问题:
服务连接或 azure 订阅不支持运行时变量。在代码示例中,您引用的是 AzureSubscription 变量,该变量将在运行时(但不在保存时)初始化。您的语法是正确的,但您需要将 AzureSubscription 变量设置为变量的一部分。
如果您定义变量如下:
variables:
subscriptionId: someValue
subscriptionName: someValue
Run Code Online (Sandbox Code Playgroud)
然后你就会使用它
- template: execution-cli.yml
parameters:
azureSubscriptionId: $(subscriptionId)
azureSubscriptionName: $(subscriptionName)
Run Code Online (Sandbox Code Playgroud)
它应该有效。但由于您在运行时设置了变量,因此会导致您的问题。
| 归档时间: |
|
| 查看次数: |
3330 次 |
| 最近记录: |