Как запускать задачи Azure CLI из конвейера Azure DevOps в автономном агенте Windows?

Ситуация

Мой автономный агент Windows запускает конвейер из Azure DevOps. Для управления ресурсами в Azure я хочу использовать задачу Azure CLI. Задача AzureCLI не выполняется, даже если Azure CLI установлен на предыдущем шаге.

У меня есть два сценария, которые запускаются из моего конвейера.

  • (1) Установите Azure CLI - ›Успех
  • (2) Выполнение команд Azure CLI - ›Сбой без запуска ЛЮБОГО кода внутри, даже Hello, World! не выполняется.
2021-03-05T14:50:02.5986237Z ##[error]Azure CLI 2.x is not installed on this machine.
2021-03-05T14:50:02.6391547Z ##[error]Script failed with error: Error: Unable to locate executable file: 'az'. Please verify either the file path exists or the file can be found within a directory specified by the PATH environment variable. Also verify the file has a valid extension for an executable file.

Microsoft говорит

  • (1) After you install new software on an agent, you must restart the agent for the new capability to show up in the pool so that the build can run.
  • (2) After the installation is complete, you will need to reopen PowerShell to use the Azure CLI.

Задаче AzureCLI не удается найти установленный исполняемый файл Azure CLI. Как я могу это исправить, чтобы запустить задачу AzureCLI?

