Zet een eenvoudige CI/CD pijplijn op met Github en Jenkins op een AWS EC2 Linux instance

In dit artikel zullen we de stappen zien om een eenvoudige CI/CD pijplijn met Jenkins te implementeren. We zullen een voorbeeld Java code gebruiken en die code als een .war bestand op de Apache Tomcat Web-Server zetten. We zullen Maven gebruiken als bouwgereedschap. Je kunt de voorbeeld Java code vinden op mijn Github Repository(repo). Laten we, voor we verder gaan, de basisprincipes begrijpen van de gereedschappen en technologieën die we zullen gebruiken bij het opzetten van de CI/CD pijplijn.

  1. EC2 Instance: EC2 instance is een Virtuele Machine (VM) in de AWS Cloud. We zullen Apache Tomcat en Jenkins op een EC2 instance inzetten.
  2. Apache Tomcat: Apache Tomcat is een open-source Web-Server. We zullen onze voorbeeld Java Applicatie in Apache Tomcat inzetten als een .war bestand.
  3. Github: Github is een Code hosting platform. Het is eigenlijk een Versie/Bron Beheer Systeem. We zullen onze voorbeeld Java code op Github hebben.
  4. Github Webhook: Github Webhook wordt gebruikt om integraties te bouwen en op te zetten. We zullen een webhook maken die een Jenkins Job zal triggeren telkens als een nieuwe commit op Github repo plaatsvindt.
  5. Jenkins: Jenkins is een gratis open-source automatiseringstool. We zullen een job op Jenkins schrijven die een .war bestand van de voorbeeld Java applicatie code zal bouwen en inzetten op Apache Tomcat server.
  6. Maven: Maven is een automatiseringshulpmiddel dat vooral gebruikt wordt om Java projecten te bouwen.

Pre-requisites

  1. AWS Account (Maak aan als je er geen hebt)
  2. Basiskennis van Github.
  3. Basis begrip van Jenkins.
  4. Basis begrip van Linux Server en Commando’s

Wat zullen we doen?

  1. Creëer een EC2 Instance
  2. Java installeren
  3. Jenkins installeren
  4. Installeer Apache Tomcat
  5. Vork mijn Github Repo
  6. Open en configureer Jenkins
  7. Stel een Jenkins Job in voor .war deployment
  8. Stel Webhook in op de Github Repo
  9. Test automatisch bouwen bij elke Commit

Maak een VM of een EC2 Instance

Om een EC2 instance te maken kun je het hier beschikbare document raadplegen.

Hier heb ik een nieuwe EC2 Instance aangemaakt op mijn AWS account. Op deze instance staat Ubuntu 18 OS.

Je kunt zien dat deinstantieaan de praat is. Ik zal deze instantie gebruiken om Java of de afhankelijkheden te installeren en ook Apache Tomcat en Jenkins.

Installeer Java

Om Java op je Ubuntu 18 systeem te installeren kun je de volgende commando’s gebruiken. Het volgende commando installeert Java 8. Eenmaal geïnstalleerd kun je zelfs de versie ervan controleren.

sudo apt-get update
sudo apt install openjdk-8-jdk
java -version

Jenkins installeren

Gebruik de volgende commando’s om Jenkins op je instantie te installeren.

sudo apt-get update
wget -q -O – https://pkg.jenkins.io/debian/jenkins.io.key | sudo apt-key add –
sudo sh -c ‘echo deb http://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list’
sudo apt-get update
sudo apt-get install jenkins

Zodra je Jenkins geïnstalleerd hebt gebruik je het volgende commando om het te starten en de status ervan te controleren.

sudo systemctl start jenkins #Start Jenkins
service jenkins status #Check Jenkins Status

In de volgende schermafbeelding zie je dat de Jenkins dienst gestart is. Deze Jenkins dienst is gestart op poort 8080.

Setup Apache Tomcat

Installeer Apache Tomcat

Laten we, voordat we Apache Tomcat downloaden en installeren, een directory maken waarin we het Apache Tomcat pakket kunnen downloaden.

Gebruik de volgende commando’s om een directory aan te maken in /opt

cd /opt/
sudo mkdir Innovecture

Verander het eigendom van de directory met het volgende commando. We veranderen het eigendom in gebruiker Ubuntu en groep Ubuntu, zodat de Ubuntu gebruiker de Apache Tomcat dienst kan starten en we geen root of gebruiker of sudo privileges hoeven te gebruiken.

sudo chown -R ubuntu:ubuntu Innovecture
cd Innovecture/

Download en pak Apache Tomcat uit met de volgende commando’s. Als je een andere versie van Apache Tomcat wilt gebruiken kun je die ook downloaden en uitpakken.

