tfs - 取消发布并开始新的发布后,无法创建发布工件目录错误
问题描述
这似乎只有在我取消发布部署然后开始新部署时才会发生。它迫使我进入代理并手动重新启动它们。
实际错误是..
“无法创建发布工件目录 'C:\agent_work\r3\a'。---> System.IO.IOException: 进程无法访问文件 '\?\C:\agent_work\r3\a' 因为它是被另一个进程使用。”
在取消发布后创建新版本时,TFS 中是否有办法清除这些潜在问题?如果我让它完全运行,新版本运行良好没有问题。这只发生在我取消并尝试开始一个新的时。
解决方案
您可以使用句柄之类的实用程序来编写释放锁定文件或文件夹的脚本。
例如:
$pathToRelease = $env:System.DefaultWorkingDirectory
Write-Host "$PathToRelease is locked! trying to kill the process..."
$processes = path\to\handle64.exe -nobanner -accepteula $PathToRelease
# Remove empty lines
$processes = $processes | Where-Object {$_ -ne ""}
Write-Host $processes.ForEach({ Write-Host $_ })
if($processes -notmatch "No matching handles found.")
{
foreach($process in $processes)
{
# Some excluded processes, you can decide what which you want
if($process -match "explorer.exe" -or $process -match "powershell.exe"
{
continue
}
$pidNumber = $process.Substring(($process.IndexOf("pid") + 5),6)
$isProcessStillAlive = Get-Process | Where-Object {$_.id -eq $pidNumber}
if($Null -ne $isProcessStillAlive)
{
Stop-Process -Id $pidNumber -Force
Start-Sleep -Seconds 1
}
}
}
else
{
exit 0
}
配置脚本以运行,即使发布被取消。
推荐阅读
- spring-cloud-sleuth - How to skip tracing of http OPTIONS requests
- macos - 如何在Objective C中使用Applescript在提示密码时启用Touch ID
- c - 仅打印带空格的五位数字的代码
- c++ - 普通变量可以保存 C++ 中其他变量的内存地址吗?
- sql - SQL:如何添加一个虚拟列(每个单元格包含“A”,或者一个整数或其他一些字符串
- curl - 从谷歌开发者那里获取授权令牌
- angular - NgrX 效果重定向角度
- java - Java中的数值集成
- excel - 根据唯一的“ID”列将行从一个工作表复制到另一个工作表?
- javascript - 我如何计算然后在 Web 表单上显示已选中但并非全部选中的特定复选框