Självstudie: Distribuera till ett Service Fabric kluster
Den här självstudien beskriver flera möjliga sätt att konfigurera Jenkins-miljön samt olika sätt att distribuera ditt program till ett Service Fabric-kluster när det har skapats. Följ de här allmänna stegen för att konfigurera Jenkins, hämta ändringar från GitHub, skapa programmet och distribuera det till klustret:
- Se till att du installerar krav .
- Följ sedan stegen i något av de här avsnitten för att konfigurera Jenkins:
- När du har konfigurerat Jenkins följer du stegen i Skapa och konfigurerar ett Jenkins-jobb för att konfigurera GitHub för att utlösa Jenkins när ändringar görs i ditt program och för att konfigurera Jenkins-jobbpipelinen genom byggsteget för att hämta ändringarna från GitHub och skapa ditt program.
- Konfigurera slutligen Steget Jenkins-jobb efter kom build för att distribuera programmet till ditt Service Fabric kluster. Det finns två sätt att konfigurera Jenkins för att distribuera ditt program till ett kluster:
- För utvecklings- och testmiljöer använder du Konfigurera distribution med klusterhanteringsslutpunkten. Den här metoden är den enklaste distributionsmetoden att konfigurera.
- För produktionsmiljöer använder du Konfigurera distribution med azure-autentiseringsuppgifter. Microsoft rekommenderar den här metoden för produktionsmiljöer eftersom du med Azure-autentiseringsuppgifter kan begränsa åtkomsten som ett Jenkins-jobb har till dina Azure-resurser.
Förutsättningar
- Kontrollera att Git är installerat lokalt. Du kan installera lämplig Git-version från nedladdningssidan för Git baserat på ditt operativsystem. Om git är nytt för dig kan du läsa mer om det i Git-dokumentationen.
- Den här artikeln använder Service Fabric Komma igång exempel på GitHub: för programmet att skapa och distribuera. Du kan förföra den här lagringsplatsen för att följa med, eller, med vissa ändringar i instruktionerna, använda ditt eget GitHub projekt.
Installera Service Fabric plugin-program i en befintlig Jenkins-miljö
Om du lägger till Service Fabric plugin-programmet i en befintlig Jenkins-miljö måste du göra följande:
- Service Fabric CLI (sfctl). Installera CLI på systemnivå i stället för på användarnivå, så att Jenkins kan köra CLI-kommandon.
- Om du vill distribuera Java-program installerar du både Gradle och Open JDK 8.0.
- Om du vill distribuera .NET Core 2.0-program installerar du .NET Core 2.0 SDK.
När du har installerat de nödvändiga förutsättningarna för din miljö kan du söka efter Azure Service Fabric-plugin-programmet på Jenkins Marketplace och installera det.
När du har installerat plugin-programmet kan du gå vidare till Skapa och konfigurera ett Jenkins-jobb.
Konfigurera Jenkins i ett Service Fabric-kluster
Du kan konfigurera Jenkins i eller utanför ett Service Fabric-kluster. I följande avsnitt visas hur du ställer in det i ett kluster när du använder ett Azure Storage-konto för att spara containerinstansens tillstånd.
Kontrollera att du har en Service Fabric Linux-kluster med Docker installerat. Service Fabric som körs i Azure har redan Docker installerat. Om du kör klustret lokalt (OneBox dev environment) kontrollerar du om Docker är installerat på datorn med
docker infokommandot . Om den inte är installerad installerar du den med hjälp av följande kommandon:sudo apt-get install wget wget -qO- https://get.docker.io/ | shAnteckning
Kontrollera att porten 8081 har angetts som en anpassad slutpunkt i klustret. Om du använder ett lokalt kluster kontrollerar du att port 8081 är öppen på värddatorn och att den har en offentlig IP-adress.
Klona programmet med hjälp av följande kommandon:
git clone https://github.com/suhuruli/jenkins-container-application.git cd jenkins-container-applicationBevara tillståndet för Jenkins-containern i en filresurs:
Skapa ett Azure Storage-konto i samma region som klustret med ett namn som .
Skapa en filresurs under lagringskontot med ett namn som .
Klicka på Anslut för filresursen och notera de värden som visas under Ansluter från Linux. Värdet bör se ut ungefär så här:
sudo mount -t cifs //sfjenkinsstorage1.file.core.windows.net/sfjenkins [mount point] -o vers=3.0,username=sfjenkinsstorage1,password=<storage_key>,dir_mode=0777,file_mode=0777
Anteckning
Om du vill montera cifs-resurser måste du ha cifs-utils-paketet installerat i klusternoderna.
Uppdatera platshållarvärdena i
setupentrypoint.shskriptet med azure-storage-informationen från steg 2.vi JenkinsSF/JenkinsOnSF/Code/setupentrypoint.sh- Ersätt
[REMOTE_FILE_SHARE_LOCATION]med värdet från//sfjenkinsstorage1.file.core.windows.net/sfjenkinsutdata från anslutningen i steg 2 ovan. - Ersätt
[FILE_SHARE_CONNECT_OPTIONS_STRING]med värdet från stegvers=3.0,username=sfjenkinsstorage1,password=GB2NPUCQY9LDGeG9Bci5dJV91T6SrA7OxrYBUsFHyueR62viMrC6NIzyQLCKNz0o7pepGfGY+vTa9gxzEtfZHw==,dir_mode=0777,file_mode=07772 ovan.
- Ersätt
Endast säkert kluster:
Om du vill konfigurera distributionen av program på ett säkert kluster från Jenkins måste klustercertifikatet vara tillgängligt i Jenkins-containern. I den ApplicationManifest.xml filen under taggen ContainerHostPolicies lägger du till den här certifikatreferensen och uppdaterar tumavtrycksvärdet med värdet för klustercertifikatet.
<CertificateRef Name="MyCert" X509FindValue="[Thumbprint]"/>Lägg dessutom till följande rader under taggen ApplicationManifest (rot) i ApplicationManifest.xml-filen och uppdatera tumavtrycksvärdet med värdet för klustercertifikatet.
<Certificates> <SecretsCertificate X509FindType="FindByThumbprint" X509FindValue="[Thumbprint]" /> </Certificates>Anslut till klustret och installera containerprogrammet.
Säkert kluster
sfctl cluster select --endpoint https://PublicIPorFQDN:19080 --pem [Pem] --no-verify # cluster connect command bash Scripts/install.shFöregående kommando tar certifikatet i PEM-format. Om certifikatet är i PFX-format kan du använda följande kommando för att konvertera det. Om PFX-filen inte är lösenordsskyddad anger du passin-parametern som .
openssl pkcs12 -in cert.pfx -out cert.pem -nodes -passin pass:MyPassword1234!Oskyddat kluster
sfctl cluster select --endpoint http://PublicIPorFQDN:19080 # cluster connect command bash Scripts/install.shDetta installerar en Jenkins-container på klustret och kan övervakas med Service Fabric Explorer.
Anteckning
Det kan ta några minuter innan Jenkins-avbildningen laddas ned i klustret.
Gå till
http://PublicIPorFQDN:8081i webbläsaren. På sidan visas sökvägen till det ursprungliga administratörslösenordet som krävs för att logga in.Titta på Service Fabric Explorer för att avgöra vilken nod Jenkins-containern körs på. SSH-inloggning (Secure Shell) på den här noden.
ssh user@PublicIPorFQDN -p [port]Hämta containerns instans-ID med
docker ps -a.Secure Shell (SSH) loggar in i containern och klistrar in sökvägen du visades på Jenkins-portalen. Om till exempel sökvägen visas i portalen
PATH_TO_INITIAL_ADMIN_PASSWORDkör du följande kommandon:docker exec -t -i [first-four-digits-of-container-ID] /bin/bash # This takes you inside Docker shellcat PATH_TO_INITIAL_ADMIN_PASSWORD # This displays the password valuePå sidan Jenkins Komma igång väljer du alternativet Välj plugin-program att installera, markerar kryssrutan Ingen och klickar på Installera.
Skapa en användare eller välj att fortsätta som administratör.
När du har konfigurerat Jenkins kan du gå vidare till Skapa och konfigurera ett Jenkins-jobb.
Konfigurera Jenkins utanför ett Service Fabric-kluster
Du kan konfigurera Jenkins i eller utanför ett Service Fabric-kluster. I följande avsnitt visas hur du konfigurerar Jenkins utanför ett kluster.
Kontrollera att Docker är installerat på datorn genom att köra
docker infoi terminalen. Utdata anger om Docker-tjänsten körs.Om Docker inte är installerat kör du följande kommandon:
sudo apt-get install wget wget -qO- https://get.docker.io/ | shHämta containeravbildningen för Service Fabric Jenkins:
docker pull rapatchi/jenkins:latest. Den här avbildningen Service Fabric jenkins-plugin-programmet förinstallerat.Kör containeravbildningen:
docker run -itd -p 8080:8080 rapatchi/jenkins:latestHämta ID:t för containeravbildningsinstansen. Du kan visa en lista med alla Docker-containrar med hjälp av kommandot
docker ps –aLogga in på Jenkins-portalen med följande steg:
Logga in på ett Jenkins-gränssnitt från värden. Använd de första fyra siffrorna i container-ID:t. Om container-ID:t till exempel är
2d24a73b5964använder du2d24.docker exec -it [first-four-digits-of-container-ID] /bin/bashHämta administratörslösenordet för containerinstansen från Jenkins-gränssnittet:
cat /var/jenkins_home/secrets/initialAdminPasswordOm du vill logga in på Jenkins-instrumentpanelen öppnar du följande URL i en webbläsare:
http://<HOST-IP>:8080. Använd lösenordet från föregående steg för att låsa upp Jenkins.(Valfritt.) När du har loggat in för första gången kan du skapa ett eget användarkonto och använda det för följande steg, eller så kan du fortsätta att använda administratörskontot. Om du skapar en användare måste du fortsätta med den användaren.
Konfigurera GitHub arbeta med Jenkins med hjälp av stegen i Generera en ny SSH-nyckel och lägga till den i SSH-agenten.
Följ instruktionerna från GitHub för att skapa SSH-nyckeln och lägga till SSH-nyckeln på det GitHub-konto som är (blir) värd för databasen.
Kör de kommandon som nämns i länken ovan i Jenkins Docker-gränssnittet (och inte på värden).
Om du vill logga in till Jenkins-gränssnittet från värden ska du använda följande kommando:
docker exec -t -i [first-four-digits-of-container-ID] /bin/bash
Kontrollera att klustret eller datorn där Jenkins-containeravbildningen finns har en offentlig IP-adress. Detta gör att Jenkins-instansen kan ta emot meddelanden från GitHub.
När du har konfigurerat Jenkins fortsätter du till nästa avsnitt, Skapa och konfigurera ett Jenkins-jobb.
Skapa och konfigurera ett Jenkins-jobb
Stegen i det här avsnittet visar hur du konfigurerar ett Jenkins-jobb för att svara på ändringar i en GitHub-lagringsplatsen, hämta ändringarna och skapa dem. I slutet av det här avsnittet dirigeras du till de sista stegen för att konfigurera jobbet för att distribuera ditt program baserat på om du distribuerar till en utvecklings-/testmiljö eller till en produktionsmiljö.
På Jenkins-instrumentpanelen klickar du på Nytt objekt.
Ange ett namn (till exempel MyJob). Välj free-style project (freestyle-projekt) och klicka på OK.
Sidan Jobbkonfiguration öppnas. (För att komma till konfigurationen från Jenkins-instrumentpanelen klickar du på jobbet och sedan på Konfigurera).
På fliken Allmänt markerar du kryssrutan för GitHub ochanger URL:en GitHub ditt projekt. Den här URL:en är värd för det Service Fabric Java-program som du vill integrera med Jenkins CI/CD-flödet (t.ex.
https://github.com/{your-github-account}/service-fabric-java-getting-started).På fliken Källkodshantering väljer du Git. Ange URL för databasen som är värd för det Service Fabric Java-program som du vill integrera med Jenkins CI/CD-flödet (t.ex.
https://github.com/{your-github-account}/service-fabric-java-getting-started). Du kan också ange vilken gren som ska byggas (till exempel/master).Konfigurera din GitHub att prata med Jenkins:
På sidan GitHub lagringsplats går du till InställningarIntegrations and Services.
Välj Lägg tilltjänst, skriv Jenkinsoch välj jenkins-GitHub-plugin-programmet.
Ange din Jenkins-webhooksadress (som standard ska den vara
http://<PublicIPorFQDN>:8081/github-webhook/). Klicka på Lägg till/Uppdatera tjänsten.En testhändelse skickas till Jenkins-instansen. Du bör se en grön bock vid webhooken i GitHub och projektet skapas.
På fliken Build Triggers (Byggutlösare) i Jenkins väljer du det byggalternativ som du vill använda. I det här exemplet vill du utlösa ett bygge när en push till lagringsplatsen sker, så välj GitHub hook-utlösare för GITScm-avsökning. (Tidigare hette det här alternativet Build when a change is pushed to GitHub) (Bygg när en ändring skickas till GitHub).
På fliken Skapa gör du något av följande beroende på om du skapar ett Java-program eller ett .NET Core-program:
För Java-program: I listrutan Lägg till byggsteg väljer du Anropa Gradle-skript. Klicka på Avancerat. På den avancerade menyn anger du sökvägen till rotbyggskriptet för ditt program. Då hämtas build.gradle från den angivna sökvägen och fungerar på motsvarande sätt. För ActorCounter-programmetär detta: .

För .NET Core-program: I listrutan Lägg till byggsteg väljer du Kör gränssnitt. I kommandorutan som visas måste katalogen först ändras till sökvägen
build.shdär filen finns. När katalogen har ändrats kanbuild.shskriptet köras för att skapa programmet.cd /var/jenkins_home/workspace/[Job Name]/[Path to build.sh] ./build.shFöljande skärmbild visar ett exempel på de kommandon som används för att skapa räknartjänstexempel med Jenkins-jobbnamnet .

För att konfigurera Jenkins för att distribuera din app till ett Service Fabric-kluster i åtgärderna efter kombuering behöver du platsen för klustrets certifikat i Jenkins-containern. Välj något av följande beroende på om Jenkins-containern körs i eller utanför klustret och notera platsen för klustercertifikatet:
För Jenkins som körs i klustret: Sökvägen till certifikatet kan hittas genom att värdet för Certificates_JenkinsOnSF_Code_MyCert_PEM miljövariabeln inifrån containern.
echo $Certificates_JenkinsOnSF_Code_MyCert_PEMFör Jenkins som körs utanför klustret: Följ dessa steg för att kopiera klustercertifikatet till containern:
Certifikatet måste vara i PEM-format. Om du inte har en PEM-fil kan du skapa en från certifikatets PFX-fil. Om PFX-filen inte är lösenordsskyddad kör du följande kommando från värden:
openssl pkcs12 -in clustercert.pfx -out clustercert.pem -nodes -passin pass:Om PFX-filen är lösenordsskyddad inkluderar du lösenordet i
-passinparametern . Till exempel:openssl pkcs12 -in clustercert.pfx -out clustercert.pem -nodes -passin pass:MyPassword1234!Hämta container-ID:t för Jenkins-containern genom att
docker psköra från värden.Kopiera PEM-filen till containern med följande Docker-kommando:
docker cp clustercert.pem [first-four-digits-of-container-ID]:/var/jenkins_home
Du är nästan klar! Låt Jenkins-jobbet vara öppet. Den enda återstående uppgiften är att konfigurera stegen efter bygget för att distribuera ditt program till ditt Service Fabric kluster:
- Om du vill distribuera till en utvecklings- eller testmiljö följer du stegen i Konfigurera distribution med slutpunkten för klusterhantering.
- Om du vill distribuera till en produktionsmiljö följer du stegen i Konfigurera distribution med Azure-autentiseringsuppgifter.
Konfigurera distribution med klusterhanteringsslutpunkt
För utvecklings- och testmiljöer kan du använda klusterhanteringsslutpunkten för att distribuera ditt program. Att konfigurera åtgärden efter kombueringen med klusterhanteringsslutpunkten för att distribuera ditt program kräver minst konfiguration. Om du distribuerar till en produktionsmiljö kan du gå vidare till Konfigurera distribution med Azure-autentiseringsuppgifter för att konfigurera Azure Active Directory tjänstens huvudnamn som ska användas under distributionen.
I Jenkins-jobbet klickar du på fliken Post-build Actions (Åtgärder efter att ha byggts).
I listrutan Post-Build Actions (Åtgärder efter skapandet) väljer du Deploy Service Fabric Project (Distribuera Service Fabric-projekt).
Under Service Fabric Klusterkonfigurationväljer du alternativknappen Fyll Service Fabric hanteringsslutpunkt.
För Hanteringsvärdanger du anslutningsslutpunkten för klustret. till exempel .
För Klientnyckel ochKlient-certifikatanger du platsen för PEM-filen i Jenkins-containern. till exempel . (Du kopierade platsen för certifikatet det sista steget i Skapa och konfigurera ett Jenkins-jobb.)
Under Programkonfigurationkonfigurerar du fälten Programnamn,Programtypoch (relativ) Sökväg till programmanifest.

Klicka på Verifiera konfiguration. Vid lyckad verifiering klickar du på Spara. Din Jenkins-jobbpipeline är nu fullständigt konfigurerad. Gå vidare till Nästa steg för att testa distributionen.
Konfigurera distribution med Azure-autentiseringsuppgifter
För produktionsmiljöer rekommenderas det starkt att konfigurera en Azure-autentiseringsidentifiering för att distribuera ditt program. Det här avsnittet visar hur du konfigurerar Azure Active Directory tjänsthuvudnamn som ska användas för att distribuera ditt program i åtgärden efter kom build. Du kan tilldela tjänstens huvudnamn till roller i din katalog för att begränsa behörigheterna för Jenkins-jobbet.
För utvecklings- och testmiljöer kan du konfigurera antingen Azure-autentiseringsuppgifter eller klusterhanteringsslutpunkten för att distribuera ditt program. Mer information om hur du konfigurerar en slutpunkt för klusterhantering finns i Konfigurera distribution med slutpunkten för klusterhantering.
Om du vill Azure Active Directory ett huvudnamn för tjänsten och tilldela den behörigheter i din Azure-prenumeration följer du stegen i Använda portalen för att skapa ett Azure Active Directory-program och tjänstens huvudnamn. Var uppmärksam på följande:
- När du följer stegen i avsnittet måste du kopiera och spara följande värden: Program-ID,Programnyckel,Katalog-ID (klient-ID)och prenumerations-ID. Du behöver dem för att konfigurera Azure-autentiseringsuppgifterna i Jenkins.
- Om du inte har de behörigheter som krävs för din katalog måste du be en administratör att antingen bevilja dig behörigheterna eller skapa tjänstens huvudnamn åt dig, eller så måste du konfigurera hanteringsslutpunkten för klustret i Post-Build Actions för jobbet i Jenkins.
- I avsnittet Skapa Azure Active Directory ett program kan du ange en väl utformad URL för inloggnings-URL:en.
- I avsnittet Tilldela program till en roll kan du tilldela programmet rollen Läsare i resursgruppen för klustret.
När du är tillbaka i Jenkins-jobbet klickar du på fliken Post-build Actions (Åtgärder efter bygget).
I listrutan Post-Build Actions (Åtgärder efter skapandet) väljer du Deploy Service Fabric Project (Distribuera Service Fabric-projekt).
Under Service Fabric Klusterkonfigurationklickar du på Välj Service Fabric kluster. Klicka på Lägg till bredvid Azure Credentials (Azure-autentiseringsuppgifter). Klicka på Jenkins för att välja Jenkins-autentiseringsuppgifternas provider.
I Jenkins-autentiseringsuppgifternas provider väljer Microsoft Azure tjänsthuvudnamni listrutan Typ.
Använd de värden som du sparade när du konfigurerade tjänstens huvudnamn i steg 1 för att ange följande fält:
- Klient-ID:Program-ID
- Klienthemlighet:Programnyckel
- Klientorganisations-ID:Katalog-ID
- Prenumerations-ID:Prenumerations-ID
Ange ett beskrivande ID som du använder för att välja autentiseringssuppgifter i Jenkins och en kort Beskrivning. Klicka sedan på Verify Service Principal (Verifiera tjänstens huvudnamn). Om verifieringen lyckas klickar du på Lägg till.

Kontrollera att dina nya Service Fabrichar valts för Azure-autentiseringsuppgifter under Service Fabric klusterkonfiguration.
I listrutan Resursgrupp väljer du resursgruppen för det kluster som du vill distribuera programmet till.
I listrutan Service Fabric du det kluster som du vill distribuera programmet till.
För Klientnyckel ochKlient-certifikatanger du platsen för PEM-filen i Jenkins-containern. Till exempel
/var/jenkins_home/clustercert.pem.Under Programkonfigurationkonfigurerar du fälten Programnamn,Programtypoch (relativ) Sökväg till programmanifest.

Klicka på Verifiera konfiguration. Vid lyckad verifiering klickar du på Spara. Din Jenkins-jobbpipeline är nu fullständigt konfigurerad. Fortsätt till Nästa steg för att testa distributionen.
Felsökning av Jenkins-plugin-programmet
Om du stöter på buggar med Jenkins-plugin-programmet kan du rapportera ett problem i Jenkins JIRA för den specifika komponenten.
Idéer att prova
GitHub och Jenkins har nu konfigurerats. Överväg att göra några exempel på ändringar reliable-services-actor-sample/Actors/ActorCounter i projektet i din fördring av lagringsplatsen, https://github.com/Azure-Samples/service-fabric-java-getting-started . Push-skicka ändringarna till master fjärrgrenen (eller någon gren som du har konfigurerat för att arbeta med). Detta utlöser Jenkins-jobbet (MyJob) som du konfigurerade. Den hämtar ändringarna från GitHub, skapar dem och distribuerar programmet till det kluster som du angav i åtgärderna efter bygget.