Azure DevOps运行KeyVault清除管道报PowerShell退出码1错误
问题
这是我在Azure上创建的管道任务:
# Pipeline that purges the deleted KeyVault. pr: none trigger: none pool: vmImage: 'ubuntu-latest' name: MyPool variables: - group: devopsforai-aml-vg steps: - task: PowerShell@2 inputs: targetType: 'inline' script: 'Remove-AzKeyVault -VaultName "msftMLOPs-AML-KV" -ResourceGroupName "mlops-RG" -PassThru'
当前使用托管代理运行管道时出现如下错误:
##[error]PowerShell exited with code '1'.
需要定位报错原因并给出排查解决方案。
解答
PowerShell任务返回退出码1代表脚本执行过程中触发了未捕获的终止错误,结合Key Vault操作场景,按出现概率从高到低排查即可:
第一步:获取完整错误日志
现有日志只返回了退出码,没有具体异常信息,先拿到详细报错再精准定位:
- 给管道运行添加变量
system.debug = true后重新执行,会输出PowerShell执行全流程的debug日志 - 或者临时修改PowerShell脚本,在开头添加
$ErrorActionPreference = "Continue",同时开启任务的「失败后继续运行」配置,强制输出所有错误信息后再终止任务
高频原因1:未正确登录Azure/权限不足
你当前使用的是普通PowerShell@2任务,托管代理默认不会自动登录Azure租户,执行Az命令会直接抛出请先执行Connect-AzAccount登录的错误;就算手动登录了,权限不足也会导致删除失败:
- 替换任务类型:将
PowerShell@2替换为AzurePowerShell@5任务,绑定拥有Key Vault操作权限的Azure服务连接,任务会自动完成Az模块登录,不需要手动写登录命令 - 权限校验:如果要清除软删除状态的Key Vault,服务连接对应的服务主体需要拥有资源组级别的
Microsoft.KeyVault/vaults/purge/action权限,普通Contributor角色默认没有该权限,需要额外分配「Key Vault 清除者」内置角色,或给自定义角色添加对应操作权限 - 如果目标Key Vault开启了清除保护,软删除保留期内无法执行强制清除操作,只能等保留期结束后再操作,执行命令也会返回权限错误
高频原因2:命令参数不匹配场景
Remove-AzKeyVault默认只会删除当前处于活跃状态的Key Vault,如果你的目标是清除已经被软删除的Key Vault,缺少参数会直接报资源不存在错误:
- 清除软删除状态Key Vault的正确命令如下,不需要指定资源组,需要指定KV所在区域并加
-InRemovedState参数:Remove-AzKeyVault -VaultName "msftMLOPs-AML-KV" -Location "<替换为Key Vault实际所在区域,比如chinaeast2、eastus>" -InRemovedState -Force -PassThru - 提前校验资源状态:执行清除命令前先运行
Get-AzKeyVault -VaultName "msftMLOPs-AML-KV" -InRemovedState,确认软删除列表中确实存在该KV,且名称、区域拼写正确
高频原因3:代理池配置冲突
你当前的pool配置同时指定了vmImage: 'ubuntu-latest'和name: MyPool,Azure DevOps会优先调度到name指定的代理池,如果MyPool是私有代理池、或池中代理未安装Az.KeyVault模块,也会导致命令执行失败:
- 如果确定要用微软托管代理,直接删除pool配置中的
name: MyPool字段,只保留vmImage: 'ubuntu-latest'即可 - 如果用私有代理,提前在代理机器上安装最新版Az.KeyVault模块,确保模块可用
内容的提问来源于stack exchange,提问作者zip
相关产品推荐
相关产品推荐

