Introducció
En aquest tema, aprendrem com utilitzar Jenkins amb Docker per crear entorns d'integració contínua (CI) i desplegament continu (CD) més eficients i escalables. Docker permet encapsular aplicacions i les seves dependències en contenidors lleugers, assegurant que el codi s'executi de manera consistent en qualsevol entorn.
Objectius
- Entendre els conceptes bàsics de Docker.
- Aprendre a instal·lar i configurar Jenkins dins d'un contenidor Docker.
- Crear pipelines de Jenkins que utilitzin Docker per a la construcció i desplegament d'aplicacions.
- Explorar exemples pràctics d'integració de Jenkins amb Docker.
Conceptes Bàsics de Docker
Què és Docker?
Docker és una plataforma de codi obert que automatitza la distribució d'aplicacions dins de contenidors lleugers. Els contenidors permeten empaquetar una aplicació amb totes les seves dependències, assegurant que s'executi de manera consistent en qualsevol entorn.
Components Clau de Docker
- Imatges Docker: Són plantilles de només lectura que defineixen el que conté un contenidor.
- Contenidors Docker: Són instàncies en execució d'imatges Docker.
- Dockerfile: És un fitxer de text que conté les instruccions per crear una imatge Docker.
- Docker Hub: És un registre públic on es poden trobar i compartir imatges Docker.
Instal·lant Jenkins amb Docker
Requisits Prèvis
- Docker instal·lat en el teu sistema. Pots seguir les instruccions oficials de Docker per a la instal·lació: Instal·lant Docker.
Passos per Instal·lar Jenkins en un Contenidor Docker
-
Descarregar la Imatge de Jenkins:
docker pull jenkins/jenkins:lts
-
Executar un Contenidor de Jenkins:
docker run -d -p 8080:8080 -p 50000:50000 --name jenkins jenkins/jenkins:lts
-
Accedir a la Interfície Web de Jenkins:
- Obre el navegador web i ves a
http://localhost:8080
. - Segueix les instruccions per completar la configuració inicial de Jenkins.
- Obre el navegador web i ves a
Exemple de Dockerfile per Jenkins
Si vols personalitzar la teva instal·lació de Jenkins, pots crear un Dockerfile
:
FROM jenkins/jenkins:lts # Instal·lar plugins addicionals RUN jenkins-plugin-cli --plugins "blueocean:1.24.7 docker-workflow:1.26" # Configurar Jenkins COPY --chown=jenkins:jenkins custom-config.xml /var/jenkins_home/custom-config.xml
Per construir i executar aquesta imatge personalitzada:
Creant Pipelines de Jenkins amb Docker
Exemple de Pipeline amb Docker
A continuació, es mostra un exemple de pipeline de Jenkins que utilitza Docker per construir i executar una aplicació:
pipeline { agent any stages { stage('Build') { steps { script { docker.image('maven:3.6.3-jdk-8').inside { sh 'mvn clean install' } } } } stage('Test') { steps { script { docker.image('openjdk:8').inside { sh 'java -jar target/my-app.jar' } } } } } }
Explicació del Pipeline
- agent any: Indica que el pipeline pot executar-se en qualsevol agent disponible.
- stage('Build'): Utilitza una imatge Docker de Maven per construir l'aplicació.
- stage('Test'): Utilitza una imatge Docker de OpenJDK per executar les proves.
Exercici Pràctic
Objectiu
Crear un pipeline de Jenkins que utilitzi Docker per construir i executar una aplicació simple.
Passos
-
Crear un Repositori Git amb un Projecte Maven:
- Crea un projecte Maven simple amb un fitxer
pom.xml
i una classe Java principal.
- Crea un projecte Maven simple amb un fitxer
-
Configurar Jenkins per Utilitzar el Repositori Git:
- Crea una nova feina de pipeline a Jenkins.
- Configura el repositori Git en la feina.
-
Definir el Pipeline a Jenkinsfile:
- Afegeix el següent contingut al fitxer
Jenkinsfile
en el teu repositori:
pipeline { agent any stages { stage('Build') { steps { script { docker.image('maven:3.6.3-jdk-8').inside { sh 'mvn clean install' } } } } stage('Test') { steps { script { docker.image('openjdk:8').inside { sh 'java -jar target/my-app.jar' } } } } } }
- Afegeix el següent contingut al fitxer
-
Executar la Feina de Jenkins:
- Executa la feina i verifica que el pipeline es completi correctament.
Solució
El pipeline hauria de construir l'aplicació utilitzant Maven i després executar-la utilitzant OpenJDK, tot dins de contenidors Docker.
Conclusió
En aquest tema, hem après com utilitzar Docker amb Jenkins per crear entorns d'integració contínua més eficients i escalables. Hem vist com instal·lar Jenkins dins d'un contenidor Docker, com crear pipelines que utilitzin Docker per a la construcció i execució d'aplicacions, i hem explorat un exemple pràctic per reforçar els conceptes apresos.
Resum
- Docker permet encapsular aplicacions i les seves dependències en contenidors lleugers.
- Hem après a instal·lar i configurar Jenkins dins d'un contenidor Docker.
- Hem creat pipelines de Jenkins que utilitzen Docker per a la construcció i execució d'aplicacions.
- Hem realitzat un exercici pràctic per aplicar els conceptes apresos.
Amb aquests coneixements, estàs preparat per integrar Docker en els teus pipelines de Jenkins i aprofitar els avantatges dels contenidors per a la teva infraestructura CI/CD.
Jenkins: De Principiant a Avançat
Mòdul 1: Introducció a Jenkins
Mòdul 2: Conceptes Bàsics de Jenkins
- Visió General del Tauler de Jenkins
- Creant i Executant Feines
- Entenent les Pipelines de Jenkins
- Utilitzant Plugins de Jenkins
Mòdul 3: Pipelines de Jenkins
- Pipeline com a Codi
- Pipelines Declaratives vs Scriptades
- Creant una Pipeline Simple
- Sintaxi de Pipeline
Mòdul 4: Pipelines Avançades de Jenkins
- Etapes i Passos de Pipeline
- Execució Paral·lela en Pipelines
- Utilitzant Variables d'Entorn
- Millors Pràctiques de Pipeline
Mòdul 5: Administració de Jenkins
- Gestionant Nodes de Jenkins
- Configurant la Seguretat
- Còpia de Seguretat i Restauració de Jenkins
- Monitorant Jenkins
Mòdul 6: Integrant Jenkins
- Integració amb Sistemes de Control de Versions
- Integració amb Eines de Compilació
- Integració amb Eines de Prova
- Integració amb Eines de Desplegament
Mòdul 7: Jenkins per a la Integració i el Lliurament Continu (CI/CD)
- Entenent CI/CD
- Configurant una Pipeline de CI
- Configurant una Pipeline de CD
- Automatitzant Desplegaments
Mòdul 8: Temes Avançats de Jenkins
- Utilitzant Jenkins amb Docker
- Jenkins i Kubernetes
- Jenkins com a Codi amb Jenkinsfile
- Escalant Jenkins