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.