wget https://downloads.apache.org/tomcat/tomcat-9/v9.0.31/bin/apache-tomcat-9.0.31.tar.gz
tar -zxvf apache-tomcat-9.0.31.tar.gz
cd apache-tomcat-9.0.31/

Maak de vereiste configuraties in Apache Tomcat met het volgende commando. Zie de volgende schermafdrukken voor de configuraties die gedaan moeten worden. In de volgende configuraties wijzen we een gebruiker en een wachtwoord toe waarmee in de manager toepassing van Apache Tomcat ingelogd kan worden. Noteer deze gebruikersnaam en dit wachtwoord, want we zullen deze gegevens later nodig hebben.

Configureer Apache Tomcat

vim conf/tomcat-users.xml

Raadpleeg de volgende schermafbeelding en controleer of je context.xml dezelfde configuratie heeft.

vim webapps/manager/META-INF/context.xml

Verander in server.xml onder de conf directory de poort waarop Apache Tomcat draait, d.w.z. verander poort 8080 in 8090 omdat onze Jenkins dienst al op poort 8080 draait.

vim conf/server.xml

Verander ook de localhost configuratie in het bestand server.xml met het IP van de server, zodat je server vanaf het Internet bereikbaar is.

Start Apache Tomcat

Gebruik het volgende commando om de Apache Tomcat dienst te starten.

bin/startup.sh

In de volgende schermafbeelding zie je dat de Apache Tomcat dienst draait op poort 8090 En op poort 8080 draait Jenkins dienst. Om op je systeem te controleren, gebruik je het volgende commando.

netstat -tulpn

Log in op Tomcat Manager App

Om te zien of we kunnen inloggen in de manager toepassing van Apache Tomcat met de credentials die we eerder hebben opgegeven, klik je op de URL van Apache Tomcat http://IP-of-Apache-Tomcat:8090/manager. Je krijgt een credentials scherm te zien. Voer de gebruikersnaam ’tomcat-manager’ en het wachtwoord in dat we in conf/tomcat-users.xml hebben ingesteld.

Zodra je met succes bent ingelogd zie je het scherm als volgt

Vork Github Repo

Je kunt mijn hieronder vermelde repo forken of clonen. Deze repo bevat de voorbeeld Java code, je kunt deze code gebruiken of als je een eigen repository hebt die ook gebruiken.

URL van de repo: https://github.com/shivalkarrahul/Innovecture.git

Toegang krijgen tot en configureren van Jenkins

Om toegang te krijgen tot Jenkins, klik je op de URL http://IP-of-Jenkins:8080.

Volg de schermen die je krijgt om Jenkin te ontgrendelen en voorgestelde Plugins te installeren

Zodra je Jenkin ontgrendelt en de voorgestelde plugins installeert, krijg je het volgende scherm te zien.

Je moet de gebruikersnaam en het wachtwoord invoeren die je moet instellen en klik op save and continue om verder te gaan.

Installeer Github Authenticatie Plugin zonder opnieuw op te starten

Zodra je met succes bent ingelogd ga je naar Manage Jenkins > Manage Plugins. Onder de Beschikbaar tabblad zoek je naar git. Kies de plug-in “GithubAuthentication” en klik op installeren zonder opnieuw op te starten.

Installeer Maven Integratie Plugin zonder herstart

Installeer op dezelfde manier de maven integration plug-in en installeer hem zonder herstart

Installeer Deploy to container Plugin zonder herstart

Om het uitzetten van een .war bestand op Apache Tomcat te automatiseren zouden we een “Deploy to container” plug-in nodig hebben. Installeer de “Deploy to container” plug-in op dezelfde manier als we de git en maven plug-in installeerden.

Zet een Jenkins Job op voor .war deployment

Nu is het tijd om een freestyle Job te maken. Ga naar het hoofddashboard en klik op create job. Kies de freestyle job en ga verder.

Voeg Github Repo toe onder tabblad algemeen

Vink onder general tab “Github project” aan en voeg de URL toe van je broncode repo of de URL van de repo die je van mijn repo vorked.

Voeg Github URL toe onder broncodebeheer

Klik onder het tabblad broncodebeheer op het keuzerondje “Git” en voeg de URL van de repository toe zoals hieronder. Omdat mijn repository niet privé is en openbaar hoefde ik geen credentials toe te voegen.

Kies Github hook trigger

Kies “GitHub hook trigger voor GitSCM polling” onder Build Triggers tabblad

Bouwstappen toevoegen

Klik onder de build environment op add build step en kies “Invoke top-level Maven targets”

Specificeer bij doelen clean en package en sla de Job op.

Test het bouwen

Om te testen of de Job in staat is onze code te trekken en te bouwen, klik je op Build Now.

