Quand deux pipelines déploient sur le même environnement en parallèle, le deuxième écrase le premier. Résultat : état incohérent, erreurs de connexion, rollback en catastrophe.

resource_group règle ça proprement. Tu assignes un nom de groupe à un job de déploiement. GitLab garantit qu’un seul job par groupe s’exécute à la fois. Les autres attendent.

deploy_staging:
  stage: deploy
  script: ./deploy.sh staging
  environment:
    name: staging
  resource_group: staging

Si deux pipelines arrivent en même temps sur deploy_staging, le premier s’exécute, le deuxième attend que le premier finisse. Pas de lock manuel, pas de vérification Slack “qui déploie ?”.

Avec environment: action: stop

deploy_review:
  stage: deploy
  script: ./deploy-review.sh
  environment:
    name: review/$CI_COMMIT_REF_SLUG
    on_stop: stop_review
  resource_group: review

stop_review:
  stage: deploy
  script: ./destroy-review.sh
  environment:
    name: review/$CI_COMMIT_REF_SLUG
    action: stop
  when: manual

Le resource_group garantit que deploy_review et stop_review ne tournent jamais en parallèle sur la même review app.

Le piège

resource_group est défini au niveau du job, pas de l’environnement. Si deux jobs déploient sur le même environment: staging mais ont des resource_group différents, ils s’exécutent en parallèle. Le nom du groupe doit correspondre à l’environnement que tu protèges.