CI/CD avec GitLab et Kubernetes 28 min de lecture

GitLab Runner et environnements

GitLab Runner sur Kubernetes

Le GitLab Runner est l'agent qui execute les jobs CI/CD. En le deployant sur Kubernetes, chaque job tourne dans un pod ephemere.

Deployer le Runner avec Helm

# Installer le GitLab Runner sur le cluster
helm repo add gitlab https://charts.gitlab.io
helm repo update

helm install gitlab-runner gitlab/gitlab-runner \
  --namespace gitlab-runner \
  --create-namespace \
  --set gitlabUrl=https://gitlab.example.com \
  --set runnerToken="glrt-xxxxxxxxxxxx" \
  --set runners.executor=kubernetes \
  --set runners.kubernetes.namespace=gitlab-ci-jobs

Comment ca fonctionne

Architecture GitLab Runner sur K8s :

  GitLab Server
       |
       v
  +-------------------+
  | GitLab Runner Pod |  (toujours en cours d'execution)
  | (coordinateur)    |
  +-------------------+
       |
       | Cree un pod par job
       v
  +-------------------+  +-------------------+  +-------------------+
  | Job Pod #1        |  | Job Pod #2        |  | Job Pod #3        |
  | (build)           |  | (test)            |  | (deploy)          |
  | - clone le code   |  | - lance les tests |  | - kubectl apply   |
  | - docker build    |  | - genere rapport  |  | - rollout status  |
  +-------------------+  +-------------------+  +-------------------+
       |                      |                      |
       v                      v                      v
    Termine               Termine               Termine
    Pod supprime          Pod supprime          Pod supprime

Environnements GitLab

# Pipeline avec environnements multiples
stages:
  - test
  - build
  - deploy

deploy-staging:
  stage: deploy
  script:
    - kubectl apply -f k8s/ -n staging
  environment:
    name: staging
    url: https://staging.example.com
  only:
    - develop

deploy-production:
  stage: deploy
  script:
    - kubectl apply -f k8s/ -n production
  environment:
    name: production
    url: https://app.example.com
  when: manual
  only:
    - main
Avantage : Chaque job CI tourne dans un pod isole. Pas de pollution entre jobs, pas de dependances residuelles, et le cluster gere les ressources automatiquement.