Voeg uitrolacties toe na het bouwen

Nu we er zeker van zijn dat onze code getrokken en gebouwd wordt zijn we klaar om een post-build actie toe te voegen. Om een post-build actie toe te voegen klik je onder build environment op post-build actie en kies je “Deploy war to a container”.

Voeg dan de URL van de tomcat server toe samen met de credentials. Om credentials toe te voegen klik je op “Add” en volg je de stappen die je ziet en sla de Job op.

Test handmatig bouwen

Test nu of onze job in staat is de code te trekken, te bouwen en uit te rollen op Apache Tomcat server. Klik op build now om onze job te testen.

Zoals je in de bovenstaande schermafbeelding ziet, is het handmatig bouwen gelukt en is het op de Apache Tomcat Server ingezet.

Om te testen of de war echt is ingezet klik je op de Apache Tomcathttp://IP-of-Apache-Tomcat:8090/manager aan om de manager toepassing te openen.

Hier zie je dat het web_ex.war bestand met succes op de Apache Tomcat server is uitgezet.

Test voorbeeld Java toepassing

Om te testen of de Java toepassing draait klik je op de URLhttp://IP-of-Apache-Tomcat:8090/web_ex.

Zet een webhook op de Github Repo

Maak een webhook

Om een webhook te maken op de tab get her website log je in op je account en volg je de onderstaande stappen.

Ga naar instellingen van je repo, klik in het linker paneel op webhaken en klik dan op “Webhook toevoegen”

Voeg in de Payload URL http://Jenkins-URL:8080/github-webhook toe.

Je kunt de gebeurtenissen kiezen die je met deze Webhook wilt triggeren of je kunt kiezen voor “Send me everything” als je de Jenkins job op elke gebeurtenis wilt triggeren, klik op update Webhook om hem op te slaan.

Test automatisch bouwen op Commit

Nu zijn we klaar om onze auto build job te testen.

Om te testen of onze Jenkins job bij elke commit de code uit onze github repo haalt gebruik je de volgende commando’s.

Om de repo lokaal te klonen heb ik het volgende commando gebruikt. Als je een eigen repo hebt ga je er gewoon op naar je lokale systeem.

git clone https://github.com/shivalkarrahul/Innovecture.git
cd Innovecture/

Breng wat veranderingen aan in de repo, zodat we die kunnen pushen. Hier heb ik lokaal een nieuw bestand toegevoegd dat ik in mijn remote repo zal pushen

touch README.md

Om gebruikersnaam en e-mail ID voor git in te stellen gebruik je de volgende commando’s.

git config user.name “Rahul Shivalkar”
git config user.email “[email protected]

Om je veranderingen te committen en te pushen gebruik je de volgende tot commando’s

git commit -m “Test Commit”
git push

Zodra we onze wijzigingen naar de repository op Github pushen, activeert dat onze Jenkins job die we in de Github Webhook hebben toegevoegd.

Je kunt dit zien onder “Polling Log” van de baan, zie hiervoor de volgende schermafbeelding.

Als je naar de console uitvoer van de job gaat zie je dat de job met succes is uitgevoerd en dat de war naar Apache Tomcat is uitgezet.

Hertest

Verander nu de code om te testen of de nieuwste code ingezet wordt of niet. Ik verander de boodschap die op de browser verschijnt.

Als je je eigen rapport gebruikt breng dan de vereiste veranderingen aan in je code, hier verander ik alleen een voorbeeld index.jsp bestand dat de boodschap op de browser afdrukt.

vim src/main/webapp/index.jsp

Laten we nu eens kijken of de veranderde code gereflecteerd wordt of niet.

Zet de veranderingen die je in je code hebt aangebracht vast met de volgende commando’s.

git add src/main/webapp/index.jsp
git commit -m “Veranderde code in Hello World New!”
git push

Klik op Apache Tomcat URLhttp://IP-of-Apache-Tomcat:8090/web_ex om onze voorbeeldapplicatie te openen.

Je ziet dat de nieuwste code is gebouwd en ingezet op Apache Tomcat, wat betekent dat de toepassing met succes is ingezet en dat ook de pijplijn met succes in werking is gesteld.

Als je merkt dat mijn vorige code alleen “Hello World!” vertoonde en nu, toen ik wijzigingen aanbracht in mijn index.jsp en die vastlegde, de nieuwste toepassing toont“Hello World New!“.

Conclusie

In dit artikel zagen we de stappen om een eenvoudige CI/CD pijplijn te maken die je code uit Github repo kan halen en bij elke commit op Apache Tomcat server kan inzetten. We zagen ook de stappen van het installeren van Jenkins, Apache Tomcat, Java, Plug-ins in Jenkins.