Zelfstudie: Implementeren naar een Service Fabric cluster

Deze zelfstudie bevat verschillende manieren om uw Jenkins-omgeving in te stellen, evenals verschillende manieren om uw toepassing te implementeren in een Service Fabric-cluster nadat deze is gebouwd. Volg deze algemene stappen om Jenkins te configureren, wijzigingen op te halen uit GitHub, uw toepassing te bouwen en deze te implementeren in uw cluster:

  1. Zorg ervoor dat u prerequisites installeert.
  2. Volg vervolgens de stappen in een van deze secties om Jenkins in te stellen:
  3. Nadat u Jenkins hebt ingesteld, volgt u de stappen in Een Jenkins-taak maken en configureren om GitHub in te stellen om Jenkins te activeren wanneer er wijzigingen worden aangebracht in uw toepassing en om uw Jenkins-taakpijplijn te configureren via de build-stap om de wijzigingen op te halen uit GitHub en uw toepassing te bouwen.
  4. Configureer ten slotte de Jenkins-taak na de build-stap om uw toepassing te implementeren in Service Fabric cluster. Er zijn twee manieren om Jenkins te configureren voor het implementeren van uw toepassing in een cluster:

Vereisten

  • Zorg ervoor dat Git lokaal is geïnstalleerd. U kunt de juiste Git-versie installeren vanaf de Git-downloadpagina op basis van uw besturingssysteem. Als u niet weet wat Git is, kunt u hier meer over lezen in de Git-documentatie.
  • In dit artikel wordt het Service Fabric Aan de slag voorbeeld op GitHub: voor het bouwen en implementeren van de toepassing. U kunt deze opslagplaats vorken om mee te volgen of, met enige aanpassing van de instructies, uw eigen GitHub gebruiken.

Een Service Fabric installeren in een bestaande Jenkins-omgeving

Als u de ingebouwde Service Fabric toevoegt aan een bestaande Jenkins-omgeving, moet u de volgende stappen volgen:

Nadat u de vereisten voor uw omgeving hebt geïnstalleerd, kunt u zoeken naar de Azure Service Fabric in jenkins marketplace en deze installeren.

Nadat u de in plug-in hebt geïnstalleerd, gaat u verder met Een Jenkins-taak maken en configureren.

Jenkins instellen in een Service Fabric-cluster

