情况
我的自托管 Windows 代理运行来自 Azure DevOps 的管道。到
管理 Azure 中的资源 我想使用 Azure CLI 任务。即使在前面的步骤中安装了 Azure CLI,AzureCLI 任务也会失败。
我有两个从我的管道运行的脚本。
- (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.
微软 says
- (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 任务?
我已经尝试过的
- 通过 PowerShell 设置 Azure CLI 的路径。路径已设置,但 Azure CLI 任务的 Powershell 任务失败。
- 直接在我的安装脚本中运行 Azure CLI 命令,这可以工作,但我需要使用单独的凭据登录 Azure,同时我想使用 Azure CLI 任务中定义的服务主体。
- 正在 VM 上重新启动 Microsoft Agent 服务,但我的代理上没有提到的服务 (https://learn.microsoft.com/en-us/azure/devops/pipelines/agents/v2-windows?view=azure-devops)
- 设置执行 Azure CLI 任务之前的延迟。
- 使用 Microsoft 托管代理,该代理 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 CLI 命令脚本
# 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