TFS - Тайм-аут Powershell при вызове функции распаковки при выпуске
Я пытаюсь выполнить автоматическое развертывание с моего Team Foundation Server (Windows Server 2012R2 с PowerShell 4) на другой сервер (в основном Windows2008R2 с PowerShell 2).
Я написал файл ps1 с именем "TFS_deploy.ps1", который будет выполнять какой-то шаг развертывания, и он будет работать, как ожидается, как при вызове в TFS, так и при запуске его самостоятельно (войдите на сервер и запустите).
Шаги выпуска
Копировать файлы на сервер
Запустите PowerShell на целевых машинах
Проблемы
Поскольку существует много небольших файлов, учитывая производительность, я делаю zip из необработанных файлов на этапе Build, затем вставляю команды unzip в мой "TFS_deploy.ps1", команды:
function Expand-ZIPFile($file, $destination){ #Function for unzip $shell = new-object -com shell.application $zip = $shell.NameSpace($file) foreach($item in $zip.items()) { $shell.Namespace($destination).copyhere($item,0x14) } } Expand-ZIPFile $zipFile $unzipTo #call unzip
Но до сих пор шаг "Запуск PowerShell на целевых машинах" застревает до истечения времени ожидания и ничего не возвращает, журнал выглядит так:
2018-04-19T01:39:15.2320923Z Executing the powershell script: D:\agent\_work\_tasks\PowerShellOnTargetMachines_xxxxxxxxx\1.0.46\PowerShellOnTargetMachines.ps1 2018-04-19T01:39:16.4302496Z Deployment started for machine: 'xxxxxxxxx:5985' 2018-04-19T01:44:29.9661778Z ##[error]Timeout。
Он показывает только тайм-аут после 5 минут.
НО, если я захожу на сервер и запускаю
TFS_deploy.ps1
Msgstr "Все будет хорошо, а PowerShell всего за 1 минуту или меньше.
Я даже попытался использовать оболочку Python для распаковки:
import zipfile path_to_zip_file = ".\\BuildSource.zip" directory_to_extract_to = ".\\" zip_ref = zipfile.ZipFile(path_to_zip_file, 'r') zip_ref.extractall(directory_to_extract_to) zip_ref.close()
Когда произошло что-то другое, журнал наконец-то показал:
2018-04-19T08:18:52.5834107Z Deployment status for machine 'XXXXXXXXX:5985' : 'Failed' 2018-04-19T08:18:52.6174186Z ##[error] Failed to execute script unzip"}};] 2018-04-19T08:18:52.6174186Z 2018-04-19T08:18:52.6174186Z 2018-04-19T08:18:52.6744240Z ## [error] System.Management.Automation.RuntimeException: Command execution stopped because the preference variable "ErrorActionPreference" or common parameter is set to Stop: [3448] Failed to execute script unzip ---> System.Management.Automation.RuntimeException: Command execution stopped because the preference variable "ErrorActionPreference" or common parameter is set to Stop: [3448] Failed to execute script unzip 2018-04-19T08:18:52.6744240Z --- End of inner exception stack trace --- 2018-04-19T08:18:52.6744240Z at System.Management.Automation.Runspaces.PipelineBase.Invoke(IEnumerable input) 2018-04-19T08:18:52.6744240Z at System.Management.Automation.PowerShell.Worker.ConstructPipelineAndDoWork(Runspace rs, Boolean performSyncInvoke) 2018-04-19T08:18:52.6744240Z at System.Management.Automation.PowerShell.Worker.CreateRunspaceIfNeededAndDoWork(Runspace rsToUse, Boolean isSync) 2018-04-19T08:18:52.6754297Z at System.Management.Automation.PowerShell.CoreInvokeHelper[TInput,TOutput](PSDataCollection`1 input, PSDataCollection`1 output, PSInvocationSettings settings) 2018-04-19T08:18:52.6754297Z at System.Management.Automation.PowerShell.CoreInvoke[TInput,TOutput](PSDataCollection`1 input, PSDataCollection`1 output, PSInvocationSettings settings) 2018-04-19T08:18:52.6754297Z at Microsoft.TeamFoundation.DistributedTask.Handlers.LegacyVSTSPowerShellHost.VSTSPowerShellHost.Main(String[] args) 2018-04-19T08:18:52.6944268Z ##[error]LegacyVSTSPowerShellHost.exe :return -1。
Резюме
У меня проблемы с использованием Powershell для распаковки, и это происходит только тогда, когда TFS вызывает файл ps1, но при запуске этого же файла ps1 вручную ошибка не возникает.
Любое предложение по zip/unzip с TFS?
Обновление 2018/04/23
Я пытался использовать командлет invoke-command для вызова файла.ps1 с моего TFS-сервера на целевой сервер . Распаковка прошла успешно, но когда какой-либо файл ps1 вызывает TFS, он застревает, не показывая никакого результата снова.
Вот мой командлет:
Invoke-Command -ComputerName XXXXXXXXX -FilePath D:\TFSDeployShareFolder\unzip.ps1 -Credential XXXXXXXXX\autodeploy
и unzip.ps1:
$zipfile = "D:\TFSDeployShareFolder\Officialwebsite.zip"
$unzipDestination = "D:\TFSDeployShareFolder\"
function Expand-ZIPFile($file, $destination){
$shell = new-object -com shell.application
$zip = $shell.NameSpace($file)
foreach($item in $zip.items())
{
$shell.Namespace($destination).copyhere($item,0x14)
}
}
Expand-ZIPFile $zipfile $unzipDestination
Обновление 2018/5/3 (решение)
Я решаю использовать 7z, чтобы сделать работу, Простой Google:"расстегнуть PowerShell с 7z", чтобы найти код, теперь он работает как положено.
1 ответ
Попробуйте команду Expand-Archive:
$zipfile = "C:\File.zip"
$destination = "C:\Outputpath"
Expand-Archive -LiteralPath $zipfile -DestinationPath $destination -Force