Paketera ett program
Den här artikeln beskriver hur du paketera 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 organiseras 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ända 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. Exempel:
- Konfigurera och initiera miljövariabler som tjänstens körbara behov behöver. Det är inte begränsat till endast körbara filer som skrivs 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 Package 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 programmet med hjälp av msbuild.exe
. Under huven kör Visual Studio den så att utdata är desamma.
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 hos katalogerna och filerna i paketet. Det verifierar inte något av koden eller datapaketinnehållet 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 till 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 parametern ImageStoreConnectionString
. I det här fallet verifieras även paketet mot tidigare versioner av programmet som redan körs i klustret. Verifieringen 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
, config
och data
. Programmanifestet och tjänstmanifesten är inte zippade eftersom de behövs för många interna åtgärder. Paketdelning, programtypsnamn och versionsextrahering för vissa valideringar behöver till exempel 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 valideringsfel använder du diff-etablering. Med det här alternativet ska du inte ta med 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 - config
och data
-paketen code
för att undvika matchningsfel för kontrollsumman. 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 när du distribuerar med 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 etablering från ett externt arkiv.
Med det här alternativet behöver programpaketet inte kopieras till avbildningsarkivet. I stället kan du skapa en sfpkg
fil och ladda upp den till ett externt arkiv och sedan ange nedladdnings-URI:n till Service Fabric vid etablering. Samma paket kan etableras till flera kluster. Etablering från det externa arkivet sparar den tid som krävs för att kopiera paketet till varje kluster.
Filen sfpkg
är en zip som innehåller det första programpaketet och har tillägget .sfpkg
. I zip-filen kan programpaketet komprimeras eller okomprimeras. Komprimering av programpaketet i zip görs på kod-, konfigurations- och datapaketnivåer, som nämnts tidigare.
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 arkivet utanför band, utanför Service Fabric. Det externa arkivet kan vara vilket arkiv som helst som exponerar en REST http- eller https-slutpunkt. Under etableringen kör Service Fabric en GET-åtgärd för att ladda ned sfpkg
programpaketet, så arkivet måste tillåta READ-åtkomst för paketet.
Om du vill etablera paketet använder du extern etablering, vilket kräver nedladdnings-URI:n och programtypsinformationen.
Anteckning
Etablering baserat på den relativa sökvägen för bildarkivet stöder sfpkg
för närvarande inte filer. Därför sfpkg
bör inte kopieras till avbildningsarkivet.
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.