En aquest exercici, aprendrem a configurar i executar un pipeline de CI/CD per desplegar una aplicació en un entorn de producció. Utilitzarem Jenkins com a eina principal per a la configuració del pipeline.
Objectius de l'Exercici
- Configurar un pipeline de CI/CD en Jenkins.
- Automatitzar el desplegament d'una aplicació en un entorn de producció.
- Integrar proves de desplegament per assegurar la qualitat del codi.
- Implementar estratègies de desplegament segures i eficients.
Requisits Previs
- Coneixements bàsics de Jenkins.
- Coneixements bàsics de Docker i Kubernetes.
- Accés a un entorn de producció (pot ser un servidor virtual o un clúster de Kubernetes).
- Coneixements bàsics de Git.
Passos de l'Exercici
- Configuració del Pipeline en Jenkins
1.1 Crear un Nou Job en Jenkins
- Inicia sessió a la teva instància de Jenkins.
- Crea un nou job seleccionant "Pipeline" com a tipus de projecte.
- Dona-li un nom al job, per exemple,
deploy-to-production
.
1.2 Definir el Pipeline
A la secció de configuració del job, defineix el pipeline utilitzant el següent script:
pipeline { agent any stages { stage('Checkout') { steps { git 'https://github.com/usuari/repo.git' } } stage('Build') { steps { sh 'docker build -t usuari/app:latest .' } } stage('Test') { steps { sh 'docker run usuari/app:latest ./run-tests.sh' } } stage('Deploy') { steps { script { def server = 'produccio.server.com' def user = 'deploy_user' def app = 'usuari/app:latest' sh "ssh ${user}@${server} 'docker pull ${app} && docker stop app || true && docker rm app || true && docker run -d --name app ${app}'" } } } } }
- Automatització del Desplegament
2.1 Construcció de la Imatge Docker
En l'etapa de Build
, construïm la imatge Docker de l'aplicació. Assegura't que el Dockerfile
estigui a l'arrel del repositori.
2.2 Proves Automatitzades
Executem les proves automatitzades dins d'un contenidor Docker per assegurar-nos que la imatge és funcional.
2.3 Desplegament a Producció
Utilitzem SSH per connectar-nos al servidor de producció i desplegar la nova imatge Docker.
ssh ${user}@${server} 'docker pull ${app} && docker stop app || true && docker rm app || true && docker run -d --name app ${app}'
- Estratègies de Desplegament
3.1 Desplegament Blue-Green
Una estratègia de desplegament blue-green implica tenir dos entorns d'aplicació (blue i green). Només un d'ells està actiu en producció en qualsevol moment. Quan es fa un desplegament, es desplega la nova versió en l'entorn inactiu i després es canvia el trànsit a aquest entorn.
3.2 Desplegament Canari
El desplegament canari implica desplegar la nova versió a un subconjunt de servidors o usuaris per monitoritzar el seu rendiment abans de desplegar-la completament.
- Monitoratge i Retroalimentació
4.1 Configuració del Monitoratge
Configura eines de monitoratge com Prometheus i Grafana per monitoritzar el rendiment de l'aplicació després del desplegament.
4.2 Retroalimentació
Implementa alertes i notificacions per rebre retroalimentació immediata en cas de problemes després del desplegament.
Exercici Pràctic
Tasca 1: Configura el Pipeline
Configura el pipeline en Jenkins seguint els passos descrits anteriorment.
Tasca 2: Executa el Pipeline
Executa el pipeline i assegura't que totes les etapes es completen correctament.
Tasca 3: Implementa una Estratègia de Desplegament
Implementa una estratègia de desplegament blue-green o canari en el teu pipeline.
Tasca 4: Configura el Monitoratge
Configura eines de monitoratge per la teva aplicació desplegada.
Solucions
Solució a la Tasca 1
pipeline { agent any stages { stage('Checkout') { steps { git 'https://github.com/usuari/repo.git' } } stage('Build') { steps { sh 'docker build -t usuari/app:latest .' } } stage('Test') { steps { sh 'docker run usuari/app:latest ./run-tests.sh' } } stage('Deploy') { steps { script { def server = 'produccio.server.com' def user = 'deploy_user' def app = 'usuari/app:latest' sh "ssh ${user}@${server} 'docker pull ${app} && docker stop app || true && docker rm app || true && docker run -d --name app ${app}'" } } } } }
Solució a la Tasca 3
Implementació d'una estratègia de desplegament blue-green:
stage('Deploy') { steps { script { def server = 'produccio.server.com' def user = 'deploy_user' def app = 'usuari/app:latest' def blue = 'app-blue' def green = 'app-green' sh "ssh ${user}@${server} 'docker pull ${app} && docker stop ${green} || true && docker rm ${green} || true && docker run -d --name ${green} ${app}'" sh "ssh ${user}@${server} 'docker stop ${blue} || true && docker rm ${blue} || true && docker rename ${green} ${blue}'" } } }
Conclusió
En aquest exercici, hem après a configurar un pipeline de CI/CD en Jenkins per desplegar una aplicació en un entorn de producció. Hem automatitzat la construcció, les proves i el desplegament de l'aplicació, i hem implementat estratègies de desplegament segures. A més, hem configurat eines de monitoratge per assegurar-nos que l'aplicació funciona correctament després del desplegament.
Curs de CI/CD: Integració i Desplegament Continu
Mòdul 1: Introducció a CI/CD
Mòdul 2: Integració Contínua (CI)
- Introducció a la Integració Contínua
- Configuració d'un Entorn de CI
- Automatització de la Construcció
- Proves Automatitzades
- Integració amb Control de Versions
Mòdul 3: Desplegament Continu (CD)
- Introducció al Desplegament Continu
- Automatització del Desplegament
- Estratègies de Desplegament
- Monitoratge i Retroalimentació
Mòdul 4: Pràctiques Avançades de CI/CD
Mòdul 5: Implementació de CI/CD en Projectes Reals
Mòdul 6: Eines i Tecnologies
Mòdul 7: Exercicis Pràctics
- Exercici 1: Configuració d'un Pipeline Bàsic
- Exercici 2: Integració de Proves Automatitzades
- Exercici 3: Desplegament en un Entorn de Producció
- Exercici 4: Monitoratge i Retroalimentació