Environments GitLab
Les environments permettent de suivre les deploiements :
deploy-staging:
stage: deploy
script: ./deploy.sh staging
environment:
name: staging
url: https://staging.example.com
on_stop: stop-staging
rules:
- if: $CI_COMMIT_BRANCH == "develop"
stop-staging:
stage: deploy
script: ./teardown.sh staging
environment:
name: staging
action: stop
rules:
- if: $CI_COMMIT_BRANCH == "develop"
when: manual
deploy-production:
stage: deploy
script: ./deploy.sh production
environment:
name: production
url: https://www.example.com
rules:
- if: $CI_COMMIT_TAG =~ /^v\d+/
when: manual
Review Apps
Les review apps creent un environnement temporaire par merge request :
review:
stage: deploy
script:
- kubectl apply -f k8s/ --namespace=review-$CI_MERGE_REQUEST_IID
- echo "Deploye sur https://review-${CI_MERGE_REQUEST_IID}.example.com"
environment:
name: review/$CI_COMMIT_REF_SLUG
url: https://review-${CI_MERGE_REQUEST_IID}.example.com
on_stop: stop-review
auto_stop_in: 1 week
rules:
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
stop-review:
stage: deploy
script:
- kubectl delete namespace review-$CI_MERGE_REQUEST_IID
environment:
name: review/$CI_COMMIT_REF_SLUG
action: stop
rules:
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
when: manual
GitOps Workflow
Le modele GitOps utilise Git comme source de verite pour l'infrastructure :
- Toute modification passe par une merge request
- L'etat desire est declare dans Git
- Un agent synchronise l'etat reel avec l'etat desire
GitLab Agent for Kubernetes
# .gitlab/agents/my-agent/config.yaml
gitops:
manifest_projects:
- id: my-group/my-manifests
default_namespace: production
paths:
- glob: "manifests/*.yaml"
reconcile_timeout: 3600s
dry_run_strategy: none
Avantage : Les review apps permettent aux reviewers de tester les changements dans un environnement reel avant le merge.