Что я уже пробовал

  • Установка ПУТЬ для Azure CLI через PowerShell. Путь задан, но задача Powershell для задачи Azure CLI не выполняется.
  • Выполнение команд AzureCLI непосредственно в моем сценарии установки, который работает, но мне нужно войти в Azure с отдельными учетными данными, в то время как я хочу использовать субъект-службу, определенный в моей задаче AzureCLI.
  • Перезапуск служб Microsoft Agent на виртуальной машине, но на моем агенте нет ни одной из упомянутых служб (https://docs.microsoft.com/en-us/azure/devops/pipelines/agents/v2-windows?view=azure-DevOps)
  • Установка задержки перед выполнением задачи Azure CLI.
  • Использование агентов Microsoft Hosted, которые работают на 100%, но не подходят для моей компании, поэтому не вариант.

Сведения о конвейере

trigger:
  branches:
    exclude:
    - master

pool:
  name: SelfHosted-AgentPool
  vmImage: 'windows-latest'

variables:
  environment.name: 'Test'

stages:
- stage: build_and_deploy
  jobs:
  - deployment: VMBackup_Testing  
    displayName: "Enable Backup Protection"
    environment: '$(environment.name)'
    strategy:
      runOnce:
        deploy:
          steps:
          - checkout: self    
          
         
          - task: PowerShell@2
            inputs:
              filePath: '$(System.DefaultWorkingDirectory)/Templates/Snippets/InstallAzureCLI.ps1'

          - task: AzureCLI@2
            inputs:
              workingDirectory: 'C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2\wbin'
              azureSubscription: 'XXX'
              scriptType: 'ps'
              scriptLocation: 'scriptPath'
              scriptPath: '$(System.DefaultWorkingDirectory)/Templates/Snippets/EnableBackupProtection.ps1'

Установить сценарий Azure CLI

# Download and Install Azure CLI
Invoke-WebRequest -Uri https://azcliprod.blob.core.windows.net/msi/azure-cli-2.19.1.msi -OutFile .\AzureCLI.msi; Start-Process msiexec.exe -Wait -ArgumentList "/I AzureCLI.msi /quiet"; rm .\AzureCLI.msi

# Update PATH for Powershell to use new installed software
setx /M PATH "$env:Path += ;C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2\wbin"

# Test if PATH of Azure CLI exists
Test-Path -Path "C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2\wbin"

# Reload Shell with new PATH 
$env:Path = [System.Environment]::GetEnvironmentVariable("Path","Machine") + ";" + [System.Environment]::GetEnvironmentVariable("Path","User")

# Check if AZ CLI is installed
az version

Сценарий команд интерфейса командной строки Azure

# Check if script gets executed
Write-Host "Hello, World!"

# AZ CLI commands to enable Backup Protection
az backup protection enable-for-vm `
    --resource-group XXX`
    --vault-name XXXX`
    --vm $(az vm show -g XXX -n XXX --query id) `
    --policy-name DailyBackup

person Falco    schedule 06.03.2021    source источник
comment
Рекомендуется перезапустить агент, чтобы отразить путь и другие параметры системного уровня на машине для установки нового программного обеспечения. Похоже, вы не устанавливаете интерфейс командной строки вручную, а устанавливаете как часть конвейера, можете ли вы убедиться, что после установки путь установлен правильно? Если вы можете обновить путь, он должен работать, однако было бы хорошо установить cli и перезапустить агент на машине. Если это размещенная машина, это не должно быть проблемой.   -  person Sujit Singh    schedule 07.03.2021
comment
CLI действительно устанавливается как часть конвейера. Как я могу перезапустить агент на машине? Я не вижу агента VSTS или чего-либо подобного, работающего под службами.   -  person Falco    schedule 07.03.2021
comment
Я добавил задачи по обновлению пути, но даже после этого сталкиваюсь с той же ошибкой (Azure CLI 2.x не установлен на этом компьютере).   -  person Falco    schedule 07.03.2021
comment
Они отображаются на компьютере как агенты конвейера Azure DevOps после того, как VSTS (Visual Studio Team Services), переименованные в агенты Azure DevOps, также будут установлены с другим именем.   -  person Sujit Singh    schedule 07.03.2021
comment
Ближайшая доступная служба - это гостевой агент Windows Azure, но перезапуск этой службы приводит к той же ошибке.   -  person Falco    schedule 07.03.2021
comment
Я обновил свой пост, чтобы отразить новые результаты. Я могу установить Azure CLI и успешно запустить «z-версию» как часть задачи PowerShell. Однако мне нужна задача AzureCLI @ 2, поскольку она использует уже настроенного мной субъекта-службы. Эта задача не выполняется, поскольку не удается найти установленный AzureCLI.   -  person Falco    schedule 07.03.2021
comment
Привет @Falco, как дела? Помогло ли вам предложение в моем ответе? Пожалуйста, возьмите с собой чек. Любое обновление, не стесняйтесь сообщать нам. Спасибо.   -  person Bright Ran-MSFT    schedule 17.03.2021


Ответы (1)


Почему вам нужно устанавливать Azure CLI каждый раз, когда вы запускаете конвейер на одном и том же собственном агенте Windows?

В отличие от Microsoft- размещенные агенты, вам просто нужно вручную установить необходимые инструменты на машину с автономным агентом, после чего их можно будет использовать в конвейерах, выполняемых на агенте.

  1. Войдите на свой компьютер с Windows (локальный или виртуальный), на котором установлен собственный агент.

  2. Откройте веб-браузер, чтобы загрузить установщик MSI последней выпущенной версии Azure CLI, со страницы здесь.

  3. При установке Azure CLI с помощью установщика MSI обычно мастер установки автоматически добавляет этот инструмент в переменную системной среды PATH. После завершения установки вы можете открыть Изменить системные переменные среды на машине, чтобы проверить это. Если он не добавлен в системную переменную среды PATH, вы можете добавить его вручную.

введите описание изображения здесь

  1. После вышеуказанных шагов, как рекомендовано в документации, перезапустите службу агента или перезапустите компьютер, чтобы установленный инструмент Azure CLI можно было указать в возможностях агента в пуле.

Таким образом, когда вы настраиваете конвейер для работы на этом собственном агенте, вы можете напрямую вызывать Azure CLI, и вам не нужно никаких шагов для установки Azure CLI в конвейере.

person Bright Ran-MSFT    schedule 08.03.2021
comment
У нас будут развертывания не чаще одного раза в квартал, поэтому нам не нужно, чтобы агент работал постоянно. Время, необходимое для переустановки Azure CLI, не является препятствием, и мы предпочитаем иметь новые машины при каждом развертывании. Текущий статус заключается в том, что Azure CLI устанавливается нормально и мы можем использовать Azure CLI из общей задачи PowerShell, однако встроенная задача AzureCLI @ 2 из Azure Pipelines ищет исполняемый файл az в неправильной папке ('C: \ a \ 1 \ s) вместо Program Files. - person Falco; 10.03.2021
comment
Привет, @Falco, если вы хотите иметь новую машину каждый раз при запуске развертывания. Я рекомендую вам использовать агенты, размещенные на сервере Microsoft или агенты масштабируемого набора виртуальных машин Azure вместо автономных агентов на вашем компьютере. - person Bright Ran-MSFT; 11.03.2021
comment
Привет @Falco, как дела? Вы пробовали использовать агенты, размещенные на сервере Microsoft, или агенты масштабируемого набора виртуальных машин Azure? Работает ли это для вас? Пожалуйста, попробуйте. Любое обновление, не стесняйтесь сообщать нам. Спасибо. - person Bright Ran-MSFT; 24.03.2021
comment
Завершено использование комбинации VMSS Self-hosted агентов для задач CLI, не относящихся к зоне доступности, и агента, размещенного в Microsoft, для задач Azure CLI. Перезапуск локального сервера позволил запускать задачи интерфейса командной строки AZ, но, поскольку мы используем масштабируемый набор, мы не можем перезапустить агент. - person Falco; 25.03.2021
comment
Привет, @Falco, на самом деле вы также можете перезапустить агент VMSS, перезапустив виртуальную машину в VMSS. Вы можете вручную перезапустить виртуальную машину в веб-интерфейсе портала Azure или использовать 'az vmss restart '. Во всяком случае, рад, что теперь задача может нормально работать в вашем конвейере. Если мой ответ поможет вам решить проблему, возможно, вы можете отметить его как решение этой темы. Это также может быть очень полезно для других людей, которые ищут решение подобных вопросов. Спасибо. - person Bright Ran-MSFT; 26.03.2021