U kunt Jenkins instellen binnen of buiten een Service Fabric-cluster. De volgende secties laten zien hoe u dit in een cluster kunt instellen terwijl u een Azure-opslagaccount gebruikt om de status van de container-instantie op te slaan.

  1. Zorg ervoor dat u een linux Service Fabric cluster hebt geïnstalleerd met Docker. Service Fabric clusters die in Azure worden uitgevoerd, hebben Docker al geïnstalleerd. Als u het cluster lokaal (OneBox-dev-omgeving) gebruikt, controleert u met de opdracht of Docker op uw computer is docker info geïnstalleerd. Als deze niet is geïnstalleerd, installeert u deze met behulp van de volgende opdrachten:

    sudo apt-get install wget
    wget -qO- https://get.docker.io/ | sh
    

    Notitie

    Zorg ervoor dat de poort 8081 is opgegeven als een aangepast eindpunt op het cluster. Als u een lokaal cluster gebruikt, moet u ervoor zorgen dat poort 8081 is geopend op de hostmachine en dat het een openbaar IP-adres heeft.

  2. Kloon de toepassing met behulp van de volgende opdrachten:

    git clone https://github.com/suhuruli/jenkins-container-application.git
    cd jenkins-container-application
    
  3. Behoudt de status van de Jenkins-container in een bestands share:

    1. Maak een Azure-opslagaccount in dezelfde regio als uw cluster met een naam zoals .

    2. Maak een bestands share onder het opslagaccount met een naam zoals .

    3. Klik op Verbinding maken voor de bestands share en noteer de waarden die worden weergegeven onder Verbinding maken vanuit Linux.De waarde moet er ongeveer uitzien als hieronder:

      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
      

    Notitie

    Als u cifs-shares wilt verbinden, moet het pakket cifs-utils zijn geïnstalleerd in de clusterknooppunten.

  4. Werk de tijdelijke aanduidingen in het setupentrypoint.sh script bij met de azure-storage-gegevens uit stap 2.

    vi JenkinsSF/JenkinsOnSF/Code/setupentrypoint.sh
    
    • Vervang [REMOTE_FILE_SHARE_LOCATION] door de waarde uit de uitvoer van de verbinding in stap //sfjenkinsstorage1.file.core.windows.net/sfjenkins 2 hierboven.
    • Vervang [FILE_SHARE_CONNECT_OPTIONS_STRING] door de waarde uit stap vers=3.0,username=sfjenkinsstorage1,password=GB2NPUCQY9LDGeG9Bci5dJV91T6SrA7OxrYBUsFHyueR62viMrC6NIzyQLCKNz0o7pepGfGY+vTa9gxzEtfZHw==,dir_mode=0777,file_mode=0777 2 hierboven.
  5. Alleen beveiligd cluster:

    Als u de implementatie van toepassingen op een beveiligd cluster vanuit Jenkins wilt configureren, moet het clustercertificaat toegankelijk zijn binnen de Jenkins-container. Voeg in ApplicationManifest.xml onder de tag ContainerHostPolicies deze certificaatverwijzing toe en werk de vingerafdrukwaarde bij met die van het clustercertificaat.

    <CertificateRef Name="MyCert" X509FindValue="[Thumbprint]"/>
    

    Voeg daarnaast de volgende regels toe onder de tag ApplicationManifest (root) in het ApplicationManifest.xml-bestand en werk de vingerafdrukwaarde bij met die van het clustercertificaat.

    <Certificates>
      <SecretsCertificate X509FindType="FindByThumbprint" X509FindValue="[Thumbprint]" />
    </Certificates> 
    
  6. Verbinding maken het cluster en installeer de containertoepassing.

    Beveiligd cluster

    sfctl cluster select --endpoint https://PublicIPorFQDN:19080  --pem [Pem] --no-verify # cluster connect command
    bash Scripts/install.sh
    

    Met de voorgaande opdracht wordt het certificaat in PEM-indeling gebruikt. Als uw certificaat de PFX-indeling heeft, kunt u de volgende opdracht gebruiken om het te converteren. Als uw PFX-bestand niet met een wachtwoord is beveiligd, geeft u de parameter passin op als .

    openssl pkcs12 -in cert.pfx -out cert.pem -nodes -passin pass:MyPassword1234!
    

    Niet-beveiligde cluster

    sfctl cluster select --endpoint http://PublicIPorFQDN:19080 # cluster connect command
    bash Scripts/install.sh
    

    Hiermee wordt een Jenkins-container in het cluster geïnstalleerd. Dit kan worden bewaakt met de Service Fabric Explorer.

    Notitie

    Het kan enkele minuten duren voordat de Jenkins-afbeelding op het cluster is gedownload.

  7. Ga in uw browser naar http://PublicIPorFQDN:8081. Hier vindt u het pad naar het eerste beheerderswachtwoord dat nodig is om u aan te melden.

  8. Bekijk de Service Fabric Explorer om te bepalen op welk knooppunt de Jenkins-container wordt uitgevoerd. Meld u met Secure Shell (SSH) aan bij dit knooppunt.

    ssh user@PublicIPorFQDN -p [port]
    
  9. Haal de exemplaar-id van de container op met docker ps -a.

  10. Meld u met Secure Shell (SSH) aan bij de container en plak het pad dat u hebt weergegeven in de Jenkins-portal. Als in de portal bijvoorbeeld het pad wordt PATH_TO_INITIAL_ADMIN_PASSWORD weergeven, voert u de volgende opdrachten uit:

    docker exec -t -i [first-four-digits-of-container-ID] /bin/bash   # This takes you inside Docker shell
    
    cat PATH_TO_INITIAL_ADMIN_PASSWORD # This displays the password value
    
  11. Kies op Aan de slag Jenkins-pagina de optie In plug-in selecteren om te installeren, schakel het selectievakje Geen in en klik op Installeren.

  12. Maak een gebruiker of selecteer om door te gaan als beheerder.

