2016-06-29 9 views
6

Próbuję opublikować aplikację Service Fabric na platformie Azure za pomocą programu powershell. Chcę połączyć się z klastrem, a następnie wywołać skrypt "Deploy-FabricApplication.ps1" (taki, który jest generowany podczas tworzenia nowego projektu w visual studio).Wdróż usługę sieciową z powłoki powershell. Błąd -> Get-ServiceFabricClusterManifest: Wystąpienie połączenia klastra ma wartość null

W tym celu utworzyłem nowy plik skryptu odpowiedzialny za połączenie z klastrem, a następnie z tego samego pliku skryptu nazywam "Deploy-FabricApplication.ps1".

Po uruchomieniu mój skrypt otrzymuję następujący błąd:

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 

W skrypcie połączenie i wdrożyć-FabricApplication.ps1 Wołam „Test-ServiceFabricClusterConnection” iw obu skryptów to zwraca wartość true, również w obu scenariuszy, nazywam "Get-ServiceFabricClusterManifest" iw obu przypadkach wróci do mnie manifest, ale kiedy dodałem "Test-ServiceFabricClusterConnection" do "Publish-UpgradedServiceFabricApplication.ps1", to zwrócił ten sam błąd, jak wspomniano wcześniej, ale dla "Test-ServiceFabricClusterConnection " połączenie.

Kod skryptu połączeniowego:

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 

Podsumowując, nie mam pojęcia, jak do ustanowienia połączenia do klastra, a następnie używać go w Deploy-FabricApplication.ps1

Dzięki za pomoc

Odpowiedz

11

Podczas wywoływania Connect-ServiceFabricCluster ustawiana jest lokalna zmienna $clusterConnection. Niektóre skrypty SDK spodziewają się, że zmienna zostanie ustawiona, ale ponieważ wykonujesz skrypt w innym zakresie, ta lokalna zmienna nie jest dla nich dostępna.

Można kropka źródło wywołanie wdrożyć-FabricApplication.ps1

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

lub utwórz $ global: zmienną clusterConnection który zawiera lokalną zmienną $ clusterConnection

$global:clusterConnection = $clusterConnection 
+0

Dzięki za pomoc, przypisano zmienną lokalną do globalnej i wygląda na to, że teraz działa – TomaszMaryniak

+0

Po zresetowaniu lokalnego klastra i ponownym użyciu połączenia otrzymasz komunikat 'Błąd: ... Wyjątek: Obiekt jest zamknięty. -> Wyjątek od HRESULT: 0x80071BFE'. Uruchomienie nowego okna programu Power Shell umożliwia jego naprawę. –

+0

Uruchomienie 'Connect-ServiceFabricCluster' po resecie spowoduje:' Connect-ServiceFabricCluster: Obiekt jest zamknięty. W linii: 1 char: 1 + Connect-ServiceFabricCluster + CategoryInfo: InvalidOperation: (:) [Connect-ServiceFabricCluster], FabricObjectClosedException + FullyQualifiedErrorId: TestClusterConnectionErrorId, Microsoft.ServiceFabric.Powershell.ConnectCluster' –

Powiązane problemy