Curs 3 - CI/CD cu Docker și Kubernetes

Acest curs explorează procesul de CI/CD utilizând Docker și Kubernetes, integrând GitHub Actions și GitLab CI/CD pentru automatizarea livrării aplicațiilor.

1. Introducere în CI/CD

CI/CD este o metodă DevOps care automatizează integrarea și livrarea aplicațiilor containerizate.

- Continuous Integration (CI): Automatizarea testării și validării codului.

- Continuous Deployment (CD): Automatizarea livrării în medii de producție.

2. Configurarea unui Pipeline CI/CD cu GitHub Actions

GitHub Actions permite automatizarea fluxurilor de lucru pentru build, test și deployment.

Exemplu de workflow `.github/workflows/docker-deploy.yml`:

name: Docker Build and Push

on:
  push:
    branches:
      - main

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v2
      - name: Login to Docker Hub
        run: echo "${{ secrets.DOCKER_PASSWORD }}" | docker login -u "${{ secrets.DOCKER_USERNAME }}" --password-stdin
      - name: Build and Push Docker Image
        run: |
          docker build -t myapp:latest .
          docker tag myapp:latest mydockerhub/myapp:latest
          docker push mydockerhub/myapp:latest

3. CI/CD cu GitLab CI/CD

GitLab CI/CD folosește `.gitlab-ci.yml` pentru a defini pipeline-urile de integrare și livrare continuă.

Exemplu de `.gitlab-ci.yml` pentru Docker și Kubernetes:

stages:
  - build
  - deploy

build:
  stage: build
  script:
    - docker build -t mydockerhub/myapp:latest .
    - docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD"
    - docker push mydockerhub/myapp:latest

deploy:
  stage: deploy
  script:
    - kubectl apply -f k8s/deployment.yaml

4. Deployment Automatizat în Kubernetes

Aplicațiile containerizate pot fi livrate automat către un cluster Kubernetes folosind `kubectl apply`.

Exemplu de fișier `deployment.yaml` pentru Kubernetes:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp
spec:
  replicas: 3
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
        - name: myapp
          image: mydockerhub/myapp:latest
          ports:
            - containerPort: 5000

Comenzile pentru deploy în Kubernetes:

# Aplicarea configurației în Kubernetes
kubectl apply -f deployment.yaml

# Verificarea podurilor active
kubectl get pods

Resurse suplimentare: