0

YAML で記述された動作中の Azure パイプラインがある場合、これが何度も発生しました。次に、パイプラインを変更すると、エラーが発生しThere was a resource authorization issueます。通常、パイプラインを削除して再作成すると、機能します。ただし、現在は機能しておらず、次のエラーが継続的に発生します。

変更後の Azure DevOps YAML パイプライン承認エラー

小さなボタンをクリックすると、「リソースが承認されました」というポップアップが表示されます。パイプラインを再度実行しようとすると、同じエラーが発生します。

私はアカウント/コレクション/組織管理者であり、すべてのパイプラインへのアクセスを有効にするように設定されているライブラリ グループを作成しました。パイプラインの名前を変更して、同じエラーに対して数回再作成しようとしました。パイプラインを元の状態に戻す以外に、どうすればよいですか?

- 編集 -

ブランチを以前のバージョンのパイプラインにリセットするだけでうまくいきました。ただし、ステップを Stages と Jobs に移動できなかった理由についてはまだ手がかりがありません。

- 編集 -

以下は、私が最初に使用した YAML と更新されたバージョンです。更新されたバージョンでリソース認証の問題が発生したとき、私は を実行し、git log機能した以前のコミットのコミット ID を取得し、git reset $commitId. リセット ブランチを Azure DevOps に戻すと、魔法のように機能しました。

元の Azure パイプライン 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"
...

次に、これらstepsstagesとに移動しましjobsた。

---
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は、最初からステージとジョブから始める必要があるということです。それ以外の場合は、作成された元のパイプラインに固執する必要があります。Azure DevOps に最初のパイプラインを作成させるほとんどの人は、ステージとジョブを使用することを知りません。パイプライン ジェネレーターはそれを行わず、ステップからのみ開始するためです。

4

0 に答える 0