Esercitazione: Configurare un ambiente Jenkins per abilitare CI/CD per un'applicazione Java in Service Fabric
Questa è la quinta di una serie di esercitazioni. Illustra come usare Jenkins per distribuire gli aggiornamenti nell'applicazione. In questa esercitazione, il plug-in Jenkins per Service Fabric viene usato insieme a un repository GitHub che ospita l'applicazione Voting per distribuire l'applicazione in un cluster.
Nella quinta parte della serie si apprenderà come:
- Distribuire il contenitore di Jenkins per Service Fabric nel computer
- Configurare l'ambiente Jenkins per la distribuzione in Service Fabric
- Aggiornare l'applicazione
In questa serie di esercitazioni si apprenderà come:
- Compilare un'applicazione Reliable Services di Service Fabric per Java
- Distribuire l'applicazione ed eseguirne il debug in un cluster locale
- Distribuire l'applicazione in un cluster di Azure
- Configurare il monitoraggio e la diagnostica per l'applicazione
- Configurare l'integrazione continua/distribuzione continua
Prerequisiti
- Installare Git nel computer locale dalla pagina di download di Git. Per altre informazioni su Git, vedere la documentazione.
- Avere una conoscenza pratica di Jenkins.
- Creare un account GitHub e saper usare GitHub.
- Installare Docker nel computer in uso.
Eseguire il pull dell'immagine del contenitore di Jenkins per Service Fabric e distribuirla
È possibile configurare Jenkins all'interno o all'esterno di un cluster di Service Fabric. Le istruzioni seguenti illustrano come configurarlo all'esterno di un cluster usando un'immagine Docker fornita. È tuttavia anche possibile usare un ambiente di compilazione Jenkins preconfigurato. L'immagine del contenitore seguente viene installata con il plug-in di Service Fabric ed è immediatamente pronta per l'uso con Service Fabric.
Nota
Nell'esempio seguente viene eseguito il pull di un'immagine pubblica del contenitore da Docker Hub. È consigliabile eseguire prima l'autenticazione con l'account Docker Hub (docker login
) invece di effettuare una richiesta pull anonima. Per migliorare l'affidabilità quando si usa contenuto pubblico, importare e gestire l'immagine in un registro contenitori di Azure privato. Altre informazioni sull'uso delle immagini pubbliche.
Eseguire il pull dell'immagine del contenitore di Jenkins per Service Fabric:
docker pull rapatchi/jenkins:v10
. Questa immagine viene fornita con il plug-in di Jenkins per Service Fabric preinstallato.Eseguire l'immagine del contenitore con il percorso in cui sono archiviati i certificati di Azure nel computer locale montato.
docker run -itd -p 8080:8080 -v /service-fabric-java-quickstart/AzureCluster rapatchi/jenkins:v10
Ottenere l'ID istanza dell'immagine del contenitore. È possibile elencare tutti i contenitori Docker con il comando
docker ps –a
Recuperare la password dell'istanza di Jenkins eseguendo questo comando:
docker exec [first-four-digits-of-container-ID] cat /var/jenkins_home/secrets/initialAdminPassword
Se l'ID contenitore è 2d24a73b5964, usare 2d24.
- Questa password è necessaria per l'accesso al dashboard di Jenkins dal portale ovvero
http://<HOST-IP>:8080
. - Dopo il primo accesso è possibile creare il proprio account utente o usare l'account amministratore.
- Questa password è necessaria per l'accesso al dashboard di Jenkins dal portale ovvero
Configurare GitHub per l'interazione con Jenkins seguendo la procedura illustrata in Generating a new SSH key and adding it to the SSH agent (Generazione di una nuova chiave SSH e aggiunta della chiave all'agente SSH). Poiché i comandi vengono eseguiti dal contenitore Docker, seguire le istruzioni per l'ambiente Linux.
Usare le istruzioni fornite da GitHub per generare la chiave SSH. Aggiungere quindi la chiave SSH all'account GitHub che ospita il repository.
Eseguire i comandi specificati nell'articolo indicato in precedenza nella shell Docker di Jenkins, non nell'host.
Per accedere alla shell di Jenkins dall'host, eseguire questi comandi:
docker exec -t -i [first-four-digits-of-container-ID] /bin/bash
Assicurarsi che il cluster o il computer in cui è ospitata l'immagine del contenitore Jenkins abbia un indirizzo IP pubblico. La presenza di un indirizzo IP pubblico consente all'istanza di Jenkins di ricevere notifiche da GitHub.
Creare e configurare un processo Jenkins
Se non è disponibile un repository che può essere usato per ospitare il progetto Voting in GitHub, crearne uno. Il repository verrà chiamato dev_test nella parte restante di questa esercitazione.
Creare un nuovo elemento nel dashboard Jenkins all'indirizzo
http://<HOST-IP>:8080
.Immettere un nome per l'elemento, ad esempio MyJob. Selezionare free-style project (progetto libero) e fare clic su OK.
Passare quindi alla pagina del processo e fare clic su Configure (Configura).
a. Nella sezione generale selezionare la casella di controllo associata a GitHub project (Progetto GitHub) e specificare l'URL del progetto GitHub. Questo URL ospita l'applicazione Java di Service Fabric da integrare con il flusso di integrazione continua e di distribuzione continua di Jenkins, ad esempio
https://github.com/testaccount/dev_test
.b. Nella sezione Source Code Management (Gestione del codice sorgente) selezionare Git. Specificare l'URL del repository che ospita l'applicazione Java di Service Fabric che si vuole integrare nel flusso di integrazione continua e di distribuzione continua di Jenkins, ad esempio
https://github.com/testaccount/dev_test.git
. Qui è anche possibile specificare il ramo da compilare, ad esempio /master.Configurare GitHub, che ospita il repository, in modo che possa comunicare con Jenkins. Eseguire la procedura descritta di seguito:
a. Passare alla pagina del repository GitHub. Passare a Settings (Impostazioni) >Integrations and Services (Integrazioni e servizi).
b. Selezionare Add Service (Aggiungi servizio), digitare Jenkins e selezionare il plug-in GitHub per Jenkins.
c. Immettere l'URL webhook di Jenkins (per impostazione predefinita,
http://<PublicIPorFQDN>:8081/github-webhook/
). Fare clic su add/update service (aggiungi/aggiorna il servizio).d. Verrà inviato un evento di test all'istanza di Jenkins. Accanto al webhook in GitHub verrà visualizzato un segno di spunta verde e il progetto verrà compilato.
Nella sezione Build Triggers (Trigger compilazione) selezionare l'opzione di compilazione da usare. Per questo esempio è necessario attivare una compilazione a ogni push nel repository. Selezionare quindi l'opzione GitHub hook trigger for GITScm polling (Trigger di hook GitHub per polling GITScm).
Nella sezione Build (Compilazione) selezionare l'opzione Add build step (Richiama script Gradle) dall'elenco a discesa Invoke Gradle Script (Aggiungi passaggio di compilazione). Nel widget visualizzato aprire il menu Advanced (Avanzato) e specificare il percorso per Root build script (Script di compilazione radice) per l'applicazione. Viene estratto il file build.gradle dal percorso specificato che opera in modo corrispondente.
Nell'elenco a discesa Post-Build Actions (Azioni post-compilazione) selezionare Deploy Service Fabric Project (Distribuisci progetto di Service Fabric). In questa finestra è necessario specificare i dettagli del cluster in cui verrà distribuita l'applicazione di Service Fabric compilata con Jenkins. Il percorso del certificato è la posizione in cui è stato montato il volume (/tmp/myCerts).
È anche possibile specificare dettagli aggiuntivi usati per distribuire l'applicazione. Vedere lo screenshot seguente per un esempio di dettagli dell'applicazione:
Nota
In questo caso il cluster potrebbe essere lo stesso che ospita l'applicazione contenitore Jenkins, nel caso si usi Service Fabric per distribuire l'immagine del contenitore Jenkins.
Fare clic su Salva.
Aggiornare l'applicazione esistente
Aggiornare il titolo del contenuto HTML nel file VotingApplication/VotingWebPkg/Code/wwwroot/index.html con Esempio di Voting di Service Fabric 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>
Aggiornare ApplicationTypeVersion e ServiceManifestVersion alla versione 2.0.0 nel file 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>
Aggiornare il campo Version di ServiceManifest e il campo Version del tag CodePackage nel file Voting/VotingApplication/VotingWebPkg/ServiceManifest.xml alla versione 2.0.0.
<CodePackage Name="Code" Version="2.0.0"> <EntryPoint> <ExeHost> <Program>entryPoint.sh</Program> </ExeHost> </EntryPoint> </CodePackage>
Per inizializzare un processo Jenkins che esegue un aggiornamento dell'applicazione, effettuare il push delle nuove modifiche nel repository GitHub.
In Service Fabric Explorer fare clic sull'elenco a discesa Applications (Applicazioni). Per visualizzare lo stato dell'aggiornamento, fare clic sulla scheda Upgrades in Progress (Aggiornamenti in corso).
Se si accede a http://<IP Host>: 8080, l'applicazione Voting è ora in esecuzione con la piena funzionalità.
Passaggi successivi
Questa esercitazione ha descritto come:
- Distribuire il contenitore di Jenkins per Service Fabric nel computer
- Configurare l'ambiente Jenkins per la distribuzione in Service Fabric
- Aggiornare l'applicazione
- Fare riferimento ad altri esempi di Java