2016-06-29 1 views
6

Я пытаюсь опубликовать приложение Service Fabric для Azure с помощью powershell. Я хочу подключиться к кластеру, а затем вызвать скрипт «Deploy-FabricApplication.ps1» (тот, который создается при создании нового проекта в visual studio)Развертывание сервисной ткани из powershell. Ошибка -> Get-ServiceFabricClusterManifest: экземпляр подключения кластера равен нулю

Для этого я создал новый файл сценария, который отвечает за подключение с кластером, а затем из того же файла сценария, я вызываю «Deploy-FabricApplication.ps1».

После запуска моего сценария я получаю следующее сообщение об ошибке:

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 

В сценарии подключения и разворачивать-FabricApplication.ps1 Я звоню «Тест-ServiceFabricClusterConnection» и в обоих сценариях он возвращает Правда также в обоих сценариях я я вызываю «Get-ServiceFabricClusterManifest», и в обоих случаях он возвращает мне манифест, но когда я добавил «Test-ServiceFabricClusterConnection» в «Publish-UpgradedServiceFabricApplication.ps1», тогда он вернул ту же ошибку, что упоминалось выше, но для «Test-ServiceFabricClusterConnection» " вызов.

Код для подключения сценария:

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 

Подводя итог, я понятия не имею, как установить подключение к кластеру, а затем использовать его в Deploy-FabricApplication.ps1

Спасибо за помощь

ответ

11

При вызове Connect-ServiceFabricCluster установлена ​​переменная $clusterConnection. Некоторые сценарии SDK ожидают, что переменная будет установлена, но поскольку вы выполняете свой скрипт в разных областях, эта локальная переменная недоступна для них.

Вы можете либо точечный источник вызов Развертывание-FabricApplication.ps1

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

или создать $ глобальная: переменную clusterConnection, которая содержит локального $ clusterConnection переменного

$global:clusterConnection = $clusterConnection 
+0

Спасибо за помощь, я назначили локальную переменную глобальной, и теперь она работает – TomaszMaryniak

+0

Если вы затем перезагрузите свой локальный кластер и попробуйте повторно использовать соединение, вы получите 'Error: ... Exception: объект закрыт. -> Исключение из HRESULT: 0x80071BFE'. Запуск нового окна PowerShell исправляет его. –

+0

И запустив 'Connect-ServiceFabricCluster' после сброса, вы получите:' Connect-ServiceFabricCluster: объект закрыт. В строке: 1 char: 1 + Connect-ServiceFabricCluster + CategoryInfo: InvalidOperation: (:) [Connect-ServiceFabricCluster], FabricObjectClosedException + FullyQualifiedErrorId: TestClusterConnectionErrorId, Microsoft.ServiceFabric.Powershell.ConnectCluster' –

 Смежные вопросы

  • Нет связанных вопросов^_^