Nadat u Jenkins hebt ingesteld, gaat u verder met Een Jenkins-taak maken en configureren.

Jenkins instellen buiten een Service Fabric-cluster

U kunt Jenkins instellen binnen of buiten een Service Fabric-cluster. In de volgende secties ziet u hoe u Jenkins instelt buiten een cluster.

  1. Zorg ervoor dat Docker op uw computer is geïnstalleerd door uit te werken docker info in de terminal. De uitvoer geeft aan of de Docker-service wordt uitgevoerd.

  2. Als Docker niet is geïnstalleerd, voert u de volgende opdrachten uit:

    sudo apt-get install wget
    wget -qO- https://get.docker.io/ | sh
    
  3. Haal de Service Fabric Jenkins container-installatiekopie op: docker pull rapatchi/jenkins:latest. Deze installatieafbeelding wordt geleverd Service Fabric Jenkins-in plug-in vooraf is geïnstalleerd.

  4. Voer de installatiekopie van de container uit: docker run -itd -p 8080:8080 rapatchi/jenkins:latest

  5. Haal de id op van het exemplaar van de installatiekopie van de container. U kunt een lijst van alle Docker-containers bekijken met de opdracht docker ps –a

  6. Meld u aan bij de Jenkins-portal met de volgende stappen:

    1. Meld u aan bij een Jenkins-shell vanaf uw host. Gebruik de eerste vier cijfers van de container-id. Als de container-id bijvoorbeeld 2d24a73b5964 is, gebruikt u 2d24 .

      docker exec -it [first-four-digits-of-container-ID] /bin/bash
      
    2. Haal in de Jenkins-shell het beheerderswachtwoord voor uw container-exemplaar op:

      cat /var/jenkins_home/secrets/initialAdminPassword
      
    3. Als u zich wilt aanmelden bij het Jenkins-dashboard, opent u de volgende URL in een webbrowser: http://<HOST-IP>:8080 . Gebruik het wachtwoord uit de vorige stap om Jenkins te ontgrendelen.

    4. (Optioneel.) Nadat u zich voor het eerst hebt aanmelden, kunt u uw eigen gebruikersaccount maken en dat gebruiken voor de volgende stappen, of u kunt het beheerdersaccount blijven gebruiken. Als u een gebruiker maakt, moet u doorgaan met die gebruiker.

  7. Stel GitHub in om met Jenkins te werken met behulp van de stappen in Een nieuwe SSH-sleutel genereren en deze toevoegen aan de SSH-agent.

    • Volg de instructies van GitHub om de SSH-sleutel te genereren en deze toe te voegen aan het GitHub-account waarop de opslagplaats wordt gehost.

    • Voer de opdrachten die in de vorige koppeling zijn genoemd, uit in de Jenkins Docker-shell (en niet op uw host).

    • Gebruik de volgende opdracht om u vanaf uw host aan te melden bij de Jenkins-shell:

      docker exec -t -i [first-four-digits-of-container-ID] /bin/bash
      

Zorg ervoor dat het cluster of de computer waarop de Jenkins-containerafbeelding wordt gehost, een openbaar IP-adres heeft. Alleen zo kan het Jenkins-exemplaar meldingen ontvangen van GitHub.

Nadat u Jenkins hebt ingesteld, gaat u verder met de volgende sectie, Een Jenkins-taak maken en configureren.

Een Jenkins-taak maken en configureren

