Ситуация
Мой автономный агент 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