Skip to main content

Jenkins CI/CD

jenkins_logo

Jenkins is een CI/CD server die al heel wat jaren op z'n teller heeft. Het resultaat is een uitgebreide community en veel integratiemogelijkheden.
Het is niet dat Jenkins minder relevant geworden is maar het landschap van CI/CD-tools is de laatste jaren sterk geëvolueerd en uitgebreid. In deze workshop gaan we vooral aan de slag met enkele continuous integration-mogelijkheden van Jenkins, vooral om aan te tonen dat er, naast gitlab (die we verder gaan gebruiken) en github, ook nog andere mogelijkheden zijn om pipelines te bouwen voor CI/CD. We hadden ook voor andere tools kunnen kiezen zoals Azure Devops, Travis CI, Circle CI,...

Voorbereiding

Voor deze opdracht is een Linux VM nodig. De opgave werd getest op Ubuntu 22.04, maar zal met minimale wijzigingen ook werken op andere recente distributies. Je vindt een deployment op de interne cloud (OPO_Infra_As_Code_CICD_workshop) die twee Ubuntu servers bevat.

  • Deploy deze configuratie met twee servers.
  • Installeer de laatste updates op de vm
  • Installeer Java 11: sudo apt-get install default-jdk
  • Verifieer de versie: java -version (je zou '11' moeten zien)
  • We zullen met een Python project werken. Installeer dus meteen ook pip al: apt install python3-pip
  • wijzig METEEN de wachtwoorden op deze servers zodat enkel jij die kent. Dat is nodig om de persoonlijke gegevens later in dit labo goed te beveiligen.

Maak een fork aan van https://gitlab.com/ikdoeict/docenten/infrastructure_as_code/labs/IaC-docker_flask_demo

Deze repo bevat een eenvoudige website, die we zullen gebruiken om de continuous integration te testen.

Installatie Jenkins

In de praktijk is het makkelijk om Jenkins als een kant en klare image binnen te halen en als container uit te voeren. Om pedagogische redenen kiezen we hier voor een klassieke installatie.

We zullen Jenkins installeren op de eerste server (Server1)

# add the jenkins repostory key
curl -fsSL https://pkg.jenkins.io/debian-stable/jenkins.io-2023.key | sudo tee \
/usr/share/keyrings/jenkins-keyring.asc > /dev/null
# Toevoegen van repo aan je systeem
echo deb [signed-by=/usr/share/keyrings/jenkins-keyring.asc] \
https://pkg.jenkins.io/debian-stable binary/ | sudo tee \
/etc/apt/sources.list.d/jenkins.list > /dev/null
# updaten van package list
sudo apt-get update
# installatie jenkins
sudo apt-get install jenkins
# enablen en starten van de jenkins service
sudo systemctl enable jenkins
sudo systemctl start jenkins

Als de server opgestart werd, moet het mogelijk zijn om de webinterface te bereiken op [ip-adres]:8080.

Log daar in met het wachtwoord dat je op je server kan vinden (lees de instructies op het scherm).

Doorloop daarna de wizard:

  • Kies ervoor om de lijst met plugins zelf te kiezen
  • Behoud de voorgestelde plugins, maar vul aan met deze extra plugins

Niet alle plugins staan overigens in de lijst. Later in deze opgave zullen we er nog enkele toevoegen.

Maak als laatste stap van de wizard een user aan. Bewaar het wachtwoord uiteraard zorgvuldig.

tip

Na het aanmelden met de aangemaakte gebruik is het aangewezen om in je profiel van je Jenskins-user de timezone in te stellen. Anders zullen alle timestamps in UTC vermeld worden...