Paketera ett program

I den här artikeln beskrivs hur du paketerar Service Fabric ett 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 viss 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 så att de matchar 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 nödvändiga binärfiler 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 utökade privilegier. 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 programmeringsmodeller. Till exempel npm.exe 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änstinstallation

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 den layout som beskrivs ovan.

Om du vill skapa ett paket högerklickar du på programprojektet i Solution Explorer och väljer kommandot Paket:

Paketera ett program med Visual Studio

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 via kommandorad

Det är också möjligt att programmatiskt paketera programmet med hjälp av msbuild.exe . Under huven kör Visual Studio så 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 manifestparsningsproblem och verifierar alla referenser. Det här kommandot verifierar endast den strukturella korrektheten hos katalogerna och filerna i paketet. Det verifierar inte någon kod eller datapakets innehåll 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 MySetup.bat som refereras i tjänstmanifestet SetupEntryPoint saknas i kodpaketet. När den saknade filen har lagts till skickar 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 definierade programparametrar kan du skicka dem i Test-ServiceFabricApplicationPackage för korrekt verifiering.

Om du känner till klustret där programmet ska distribueras rekommenderar vi att du skickar in ImageStoreConnectionString parametern . I det här fallet verifieras paketet även mot tidigare versioner av programmet som redan körs i klustret. Valideringen kan till exempel identifiera om ett paket med samma version men annat innehåll redan har distribuerats.

När programmet har paketerats korrekt och klarar 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 komprimeringen görs som en del av kopieringen. Med komprimering går det snabbare att registrera och avregistrera programtypen.

Distributionsmekanismen är samma för komprimerade och okomprimerade paket. Om paketet komprimeras lagras det som det i klusteravbildningsarkivet och dekomprimeras på noden innan programmet körs. Komprimeringen ersätter det Service Fabric paketet med den komprimerade versionen. Mappen måste tillåta skrivbehörighet. Körning av komprimering på ett redan komprimerat paket ger inga ändringar.

Du kan komprimera ett paket genom att köra Powershell-kommandot Copy-ServiceFabricApplicationPackage med CompressPackage växeln . 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 Service Fabric kluster efter behov med hjälp av Copy-ServiceFabricApplicationPackage utan SkipCopy flaggan . Paketet innehåller nu komprimerade filer för code config paketen , och data . Programmanifestet och tjänstmanifesten är inte komprimerade, eftersom de behövs för många interna åtgärder. Paketdelning, programtypsnamn och extrahering av version för vissa verifieringar behöver till exempel åtkomst till manifesten. Om manifesten komprimeras skulle de här åtgärderna bli 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 enda steg. Om paketet är stort ger du en tillräckligt hög tidsgräns för att tillåta 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 kontrollsumor för programpaketen för verifiering. När du använder komprimering beräknas kontrollsumorna på de komprimerade versionerna av varje paket. När du genererar en ny zip-fil från samma programpaket skapas olika kontrollsumme. Använd diff-etablering för att förhindra verifieringsfel. Inkludera inte de oförändrade paketen i den nya versionen med det här alternativet. 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 , och för att undvika code config matchningsfel för data kontrollsumma. Det är nödvändigt att generera nya versioner för oförändrade paket när ett komprimerat paket används, oavsett om tidigare version använder komprimering eller inte.

Paketet är nu korrekt paketerat, verifierat och komprimerat (om det behövs), så det är redo för distribution till ett eller flera Service Fabric kluster.

Komprimera paket vid distribution med Visual Studio

Du kan instruera Visual Studio att komprimera paket vid distribution genom att lägga till elementet i din publiceringsprofil och CopyPackageParameters 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 Service Fabric etablering från ett externt arkiv. Med det här alternativet behöver inte programpaketet kopieras till avbildningslagret. I stället kan du skapa en fil och ladda upp den till ett externt arkiv och sedan ange sfpkg nedladdnings-URI:Service Fabric när du etablerar. 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-fil som innehåller det första programpaketet och har tillägget .sfpkg . I zip-filen kan programpaketet komprimeras eller okomprimeras. Komprimeringen av programpaketet inuti zip-filen görs på kod-, konfigurations- och datapaketnivåer, som tidigare nämnts.

Om du vill sfpkg skapa en 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);

sfpkgmåste laddas upp till det externa lagret out-of-band utanför Service Fabric. Det externa arkivet kan vara vilket arkiv som helst som exponerar en REST http- eller https-slutpunkt. Under etableringen Service Fabric en GET-åtgärd för att ladda ned programpaketet, så arkivet måste sfpkg tillåta READ-åtkomst för paketet.

Om du vill etablera paketet använder du extern etablering, vilket kräver nedladdnings-URI och programtypsinformation.

Anteckning

Etablering baserat på relativ sökväg för avbildningsarkiv stöder för närvarande inte sfpkg filer. Därför bör sfpkg inte kopieras till avbildningslagret.

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.