首页 > 解决方案 > 取消发布并开始新的发布后,无法创建发布工件目录错误

问题描述

这似乎只有在我取消发布部署然后开始新部署时才会发生。它迫使我进入代理并手动重新启动它们。

实际错误是..

“无法创建发布工件目录 'C:\agent_work\r3\a'。---> System.IO.IOException: 进程无法访问文件 '\?\C:\agent_work\r3\a' 因为它是被另一个进程使用。”

在取消发布后创建新版本时,TFS 中是否有办法清除这些潜在问题?如果我让它完全运行,新版本运行良好没有问题。这只发生在我取消并尝试开始一个新的时。

标签: tfsazure-pipelines-release-pipeline

解决方案


您可以使用句柄之类的实用程序来编写释放锁定文件或文件夹的脚本。

例如:

$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
}

配置脚本以运行,即使发布被取消。


推荐阅读