2016-06-29 50 views
6

Sto tentando di pubblicare l'applicazione Service Fabric in Azure con powershell. Voglio collegarmi al cluster e quindi chiamare lo script "Deploy-FabricApplication.ps1" (uno che viene generato quando il nuovo progetto viene creato in Visual Studio)Distribuire il fabric di servizio da powershell. Errore -> Get-ServiceFabricClusterManifest: l'istanza di connessione del cluster è nullo

Per fare ciò ho creato un nuovo file di script che è responsabile della connessione con il cluster e quindi da quello stesso file di script sto chiamando "Deploy-FabricApplication.ps1".

Dopo il lancio il mio script sto ottenendo seguente errore:

Get-ServiceFabricClusterManifest : Cluster connection instance is null 
At C:\Program Files\Microsoft SDKs\Service Fabric\Tools\PSModule\ServiceFabricSDK\Publish-UpgradedServiceFabricApplication.ps1:116 char:28 
+  $clusterManifestText = Get-ServiceFabricClusterManifest 
+       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
+ CategoryInfo   : ResourceUnavailable: (:) [Get-ServiceFabricClusterManifest], NullReferenceException 
+ FullyQualifiedErrorId : GetClusterConnectionErrorId,Microsoft.ServiceFabric.Powershell.GetClusterManifest 

In script di connessione e distribuzione-FabricApplication.ps1 che io chiamo "Test-ServiceFabricClusterConnection" e in entrambi gli script restituisce vero anche in entrambi gli script I Sto chiamando "Get-ServiceFabricClusterManifest" e in entrambi i casi restituisce manifest, ma quando ho aggiunto "Test-ServiceFabricClusterConnection" a "Publish-UpgradedServiceFabricApplication.ps1", restituisce lo stesso errore come menzionato prima ma per "Test-ServiceFabricClusterConnection" "chiama.

codice per lo script di collegamento:

Param 
(
    [String] 
    $PublishProfileFile, 

    [String] 
    $ApplicationPackagePath, 

    [Switch] 
    $DeployOnly, 

    [Boolean] 
    $UnregisterUnusedApplicationVersionsAfterUpgrade, 

    [String] 
    [ValidateSet('None', 'ForceUpgrade', 'VetoUpgrade')] 
    $OverrideUpgradeBehavior = 'None', 

    [String] 
    [ValidateSet('Never','Always','SameAppTypeAndVersion')] 
    $OverwriteBehavior = 'Never', 

    [Switch] 
    $SkipPackageValidation, 

    [String] 
    $ConnectionEndpoint, 

    [String] 
    $ServerCertThumbprint, 

    [String] 
    $FindType, 

    [String] 
    $FindValue, 

    [String] 
    $StoreLocation, 

    [String] 
    $StoreName 
) 

$connectArgs = @{ ConnectionEndpoint = $ConnectionEndpoint; X509Credential = $True; StoreLocation = $StoreLocation; StoreName = $StoreName; ServerCertThumbprint = $ServerCertThumbprint; FindType = $FindType; FindValue = $FindValue } 

try 
{ 
    Connect-ServiceFabricCluster @connectArgs; 
    $connection = Get-ServiceFabricClusterConnection; 
    Write-Host $connection; 
    $m = Get-ServiceFabricClusterManifest 
    Write-Host $m; 
} 
catch [System.Fabric.FabricObjectClosedException] 
{ 
    Write-Warning "Service Fabric cluster may not be connected." 
    throw 
} 

.\Deploy-FabricApplication.ps1 -PublishProfileFile $PublishProfileFile -ApplicationPackagePath $ApplicationPackagePath -OverrideUpgradeBehavior $OverrideUpgradeBehavior -OverwriteBehavior $OverwriteBehavior -DeployOnly:$DeployOnly -UnregisterUnusedApplicationVersionsAfterUpgrade:$UnregisterUnusedApplicationVersionsAfterUpgrade -UseExistingClusterConnection:$true -SkipPackageValidation:$SkipPackageValidation 

In sintesi, non ho idea di come stabilire la connessione a raggrupparsi e quindi utilizzarlo in Distribuire-FabricApplication.ps1

Grazie per l'aiuto

risposta

11

Quando si chiama Connect-ServiceFabricCluster, viene impostata una variabile locale $clusterConnection. Alcuni script SDK prevedono quindi che sia impostata la variabile, ma poiché si sta eseguendo lo script in un ambito diverso, tale variabile locale non è disponibile.

È possibile sia fonte di punti la chiamata a distribuire-FabricApplication.ps1

. .\Deploy-FabricApplication.ps1 -PublishProfileFile $PublishProfileFile -ApplicationPackagePath $ApplicationPackagePath -OverrideUpgradeBehavior $OverrideUpgradeBehavior -OverwriteBehavior $OverwriteBehavior -DeployOnly:$DeployOnly -UnregisterUnusedApplicationVersionsAfterUpgrade:$UnregisterUnusedApplicationVersionsAfterUpgrade -UseExistingClusterConnection:$true -SkipPackageValidation:$SkipPackageValidation 

o creare un $ globale: variabile clusterConnection che contiene il $ clusterConnection variabile locale

$global:clusterConnection = $clusterConnection 
+0

Grazie per l'aiuto, io ho assegnato la variabile locale a global e sembra che ora funzioni – TomaszMaryniak

+0

Se resetti il ​​tuo cluster locale e provi a riutilizzare la connessione ottieni 'Errore: ... Eccezione: l'oggetto è chiuso. -> Eccezione da HRESULT: 0x80071BFE'. L'avvio di una nuova finestra di PowerShell lo corregge. –

+0

E dopo aver eseguito il ripristino di 'Connect-ServiceFabricCluster': "Connect-ServiceFabricCluster: l'oggetto è chiuso. Alla riga: 1 carattere: 1 + Connect-ServiceFabricCluster + CategoryInfo: InvalidOperation: (:) [Connect-ServiceFabricCluster], FabricObjectClosedException + FullyQualifiedErrorId: TestClusterConnectionErrorId, Microsoft.ServiceFabric.Powershell.ConnectCluster' –