Självstudie: Konfigurera en Jenkins-miljö och aktivera CI/CD för en Java-app i Service Fabric

Den här självstudien är del fem i en serie. Den visar hur du använder Jenkins för att distribuera uppgraderingar till din tillämpning. I den här självstudien används plugin-programmet för Service Fabric Jenkins i kombination med en GitHub-databas, som är värd för röstningsprogrammet, för att distribuera tillämpningen till ett kluster.

I del fem i serien lär du dig hur du:

  • Distribuerar Service Fabric Jenkins-containern på din dator
  • Konfigurerar Jenkins-miljön för distribution till Service Fabric
  • Uppgraderar tillämpningen

I den här självstudieserien får du lära du dig att:

Förutsättningar

Hämta och distribuera Service Fabric Jenkins-containeravbildningen

Du kan konfigurera Jenkins i eller utanför ett Service Fabric-kluster. Följande instruktioner visar hur du konfigurerar det utanför ett kluster med en angiven Docker-avbildning. Det går också att använda en förkonfigurerad kompileringsmiljö för Jenkins. Följande containeravbildning är förinstallerad i plugin-programmet för Service Fabric och är redo för användning med Service Fabric omedelbart.

Anteckning

I följande exempel hämtas en offentlig containeravbildning från Docker Hub. Vi rekommenderar att du autentiserar med ditt Docker Hub-konto (docker login) först i stället för att göra en anonym pull-begäran. Du kan förbättra tillförlitligheten när du använder offentligt innehåll genom att importera och hantera avbildningen i ett privat Azure-containerregister. Läs mer om hur du arbetar med offentliga avbildningar.

  1. Hämta containeravbildningen för Service Fabric Jenkins:docker pull rapatchi/jenkins:v10. Plugin-programmet för Service Fabric Jenkins är förinstallerat i avbildningen.

  2. Kör containeravbildningen med den plats där Azure-certifikaten är lagrade på den lokala monterade datorn.

    docker run -itd -p 8080:8080 -v /service-fabric-java-quickstart/AzureCluster rapatchi/jenkins:v10
    
  3. Hämta ID:t för containeravbildningsinstansen. Du kan visa en lista med alla Docker-containrar med hjälp av kommandot docker ps –a

  4. Hämta lösenordet för din Jenkins-instans genom att köra följande kommando:

    docker exec [first-four-digits-of-container-ID] cat /var/jenkins_home/secrets/initialAdminPassword
    

    Om container-ID:t är 2d24a73b5964 ska du använda 2d24.

    • Det här lösenordet krävs för att logga in på Jenkins-instrumentpanelen från portalen som är http://<HOST-IP>:8080
    • När du loggar in för första gången skapar du ett eget användarkonto, eller så använder du administratörskontot.
  5. Konfigurera GitHub för Jenkins genom att utföra åtgärderna som nämns i Generating a new SSH key and adding it to the SSH agent (Generera en ny SSH-nyckel och lägga till den i SSH-agenten). Eftersom kommandona körs från en Docker-container följer du instruktionerna för Linux-miljön.

    • Skapa SSH-nyckeln med hjälp av instruktionerna från GitHub. Lägg sedan till SSH-nyckeln till GitHub-kontot som är 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 kommandon:

      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. Med en offentlig IP-adress kan Jenkins-instansen ta emot meddelanden från GitHub.

