¿Podría un tiempo de sueño más grande ser la solución para una actualización fallida?

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

  •  09-12-2019
  •  | 
  •  

Pregunta

Tengo un problema con una actualización de una solución en la granja. Así que hemos cambiado algunas características y hemos agregado dos características. Los principales cambios se realizaron a la característica principal de la solución.

En nuestra nube de prueba, funciona bien. En nuestro entorno de prueba, primero funciona bien, pero después de una redistribución, ya no ha funcionado. Las características actualizadas no se instalaron completamente. Esto también ocurre en el entorno del cliente y algunas otras implementaciones de prueba tienen el mismo problema.

Así que hemos cambiado el script de actualización que proporcionamos. En este punto, tenemos un tiempo de sueño entre el comando Update-Spsolution y la actualización de todas las funciones de las funciones implementadas. Levantamos el tiempo de sueño de 20 segundos a 5 minutos.

Una nueva actualización ahora fue bien, pero queríamos recrear el estado antiguo e instalar la solución con el antiguo archivo de actualización nuevamente, pero esto funciona bien también ;-). (Sí, eso es una situación peor)

El proceso de actualización importante se ve de esta manera:

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);
}

El valor del sueño es una vez 20 y una vez 300. De todos modos, ¿podría ser que este tiempo de sueño resuelva el problema de actualización? Porque no lo creo.

Muchas gracias.

¿Fue útil?

Solución

La llamada Update-SPSolution es asíncrona.Más precisamente, este comando solo crea un trabajo de temporizador que se ejecutará eventualmente.

Puede usar esta función para esperar el final de la ejecución del trabajo:

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);
}

Licenciado bajo: CC-BY-SA con atribución
scroll top