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:

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 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, configoch 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 - configoch data -paketen codefö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.