De stappen in deze sectie laten zien hoe u een Jenkins-taak configureert om te reageren op wijzigingen in een GitHub, de wijzigingen op te halen en ze te bouwen. Aan het einde van deze sectie wordt u doorgestuurd naar de laatste stappen voor het configureren van de taak voor het implementeren van uw toepassing op basis van of u nu implementeert in een ontwikkel-/testomgeving of in een productieomgeving.

  1. Klik op het Jenkins-dashboard op Nieuw item.

  2. Voer een itemnaam in (bijvoorbeeld MyJob). Selecteer free-style project en klik op OK.

  3. De pagina Taakconfiguratie wordt geopend. (Als u de configuratie wilt bekijken vanuit het Jenkins-dashboard, klikt u op de taak en klikt u vervolgens op Configureren.

  4. Vink op het tabblad Algemeen het selectievakje voor GitHub projectaan en geef de URL van GitHub project op. Dit is de URL waarop de Service Fabric Java-toepassing wordt gehost die u wilt integreren met de CI-/CD-stroom van Jenkins (Continue integratie, Continue implementatie), bijvoorbeeld https://github.com/{your-github-account}/service-fabric-java-getting-started.

  5. Selecteer git op het tabblad Broncodebeheer. Geef de opslagplaats-URL op waarop de Service Fabric Java-toepassing wordt gehost die u wilt integreren met de CI-/CD-stroom van Jenkins, bijvoorbeeld https://github.com/{your-github-account}/service-fabric-java-getting-started. U kunt ook opgeven welke vertakking moet worden gebouwd (bijvoorbeeld /master ).

  6. Configureer uw GitHub opslagplaats om te praten met Jenkins:

    1. Ga op GitHub-opslagplaatspagina naar InstellingenIntegrations and Services.

    2. Selecteer Service toevoegen,typ Jenkinsen selecteer de jenkins-GitHub-invoegvoeging.

    3. Geef de Jenkins-webhook-URL op (standaard is dit http://<PublicIPorFQDN>:8081/github-webhook/). Klik op add/update service.

    4. Er wordt een testgebeurtenis verzonden naar uw Jenkins-exemplaar. Er komt een groen vinkje bij de webhook te staan in GitHub en uw project wordt gemaakt.

  7. Selecteer op het tabblad Triggers bouwen in Jenkins welke buildoptie u wilt gebruiken. Voor dit voorbeeld wilt u een build activeren wanneer er een push naar de opslagplaats wordt GitHub voor GITScm polling. (Voorheen heette deze optie Build when a change is pushed to GitHub.)

  8. Doe op het tabblad Bouwen een van de volgende zaken, afhankelijk van of u een Java-toepassing of een .NET Core-toepassing bouwt:

    • Voor Java-toepassingen: Selecteer Gradle-scriptaanroepen in de vervolgkeuzeoproep van de stap Build toevoegen. Klik op Geavanceerd. Geef in het geavanceerde menu het pad op naar het hoofdscript voor de toepassing. Het haalt build.gradle op uit het opgegeven pad en werkt dienovereenkomstig. Voor de ActorCounter-toepassingis dit: .

      Service Fabric Jenkins Build action

    • Voor .NET Core-toepassingen: Selecteer shell uitvoeren in de vervolgkeuzeop de optie Build-stap toevoegen. In het opdrachtvak dat wordt weergegeven, moet de map eerst worden gewijzigd in het pad waar het build.sh bestand zich bevindt. Zodra de map is gewijzigd, kan het build.sh script worden uitgevoerd om de toepassing te bouwen.

      cd /var/jenkins_home/workspace/[Job Name]/[Path to build.sh]  
      ./build.sh
      

      In de volgende schermopname ziet u een voorbeeld van de opdrachten die worden gebruikt om het Counter Service-voorbeeld te bouwen met de Jenkins-taaknaam .

      Voorbeeld van opdrachten die worden gebruikt om de service te bouwen

  9. Als u Jenkins wilt configureren om uw app te implementeren in een Service Fabric-cluster in de acties na het bouwen, hebt u de locatie van het certificaat van dat cluster in uw Jenkins-container nodig. Kies een van de volgende opties, afhankelijk van of uw Jenkins-container binnen of buiten uw cluster wordt uitgevoerd en noteer de locatie van het clustercertificaat:

    • Voor Jenkins dat in uw cluster wordt uitgevoerd: Het pad naar het certificaat kan worden gevonden door de waarde van de Certificates_JenkinsOnSF_Code_MyCert_PEM omgevingsvariabele vanuit de container te herhalen.

      echo $Certificates_JenkinsOnSF_Code_MyCert_PEM
      
    • Voor Jenkins dat buiten uw cluster wordt uitgevoerd: Volg deze stappen om het clustercertificaat naar uw container te kopiëren:

      1. Uw certificaat moet de PEM-indeling hebben. Als u geen PEM-bestand hebt, kunt u er een maken op basis van het PFX-certificaatbestand. Als uw PFX-bestand niet is beveiligd met een wachtwoord, voer dan de volgende opdracht uit vanaf uw host:

        openssl pkcs12 -in clustercert.pfx -out clustercert.pem -nodes -passin pass:
        

        Als het PFX-bestand is beveiligd met een wachtwoord, moet u het wachtwoord opnemen in de -passin parameter . Bijvoorbeeld:

        openssl pkcs12 -in clustercert.pfx -out clustercert.pem -nodes -passin pass:MyPassword1234!
        
      2. Voer uit vanaf uw host om de container-id voor uw Jenkins-container docker ps op te halen.

      3. Kopieer het PEM-bestand naar uw container met de volgende Docker-opdracht:

        docker cp clustercert.pem [first-four-digits-of-container-ID]:/var/jenkins_home
        

U bent bijna klaar. Houd de Jenkins-taak open. De enige resterende taak is het configureren van de stappen na het bouwen om uw toepassing te implementeren in Service Fabric cluster:

Implementatie configureren met behulp van het eindpunt voor clusterbeheer

Voor ontwikkel- en testomgevingen kunt u het eindpunt voor clusterbeheer gebruiken om uw toepassing te implementeren. Voor het configureren van de actie na het bouwen met het eindpunt voor clusterbeheer om uw toepassing te implementeren, is zo weinig mogelijk configuratie vereist. Als u implementeert in een productieomgeving, gaat u verder met Implementatie configureren met Azure-referenties om een Azure Active Directory service-principal te configureren voor gebruik tijdens de implementatie.

  1. Klik in de Jenkins-taak op het tabblad Acties na maken.

  2. Selecteer in de vervolgkeuzelijst Post-Build Actions de optie Post-Build Actions.

  3. Selecteer Service Fabric onder Clusterconfiguratiehet keuzerondje Service Fabric Management Endpoint vullen.

  4. Voer bij Beheerhosthet verbindings-eindpunt voor uw cluster in; bijvoorbeeld .

  5. Voer bij Clientsleutelen Clientcertde locatie van het PEM-bestand in uw Jenkins-container in; bijvoorbeeld . (U hebt de locatie van het certificaat gekopieerd in de laatste stap van Een Jenkins-taakmaken en configureren.)

  6. Configureer onder Toepassingsconfiguratiede velden Toepassingsnaam,Toepassingstypeen (relatief) Pad naar toepassingsmanifest.

    Service Fabric Jenkins Post-Build Action management endpoint configureren

  7. Klik op Configuratie verifiëren. Als de verificatie is geslaagd, klikt u op Opslaan. Uw Jenkins-taakpijplijn is nu volledig geconfigureerd. Ga verder met Volgende stappen om uw implementatie te testen.

Implementatie configureren met Behulp van Azure-referenties

Voor productieomgevingen wordt het sterk aanbevolen om een Azure-referentie te configureren voor het implementeren van uw toepassing. In deze sectie ziet u hoe u een service-principal Azure Active Directory configureert om uw toepassing te implementeren in de post-build-actie. U kunt service-principals toewijzen aan rollen in uw directory om de machtigingen van de Jenkins-taak te beperken.

Voor ontwikkel- en testomgevingen kunt u Azure-referenties of het eindpunt voor clusterbeheer configureren om uw toepassing te implementeren. Zie Implementatie configureren met eindpunt voor clusterbeheer voor meer informatie over het configureren van een eindpunt voor clusterbeheer.

  1. Als u een Azure Active Directory-service-principal wilt maken en deze machtigingen wilt toewijzen in uw Azure-abonnement, volgt u de stappen in De portal gebruiken om een Azure Active Directory-toepassing en service-principalte maken. Let op het volgende:

    • Wanneer u de stappen in het onderwerp volgt, moet u de volgende waarden kopiëren en opslaan: Toepassings-id, Toepassingssleutel, Map-id (tenant-id)en Abonnements-id. U hebt ze nodig om de Azure-referenties in Jenkins te configureren.
    • Als u niet over de vereiste machtigingen voor uw directory hebt, moet u een beheerder vragen om u de machtigingen te verlenen of de service-principal voor u te maken, of moet u het beheer-eindpunt voor uw cluster configureren in de Post-Build Actions voor uw taak in Jenkins.
    • In de sectie Een Azure Active Directory toepassing maken kunt u elke goed gevormde URL voor de aanmeldings-URL invoeren.
    • In de sectie Toepassing toewijzen aan een rol kunt u de rol Lezer toewijzen aan uw toepassing in de resourcegroep voor uw cluster.
  2. Klik in de Jenkins-taak op het tabblad Acties na maken.

  3. Selecteer in de vervolgkeuzelijst Post-Build Actions de optie Post-Build Actions.

  4. Klik Service Fabric clusterconfiguratieop Het Service Fabric selecteren. Klik op Toevoegen naast Azure Credentials. Klik op Jenkins om de Jenkins Credentials Provider te selecteren.

  5. Selecteer in de Jenkins Credentials Provider de optie Microsoft Azure Service-principal in de vervolgkeuzekeuzeop.

  6. Gebruik de waarden die u hebt opgeslagen bij het instellen van de service-principal in stap 1 om de volgende velden in te stellen:

    • Client-id:toepassings-id
    • Clientgeheim:toepassingssleutel
    • Tenant-id:Map-id
    • Abonnements-id:abonnements-id
  7. Voer een beschrijvende id in die u gebruikt om de referentie in Jenkins en een korte Beschrijving te selecteren. Klik vervolgens op Service-principal verifiëren. Als de verificatie is geslaagd, klikt u op Toevoegen.

    Service Fabric Jenkins Azure-referenties invoeren

  8. Zorg ervoor dat Service Fabric nieuwereferentie is geselecteerd voor Azure Credentials.

  9. Selecteer de resourcegroep van het cluster waar u de toepassing wilt implementeren in de vervolgkeuzekeuze selecteren.

  10. Selecteer Service Fabric het cluster waar u de toepassing wilt implementeren.

  11. Voer bij Clientsleutelen Clientcertde locatie van het PEM-bestand in uw Jenkins-container in. Bijvoorbeeld /var/jenkins_home/clustercert.pem.

  12. Configureer onder Toepassingsconfiguratiede velden Toepassingsnaam,Toepassingstypeen (relatief) Pad naar toepassingsmanifest. Service Fabric Jenkins Post-Build Action - Azure-referenties configureren

  13. Klik op Configuratie verifiëren. Als de verificatie is geslaagd, klikt u op Opslaan. Uw Jenkins-taakpijplijn is nu volledig geconfigureerd. Ga door naar Volgende stappen om uw implementatie te testen.

Problemen met de Jenkins-invoegtoepassing oplossen

Als u fouten ondervindt met de Jenkins-in plug-in, kunt u een probleem melden in Jenkins JIRA voor het specifieke onderdeel.

Ideeën om te proberen

GitHub en Jenkins zijn nu geconfigureerd. Overweeg een voorbeeldwijziging aan te brengen reliable-services-actor-sample/Actors/ActorCounter in het project in uw fork van de opslagplaats, https://github.com/Azure-Samples/service-fabric-java-getting-started . Push uw wijzigingen naar de externe master vertakking (of een vertakking die u hebt geconfigureerd om mee te werken). Op die manier wordt de geconfigureerde Jenkins-taak MyJob geactiveerd. Het haalt de wijzigingen op uit GitHub, bouwt ze en implementeert de toepassing in het cluster dat u hebt opgegeven in acties na de build.

Volgende stappen