Skapa och konfigurera ett Jenkins-jobb

  1. Om du inte har någon databas att använda som värd för röstningsprojektet på GitHub börjar du med att skapa en. Databasen kallas dev_test i återstoden av den här självstudien.

  2. Skapa ett nytt objekt på Jenkins-instrumentpanelen vid http://<HOST-IP>:8080.

  3. Ange ett namn (till exempel MyJob). Välj free-style project (freestyle-projekt) och klicka på OK.

  4. Gå till jobbsidan och klicka sedan på Konfigurera.

    a. Markera kryssrutan och ange URL:en för GitHub-projektet under GitHub-projekt i det allmänna avsnittet. 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/testaccount/dev_test).

    b. I avsnittet Source Code Management (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/testaccount/dev_test.git). Du kan också ange här vilken gren som ska byggas (t.ex. /master).

  5. Konfigurera din GitHub (som är värd för databasen) så att den kan kommunicera med Jenkins. Gör så här:

    a. Gå till GitHub-lagringsplatssidan. Gå till Inställningar>Integreringar och tjänster.

    b. Välj Lägg till tjänst, skriv Jenkins och välj Jenkins GitHub-plugin-programmet.

    c. Ange din Jenkins-webhooksadress (som standard ska den vara http://<PublicIPorFQDN>:8081/github-webhook/). Klicka på Lägg till/Uppdatera tjänsten.

    d. En testhändelse skickas till Jenkins-instansen. Du bör se en grön bock vid webhooken i GitHub och dina projektversioner.

    Service Fabric Jenkins-konfiguration

  6. I avsnittet om build-utlösare väljer du önskat alternativ. I det här exemplet vill du utlösa en build när något skickas till databasen. Därför väljer du GitHub hook trigger for GITScm polling (GitHub-hookutlösare för GITScm-avsökning).

  7. Under avsnittet Build (Bygg) i listrutan Add build step (Lägg till byggsteg) väljer du alternativet Invoke Gradle Script (Anropa Gradle-skript). I widgeten som visas öppnar du menyn för avancerade alternativ och anger sökvägen till rotbuildskript för ditt program. Då hämtas build.gradle från den angivna sökvägen och fungerar på motsvarande sätt.

    Service Fabric Jenkins Build-åtgärd

  8. I listrutan Post-Build Actions (Åtgärder efter skapandet) väljer du Deploy Service Fabric Project (Distribuera Service Fabric-projekt). Här måste du ange klusterinformation där Jenkins-kompilerade Service Fabric-programmet skulle distribueras. Sökvägen till certifikatet är platsen där volymen monterades (/ tmp/myCerts).

    Du kan även ange ytterligare information som används för att distribuera programmet. Följande skärmbild visar ett exempel på hur informationen om programmet kan se ut:

    Dialogrutan Åtgärder efter bygget med ytterligare distributionsalternativ för Service Fabric-projekt

    Anteckning

    Det här klustret kan vara detsamma som det kluster som är värd för Jenkins-containerprogrammet om du använder Service Fabric för att distribuera Jenkins-containeravbildningen.

  9. Klicka på Spara.

Distribuera ditt befintliga program

  1. Uppdatera HTML-titeln i filen VotingApplication/VotingWebPkg/Code/wwwroot/index.html till Service Fabric röstningsexempel V2.

    <div ng-app="VotingApp" ng-controller="VotingAppController" ng-init="refresh()">
        <div class="container-fluid">
            <div class="row">
                <div class="col-xs-8 col-xs-offset-2 text-center">
                    <h2>Service Fabric Voting Sample V2</h2>
                </div>
            </div>
        </div>
    </div>
    
  2. Uppdatera versionen för ApplicationTypeVersion och ServiceManifestVersion till 2.0.0 i filen Voting/VotingApplication/ApplicationManifest.xml.

    <?xml version="1.0" encoding="utf-8" standalone="no"?>
    <ApplicationManifest xmlns="http://schemas.microsoft.com/2011/01/fabric" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" ApplicationTypeName="VotingApplicationType" ApplicationTypeVersion="2.0.0">
      <Description>Voting Application</Description>
      <ServiceManifestImport>
        <ServiceManifestRef ServiceManifestName="VotingWebPkg" ServiceManifestVersion="2.0.0"/>
      </ServiceManifestImport>
      <ServiceManifestImport>
            <ServiceManifestRef ServiceManifestName="VotingDataServicePkg" ServiceManifestVersion="1.0.0"/>
        </ServiceManifestImport>
        <DefaultServices>
          <Service Name="VotingWeb">
             <StatelessService InstanceCount="1" ServiceTypeName="VotingWebType">
                <SingletonPartition/>
             </StatelessService>
          </Service>
       <Service Name="VotingDataService">
                <StatefulService MinReplicaSetSize="3" ServiceTypeName="VotingDataServiceType" TargetReplicaSetSize="3">
                    <UniformInt64Partition HighKey="9223372036854775807" LowKey="-9223372036854775808" PartitionCount="1"/>
                </StatefulService>
            </Service>
        </DefaultServices>
    </ApplicationManifest>
    
  3. Uppdatera fältet Version i ServiceManifest och fältet Version i taggen CodePackage i filen Voting/VotingApplication/VotingWebPkg/ServiceManifest.xml till 2.0.0.

    <CodePackage Name="Code" Version="2.0.0">
    <EntryPoint>
        <ExeHost>
        <Program>entryPoint.sh</Program>
        </ExeHost>
    </EntryPoint>
    </CodePackage>
    
  4. Skicka dina nya ändringar till GitHub-databasen för att initiera ett Jenkins-jobb som utför en uppgradering av programmet.

  5. I Service Fabric Explorer klickar du på listrutan Program. Om du vill visa status för uppgraderingen klickar du på fliken Pågående uppgraderingar.

    Uppgradering pågår

  6. Om du kommer åt http://< Host-IP>:8080 är röstningsprogrammet med fullständig funktionalitet nu igång.

    Lokal röstningsapp

Nästa steg

I den här självstudiekursen lärde du dig att:

  • Distribuerar Service Fabric Jenkins-containern på din dator
  • Konfigurerar Jenkins-miljön för distribution till Service Fabric
  • Uppgraderar tillämpningen