Может ли большее время ожидания быть решением проблемы неудачного обновления?
-
09-12-2019 - |
Вопрос
У меня проблема с обновлением решения на ферме.Итак, мы изменили некоторые функции и добавили две.Основные изменения были внесены в основную функцию решения.
В нашем тестовом облаке это работает нормально.В нашей тестовой среде сначала это работает нормально, но после повторного развертывания это больше не работает.Обновленные функции были установлены не полностью.Это происходит и в клиентской среде, и в некоторых других тестовых развертываниях возникает та же проблема.
Итак, мы изменили предоставленный нами сценарий обновления.На данный момент у нас есть время ожидания между командой Update-SPSolution и обновлением всех функций развернутых компонентов.Мы увеличили время ожидания с 20 секунд до 5 минут.
Новое обновление теперь прошло нормально, но мы хотели воссоздать старое состояние и снова установили решение со старым файлом обновления, но это тоже работает нормально ;-).(да, это еще худшая ситуация)
Важный процесс обновления выглядит следующим образом:
Update-SPSolution -LiteralPath $wspFile -Identity $fileName -Force -GACDeployment -ErrorAction:Stop -ErrorVariable:updateError -Confirm:$false
Start-Sleep -Seconds $sleep
$site = Get-SPSite $SiteUrl
$siteFeatureToUpgrade = $site.QueryFeatures("Site", $true);
foreach($f in $siteFeatureToUpgrade)
{
$f.Upgrade($false);
}
Значение sleep равно один раз 20 и один раз 300.В любом случае, может ли быть так, что это время ожидания устраняет проблему с обновлением?Потому что я так не думаю.
Большое спасибо.
Решение
То Update-SPSolution
вызов является асинхронным.Точнее, эта команда только создает задание таймера, которое в конечном итоге будет запущено.
Вы можете использовать эту функцию, чтобы дождаться окончания выполнения задания :
function Wait-SPSolutionDeploymentJobToFinish
{
param
(
[Parameter(Mandatory=$true)]
[string]$SolutionFileName
)
process {
$JobName = "*solution-deployment*$SolutionFileName*"
$job = Get-SPTimerJob | ?{ $_.Name -like $JobName }
if ($job -eq $null)
{
Write-Host 'Timer job not found'
}
else
{
$JobFullName = $job.Name
Write-Host -NoNewLine "Waiting to finish job $JobFullName"
while ((Get-SPTimerJob $JobFullName) -ne $null)
{
Write-Host -NoNewLine .
Start-Sleep -Seconds 2
}
Write-Host "Finished waiting for job.."
}
}
}
Update-SPSolution -LiteralPath $wspFile -Identity $fileName -Force -GACDeployment -ErrorAction:Stop -ErrorVariable:updateError -Confirm:$false
#Start-Sleep -Seconds $sleep
Wait-SPSolutionDeploymentJobToFinish $fileName
$site = Get-SPSite $SiteUrl
$siteFeatureToUpgrade = $site.QueryFeatures("Site", $true);
foreach($f in $siteFeatureToUpgrade)
{
$f.Upgrade($false);
}