Может ли большее время ожидания быть решением проблемы неудачного обновления?

sharepoint.stackexchange https://sharepoint.stackexchange.com//questions/37446

  •  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);
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с sharepoint.stackexchange
scroll top