更改Azure YAML管道会导致对资源的授权丢失

时间:2020-05-20 22:06:17

标签: azure azure-devops azure-pipelines azure-pipelines-yaml

在使用YAML编写的有效Azure管道中,我曾多次遇到这种情况。然后,我更改管道,然后得到错误There was a resource authorization issue。通常,我删除管道,重新创建它,然后它可以工作。但是,现在它不起作用,并且我不断收到以下错误:

Azure DevOps YAML Pipeline Authorization error after modification

因此,我单击小按钮,它弹出,说资源已被授权。我尝试再次运行管道,并且遇到相同的错误。

我是帐户/收款/组织管理员,最初创建了库组,在该组中将其设置为启用对所有管道的访问。我尝试重命名管道,并多次将其重新创建为相同的错误。没有将管道恢复到原始状态,我该怎么办?

-编辑-

只需将分支重置为早期版本的管道即可。但是,仍然不知道为什么将步骤移到阶段和乔布斯失败了。

-编辑-

下面将是我最初使用的YAML及其更新的版本。当更新的版本出现资源授权问题时,我执行了一个git log并获取了之前有效的提交的提交ID,并执行了git reset $commitId。将reset分支推回到Azure DevOps,然后神奇地工作了。

原始Azure Pipeline YAML:

---
trigger: none

variables:
  - name: ProjectFolder
    value: tf-datafactory
  - group: 'Deploy_Terraform_Library_Group'

pool:
  vmImage: 'ubuntu-latest'

steps:
  - task: replacetokens@3
    displayName: Replace tokens
    inputs:
      targetFiles: '$(System.DefaultWorkingDirectory)/$(ProjectFolder)/variables.tf'
      encoding: 'auto'
      writeBOM: true
      verbosity: 'detailed'
      actionOnMissing: 'warn'
      keepToken: false
      tokenPrefix: '#{{'
      tokenSuffix: '}}#'

  - task: AzureCLI@2
    displayName: Get the storage account key
    inputs:
      azureSubscription: '$(ARM.SubscriptionEndpoint)'
      scriptType: 'bash'
      scriptLocation: 'inlineScript'
      inlineScript: |
        export ContainerAccessKeyExport=$(az storage account keys list \
          --resource-group $(StorageResourceGroupName) \
          --account-name $(StorageAccountName) \
          --query "[0].value")
        echo "##vso[task.setvariable variable=ContainerAccessKey]$ContainerAccessKeyExport"
...

然后我将这些steps移到stagesjobs中。

---
parameters:
  - name: TerraformAction
    displayName: 'Will Terraform Create or Destroy?'
    type: 'string'
    default: 'create'
    values:
      - 'create'
      - 'destroy'

trigger: none

pool:
  vmImage: 'ubuntu-latest'

stages:
  - stage: 'Terraform'
    displayName: 'Terraform Stage'
    variables:
      - name: 'TerraformAction'
        value: '${{ parameters.TerraformAction }}'
      - name: ProjectFolder
        value: tf-datafactory
    jobs:
      - job: 'DeployTerraform'
        displayName: 'Terraform Deploy Data Factory'
        condition: eq(variables['TerraformAction'], 'create')
        variables:
          - group: 'Deploy_Terraform_Library_Group'
        steps:
          - task: replacetokens@3
            displayName: Replace tokens
            inputs:
              targetFiles: '$(System.DefaultWorkingDirectory)/$(ProjectFolder)/variables.tf'
              encoding: 'auto'
              writeBOM: true
              verbosity: 'detailed'
              actionOnMissing: 'warn'
              keepToken: false
              tokenPrefix: '#{{'
              tokenSuffix: '}}#'

          - task: AzureCLI@2
            displayName: Get the storage account key
            inputs:
              azureSubscription: '$(ARM.SubscriptionEndpoint)'
              scriptType: 'bash'
              scriptLocation: 'inlineScript'
              inlineScript: |
                export ContainerAccessKeyExport=$(az storage account keys list \
                  --resource-group $(StorageResourceGroupName) \
                  --account-name $(StorageAccountName) \
                  --query "[0].value")
                echo "##vso[task.setvariable variable=ContainerAccessKey]$ContainerAccessKeyExport"
...

-编辑-

我从中得到的收益:https://aka.ms/yamlauthz是您要么需要从一开始就从Stages和Jobs开始,否则您必须坚持创建的原始管道。大多数让Azure DevOps创建其初始管道的人都不知道要使用Stages和Jobs,因为管道生成器不会为他们执行此操作,而仅以Steps开始。

0 个答案:

没有答案