Аутентификация необходима при запуске сценариев Powershell из конвейера Azure, но не при запуске Azure CLI

Мы осуществляем передачу данных в Azure с помощью Azure DevOps Pipeline.

Мы пытаемся запустить следующую команду как часть задачи внутри файла azure-pipelines.yml:

az ad app list --all

Это работает в Azure CLI без необходимости входа в систему, но не в AzurePowerShell.

Вот раздел из файла YAML для задачи Azure CLI:

- task: AzureCLI@2
      displayName: Azure CLI - Deploy bicep files
      inputs:
        azureSubscription: $(serviceConnectionName)
        scriptType: bash
        scriptLocation: inlineScript
        useGlobalConfig: false
        inlineScript: |    
          az ad app list --all

Вот раздел YAML для PowerShell:

- task: AzurePowerShell@5
      inputs:
        azureSubscription: $(serviceConnectionName)
        azurePowerShellVersion: LatestVersion
        ScriptType: 'InlineScript'
        Inline: |
          az ad app list --all 

При работе под PowerShell ошибка в журнале конвейера выглядит следующим образом:

ERROR: Please run 'az login' to setup account.

Я не понимаю, почему это работает в Azure CLI, но не в AzurePowerShell. Возможно, нам не хватает параметра или настройки, которые могли бы это исправить?

Любая помощь принимается с благодарностью.

Спасибо,

Стив.

Привет @Steve, добро пожаловать в SO. Я поделился еще несколькими документами, чтобы помочь понять различия между двумя наборами командных инструментов. Надеюсь, это поможет решить ваш вопрос в этом посте и поможет вам в дальнейшей работе. Удачи и хорошего настроения!

Alvin Zhao - MSFT 21.08.2024 15:01
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
Как установить LAMP Stack 1/2 на Azure Linux VM
Как установить LAMP Stack 1/2 на Azure Linux VM
В дополнение к нашему предыдущему сообщению о намерении Azure прекратить поддержку Azure Database для MySQL в качестве единого сервера после 16...
0
1
50
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Обратите внимание, что задача AzurePowerShell@5 запускает команду Connect-AzAccount для аутентификации доступа субъекта-службы к Azure НЕ az login, как это делает задача AzureCLI@2.

Azure CLI и Azure PowerShell — это два разных набора командных инструментов. В Azure PowerShell вместо этого вы можете попробовать использовать команду Get-AzADApplication для вывода списка приложений AAD.

pool:
  vmImage: ubuntu-latest

steps:
- task: AzureCLI@2
  displayName: Azure CLI - Deploy bicep files
  inputs:
    azureSubscription: $(serviceConnectionName)
    scriptType: bash
    scriptLocation: inlineScript
    useGlobalConfig: false
    inlineScript: |    
      az ad app list --all
- task: AzurePowerShell@5
  displayName: Azure PowerShell - Deploy bicep files
  inputs:
    azureSubscription: $(serviceConnectionName)
    azurePowerShellVersion: LatestVersion
    ScriptType: 'InlineScript'
    Inline: |
      Get-AzADApplication

Также рекомендуется использовать разные команды Azure CLI и Azure PowerShell для развертывания шаблона бицепса.

Развертывание ресурсов с помощью Azure CLI и файлов Bicep — Azure Resource Manager | Microsoft Learn

Развертывание ресурсов с помощью PowerShell и Bicep — Azure Resource Manager | Microsoft Learn

Спасибо большое за это Элвину - ты попал в проблему точно в голову. Теперь, когда это работает в файле YAML, я бы предпочел переместить его в модуль бицепса, а не в файл YAML. Сейчас мы сталкиваемся с новыми проблемами.

У нас есть это в файле бицепса:

ресурсов DeploymentScript 'Microsoft.Resources/deploymentScripts@2023-08-01' = {

name: 'TestPS'
  location: locationName
  kind: 'AzurePowerShell'
  properties: {
    azPowerShellVersion: '10.0'
    timeout: 'PT10M'
    retentionInterval: 'P1D'    
    cleanupPreference: 'OnExpiration'
    arguments: '-Name \\"${name}\\"'
    scriptContent: '''
      param([string] $Name)
      
      $output = (Get-AzADApplication -DisplayName 'Test_Sample1 (Microsoft Copilot Studio)' -Select appId).appId

      $DeploymentScriptOutputs = @{}
      $DeploymentScriptOutputs['text'] = $output
      '''
  }
}

output text string = deploymentScript.properties.outputs.text

... но когда мы его запустим, мы получим следующее:

The template output 'text' is not valid: The provided value for the template output 'text' is not valid. Expected a value of type 'String, Uri', but received a value of type 'Null'.

Мы не можем понять, почему это так.

[Извиняюсь за странное форматирование — ему не нравятся разделители в коде]

Я могу отправить вам файл отдельно, если это поможет? У меня возникли проблемы с его рендерингом здесь.

Steve 21.08.2024 18:22

Другие вопросы по теме

Пул агентов Azure DevOps: как мне запросить определенную возможность Net Framework SDK?
Загрузите универсальный пакет без az cli, используя REST API
Служба приложений Azure для Django не работает с Azure Devops Pipeline
Могу ли я иметь собственный локальный сервер агента сборки в Azure Devops с возможностью перехода в облако?
Интеграция Microsoft Teams с AzureDevops Boards для создания рабочих элементов по требованию
Ошибка настройки агента DevOps TF400813: пользователь «пользователь» не имеет прав на доступ к этому ресурсу. Не удалось подключиться. Попробуйте еще раз или нажмите Ctrl-C, чтобы выйти
Azure DevOps Yaml – как установить глобальные переменные из параметров?
Azure Devops REST API — публикуйте артефакты сборки из локального хранилища
Способ запуска сценария bash перед перехватом перед развертыванием с помощью безагентного сервера в Azure Devops
Конвейер Azure Devops с дополнительным этапом, запускаемым вручную