Curs 6 - Jenkins: Automatizarea CI/CD

Acest curs explorează Jenkins, un instrument DevOps pentru automatizarea CI/CD.

1. Ce este Jenkins?

Jenkins este un server open-source de automatizare care permite integrarea și livrarea continuă (CI/CD) a aplicațiilor software.

2. Instalarea Jenkins

Pe Linux (Ubuntu/Debian), Jenkins poate fi instalat cu:

sudo apt update && sudo apt install openjdk-11-jdk -y
wget -q -O - https://pkg.jenkins.io/debian-stable/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 update && sudo apt install jenkins -y

Pornirea și activarea Jenkins:

sudo systemctl start jenkins
sudo systemctl enable jenkins

Accesarea Jenkins în browser:

Jenkins rulează pe portul 8080. Se accesează la `http://localhost:8080` sau `http://IP-SERVER:8080`.

3. Configurarea Jenkins

Prima dată când Jenkins este accesat, cere un cod de autentificare. Se obține rulând:

sudo cat /var/lib/jenkins/secrets/initialAdminPassword

După autentificare, se pot instala plugin-uri recomandate sau alese manual.

4. Crearea unui Pipeline CI/CD

Pipeline-urile Jenkins definesc pașii de build, test și deployment.

Exemplu de Jenkinsfile pentru un pipeline simplu:

pipeline {
    agent any
    stages {
        stage('Build') {
            steps {
                echo 'Building...'
            }
        }
        stage('Test') {
            steps {
                echo 'Testing...'
            }
        }
        stage('Deploy') {
            steps {
                echo 'Deploying...'
            }
        }
    }
}

Adăugarea pipeline-ului în Jenkins:

- Accesează Jenkins Dashboard: New Item: Pipeline

- Adaugă Jenkinsfile în repository-ul GitHub/GitLab

- Setează repository-ul în configurația pipeline-ului

5. Integrarea Jenkins cu Docker

Pentru rularea testelor în containere, Jenkins poate folosi Docker.

sudo usermod -aG docker jenkins
sudo systemctl restart jenkins

Exemplu de Jenkinsfile cu Docker:

pipeline {
    agent {
        docker { image 'python:3.9' }
    }
    stages {
        stage('Test') {
            steps {
                sh 'python --version'
            }
        }
    }
}

6. Deploy Automatizat în Kubernetes

Jenkins poate livra aplicații în Kubernetes folosind `kubectl`.

Exemplu de Jenkinsfile cu deploy în Kubernetes:

pipeline {
    agent any
    environment {
        KUBE_CONFIG = credentials('kubeconfig')
    }
    stages {
        stage('Deploy to Kubernetes') {
            steps {
                sh 'kubectl apply -f k8s/deployment.yaml'
            }
        }
    }
}

7. Triggers și Automatizare în Jenkins

Jenkins poate fi configurat să declanșeze build-uri automat atunci când un commit este făcut pe GitHub/GitLab.

Exemplu de webhook GitHub pentru Jenkins:

- În GitHub: Settings: Webhooks: Add webhook

- Setează URL-ul către `http://JENKINS_URL/github-webhook/`

Pentru GitLab, activează Push Events Webhooks și setează URL-ul `http://JENKINS_URL/project/YOUR_PROJECT`.

Resurse suplimentare: