Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Den här artikeln beskriver hur du paketar ett Service Fabric-program och gör det redo för distribution.
Paketlayout
Programmanifestet, ett eller flera tjänstmanifest och andra nödvändiga paketfiler måste ordnas i en specifik layout för distribution till ett Service Fabric-kluster. Exempelmanifesten i den här artikeln måste ordnas i följande katalogstruktur:
tree /f .\MyApplicationType
D:\TEMP\MYAPPLICATIONTYPE
│ ApplicationManifest.xml
│
└───MyServiceManifest
│ ServiceManifest.xml
│
├───MyCode
│ MyServiceHost.exe
│
├───MyConfig
│ Settings.xml
│
└───MyData
init.dat
Mapparna namnges för att matcha namnattributen för varje motsvarande element. Om tjänstmanifestet till exempel innehåller två kodpaket med namnen MyCodeA och MyCodeB, skulle två mappar med samma namn innehålla de nödvändiga binärfilerna för varje kodpaket.
Använd SetupEntryPoint
Vanliga scenarier för att använda SetupEntryPoint är när du behöver köra en körbar fil innan tjänsten startar eller om du behöver utföra en åtgärd med förhöjd behörighet. Till exempel:
- Konfigurera och initiera miljövariabler som den körbara tjänsten behöver. Det är inte begränsat till endast körbara filer som skrivits via Service Fabric-programmeringsmodellerna. Npm.exe behöver till exempel vissa miljövariabler som konfigurerats för att distribuera ett Node.js program.
- Konfigurera åtkomstkontroll genom att installera säkerhetscertifikat.
Mer information om hur du konfigurerar SetupEntryPoint finns i Konfigurera principen för en startpunkt för tjänstkonfiguration
Konfigurera
Skapa ett paket med hjälp av Visual Studio
Om du använde Visual Studio för att skapa ditt program kan du använda kommandot Paket för att automatiskt skapa ett paket som matchar layouten som beskrivs ovan.
Om du vill skapa ett paket högerklickar du på programprojektet i Solution Explorer och väljer kommandot Paket :
När paketeringen är klar kan du hitta platsen för paketet i fönstret Utdata . Paketeringssteget sker automatiskt när du distribuerar eller felsöker ditt program i Visual Studio.
Skapa ett paket efter kommandorad
Det är också möjligt att programmatiskt paketera ditt program med hjälp av msbuild.exe. Visual Studio kör dem bakom kulisserna så att resultatet blir detsamma.
D:\Temp> msbuild HelloWorld.sfproj /t:Package
Testa paketet
Du kan verifiera paketstrukturen lokalt via PowerShell med hjälp av kommandot Test-ServiceFabricApplicationPackage . Det här kommandot söker efter problem med manifestparsning och verifierar alla referenser. Det här kommandot verifierar endast den strukturella korrektheten för katalogerna och filerna i paketet. Den verifierar inte något av innehållet i koden eller datapaketet utöver att kontrollera att alla nödvändiga filer finns.
Test-ServiceFabricApplicationPackage .\MyApplicationType
False
Test-ServiceFabricApplicationPackage : The EntryPoint MySetup.bat is not found.
FileName: C:\Users\servicefabric\AppData\Local\Temp\TestApplicationPackage_7195781181\nrri205a.e2h\MyApplicationType\MyServiceManifest\ServiceManifest.xml
Det här felet visar att denMySetup.bat fil som refereras i tjänstmanifestet SetupEntryPoint saknas i kodpaketet. När den saknade filen har lagts till godkänns programverifieringen:
tree /f .\MyApplicationType
D:\TEMP\MYAPPLICATIONTYPE
│ ApplicationManifest.xml
│
└───MyServiceManifest
│ ServiceManifest.xml
│
├───MyCode
│ MyServiceHost.exe
│ MySetup.bat
│
├───MyConfig
│ Settings.xml
│
└───MyData
init.dat
Test-ServiceFabricApplicationPackage .\MyApplicationType
True
Om programmet har definierat programparametrar kan du skicka dem i Test-ServiceFabricApplicationPackage för korrekt validering.
Om du känner till klustret där programmet kommer att distribueras rekommenderar vi att du skickar in parametern ImageStoreConnectionString . I det här fallet verifieras även paketet mot tidigare versioner av programmet som redan körs i klustret. Valideringen kan till exempel identifiera om ett paket med samma version men ett annat innehåll redan har distribuerats.
När programmet har paketerat korrekt och godkänt valideringen bör du överväga att komprimera paketet för snabbare distributionsåtgärder.
Komprimera ett paket
När ett paket är stort eller har många filer kan du komprimera det för snabbare distribution. Komprimering minskar antalet filer och paketstorleken. För ett komprimerat programpaket kan det ta längre tid att ladda upp programpaketet jämfört med att ladda upp det okomprimerade paketet, särskilt om komprimering görs som en del av kopian. Med komprimering går det snabbare att registrera och avregistrera programtypen .
Distributionsmekanismen är densamma för komprimerade och okomprimerade paket. Om paketet komprimeras lagras det som sådant i klusteravbildningsarkivet och det är okomprimerat på noden innan programmet körs. Komprimering ersätter det giltiga Service Fabric-paketet med den komprimerade versionen. Mappen måste tillåta skrivbehörigheter. Att köra komprimering på ett redan komprimerat paket ger inga ändringar.
Du kan komprimera ett paket genom att köra PowerShell-kommandot Copy-ServiceFabricApplicationPackage med CompressPackage switch. Du kan avkomprimera paketet med samma kommando med hjälp av UncompressPackage switchen.
Följande kommando komprimerar paketet utan att kopiera det till avbildningsarkivet. Du kan kopiera ett komprimerat paket till ett eller flera Service Fabric-kluster efter behov med hjälp av Copy-ServiceFabricApplicationPackage utan SkipCopy flaggan.
Paketet innehåller nu zippade filer för paketen code, configoch data . Programmanifestet och tjänstmanifesten är inte zippade eftersom de behövs för många interna åtgärder. Till exempel behöver paketdelning, programtypsnamn och versionsextrahering för vissa valideringar alla komma åt manifesten. Om du zippar manifesten blir de här åtgärderna ineffektiva.
tree /f .\MyApplicationType
D:\TEMP\MYAPPLICATIONTYPE
│ ApplicationManifest.xml
│
└───MyServiceManifest
│ ServiceManifest.xml
│
├───MyCode
│ MyServiceHost.exe
│ MySetup.bat
│
├───MyConfig
│ Settings.xml
│
└───MyData
init.dat
Copy-ServiceFabricApplicationPackage -ApplicationPackagePath .\MyApplicationType -CompressPackage -SkipCopy
tree /f .\MyApplicationType
D:\TEMP\MYAPPLICATIONTYPE
│ ApplicationManifest.xml
│
└───MyServiceManifest
ServiceManifest.xml
MyCode.zip
MyConfig.zip
MyData.zip
Du kan också komprimera och kopiera paketet med Copy-ServiceFabricApplicationPackage i ett steg. Om paketet är stort ger du en tillräckligt hög tidsgräns för att ge tid för både paketkomprimering och uppladdning till klustret.
Copy-ServiceFabricApplicationPackage -ApplicationPackagePath .\MyApplicationType -ApplicationPackagePathInImageStore MyApplicationType -ImageStoreConnectionString fabric:ImageStore -CompressPackage -TimeoutSec 5400
Internt beräknar Service Fabric kontrollsummor för programpaketen för validering. När du använder komprimering beräknas kontrollsummorna på de zippade versionerna av varje paket. Om du genererar en ny zip från samma programpaket skapas olika kontrollsummor. Om du vill förhindra verifieringsfel använder du diff-etablering. Med det här alternativet ska du inte inkludera de oförändrade paketen i den nya versionen. Referera i stället till dem direkt från det nya tjänstmanifestet.
Om diff-etablering inte är ett alternativ och du måste inkludera paketen genererar du nya versioner för paketen code, configoch data för att undvika att kontrollsumman matchar fel. Det är nödvändigt att generera nya versioner för oförändrade paket när ett komprimerat paket används, oavsett om den tidigare versionen använder komprimering eller inte.
Paketet paketeras nu korrekt, verifieras och komprimeras (om det behövs), så det är redo för distribution till ett eller flera Service Fabric-kluster.
Komprimera paket vid distribution med Hjälp av Visual Studio
Du kan instruera Visual Studio att komprimera paket vid distribution genom att lägga till elementet i CopyPackageParameters publiceringsprofilen och ange CompressPackage attributet till true.
<PublishProfile xmlns="http://schemas.microsoft.com/2015/05/fabrictools">
<ClusterConnectionParameters ConnectionEndpoint="mycluster.westus.cloudapp.azure.com" />
<ApplicationParameterFile Path="..\ApplicationParameters\Cloud.xml" />
<CopyPackageParameters CompressPackage="true"/>
</PublishProfile>
Skapa en sfpkg
Från och med version 6.1 tillåter Service Fabric tillhandahållande från en extern lagring.
Med det här alternativet behöver programpaketet inte kopieras till bildlagret. I stället kan du skapa en sfpkg-fil, ladda upp den till en extern lagringsplats och sedan ange URI:n för nedladdning till Service Fabric vid etablering. Det samma paket kan tillhandahållas till flera kluster. Tillhandahållande från den externa lagringsplatsen sparar tid som annars går åt till att kopiera paketet till varje kluster.
Filen sfpkg är en zip som innehåller det första programpaketet och har tillägget .sfpkg. Inuti zip-filen kan programpaketet komprimeras eller okomprimeras. Komprimering av programpaketet i zip görs på kod-, konfigurations- och datapaketnivåer, som tidigare nämnts.
Om du vill skapa en sfpkg fil börjar du med en mapp som innehåller det ursprungliga programpaketet, komprimerat eller inte. Använd sedan alla verktyg för att zippa mappen med tillägget ".sfpkg". Använd till exempel ZipFile.CreateFromDirectory.
ZipFile.CreateFromDirectory(appPackageDirectoryPath, sfpkgFilePath);
sfpkg måste laddas upp till det externa lagret via sidokanaler, utanför Service Fabric. Det externa arkivet kan vara vilket arkiv som helst som exponerar en REST http- eller https-slutpunkt. Under provisioneringen kör Service Fabric en GET-åtgärd för att ladda ned sfpkg programpaketet, så arkivet måste tillåta lästillgång för paketet.
Om du vill etablera paketet använder du extern etablering, vilket kräver nedladdnings-URI:n och programtypsinformationen.
Anmärkning
Etablering baserat på den relativa sökvägen för avbildningsarkivet stöder för närvarande inte sfpkg-filer. Därför bör sfpkg inte kopieras till bildarkivet.
Nästa steg
Distribuera och ta bort program beskriver hur du använder PowerShell för att hantera programinstanser
Hantering av programparametrar för flera miljöer beskriver hur du konfigurerar parametrar och miljövariabler för olika programinstanser.
Konfigurera säkerhetsprinciper för ditt program beskriver hur du kör tjänster under säkerhetsprinciper för att begränsa åtkomsten.