GitOps avec GitLab 30 min de lecture

Environments, review apps et Auto DevOps

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.