Azure DevOps流水线Unity浮动许可证二次运行获取失败求助
解决Azure DevOps自托管代理Unity构建后浮动许可证未归还的问题
1. 获取Lease ID
直接用Unity自带的许可证客户端命令列出当前代理上的所有浮动许可证租赁记录:
在PowerShell中执行(替换为你实际的Unity安装路径):
& "C:\Program Files\Unity\Hub\Editor\<你的Unity版本号>\Editor\Data\Unity.Licensing.Client\unity.licensing.client.exe" list-floating
输出内容里会明确显示Lease Id: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx,这就是需要的ID。
2. 流水线中添加失败后自动归还任务
给Unity构建任务添加一个后续的PowerShell任务,必须勾选任务的「即使前面任务失败也运行」选项(在任务的控制设置面板中找到),然后在该任务中编写脚本自动获取Lease ID并执行归还:
# 提取Lease ID $leaseId = (& "C:\Program Files\Unity\Hub\Editor\<你的Unity版本号>\Editor\Data\Unity.Licensing.Client\unity.licensing.client.exe" list-floating | Select-String "Lease Id:").ToString().Split(": ")[1] # 执行许可证归还命令 & "C:\Program Files\Unity\Hub\Editor\<你的Unity版本号>\Editor\Data\Unity.Licensing.Client\unity.licensing.client.exe" --return-floating $leaseId
如果担心存在多条未归还的租赁记录,也可以循环处理所有Active状态的许可证:
$leases = (& "C:\Program Files\Unity\Hub\Editor\<你的Unity版本号>\Editor\Data\Unity.Licensing.Client\unity.licensing.client.exe" list-floating) | Select-String -Pattern "Lease Id: (.*)" -AllMatches foreach ($match in $leases.Matches) { $leaseId = $match.Groups[1].Value Write-Host "正在归还许可证: $leaseId" & "C:\Program Files\Unity\Hub\Editor\<你的Unity版本号>\Editor\Data\Unity.Licensing.Client\unity.licensing.client.exe" --return-floating $leaseId }
3. 额外优化建议
- 将Unity许可证客户端的路径设置为流水线变量(比如
$(UnityLicensingPath)),后续更新Unity版本时无需逐个修改脚本路径。 - 可以在流水线最开头添加一个清理任务,先归还所有残留的租赁记录,避免之前的失败任务影响新构建。
内容的提问来源于stack exchange,提问作者Jim
相关产品推荐
相关产品推荐

