agentsclimarketplace

Gitlab ci guide

Skill WhiteMuush/Your-Claude-DevOps-Teacher/skills/gitlab-ci-guide

My own configuration CLAUDE, Dev & Ops specialist and 100% educational.

Install
npx -y skills add WhiteMuush/Your-Claude-DevOps-Teacher --skill gitlab-ci-guide

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

2 things to look at

  • no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
  • 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

What its author says it does

Copied from the file, not written here

Pipelines GitLab CI/CD, stages, jobs, runners, artifacts, environments et Auto DevOps. Se déclenche avec "GitLab CI", "gitlab-ci.yml", "pipeline GitLab", "runner GitLab", "GitLab CD".

SKILL.md

6.1 KB, as published. Nobody here has run it

Guide GitLab CI/CD

1. Concevoir la structure du pipeline

Définir les stages dans l'ordre d'exécution logique. Les jobs d'un même stage tournent en parallèle ; needs: casse cette contrainte pour du DAG.

stages:
  - build
  - test
  - analyze
  - deploy

Critères de découpage :

  • Un stage = une responsabilité (ne pas mélanger build et test).
  • Si un job doit démarrer avant la fin de son stage, utiliser needs: (DAG).
  • Limiter à 6-7 stages max, au-delà, refactorer en pipelines enfants.

2. Écrire les jobs

Structure minimale d'un job de référence :

build:app:
  stage: build
  image: node:22-alpine
  before_script:
    - npm ci --cache .npm --prefer-offline
  script:
    - npm run build
  artifacts:
    paths:
      - dist/
    expire_in: 1 day
  cache:
    key:
      files:
        - package-lock.json
    paths:
      - .npm/

Règles d'exécution, préférer rules: à only/except :

deploy:production:
  stage: deploy
  rules:
    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
      when: manual
    - if: $CI_PIPELINE_SOURCE == "merge_request_event"
      when: never
  environment:
    name: production
    url: https://app.example.com

3. Gérer les runners

TypeCas d'usageConfig clé
Shared runnersCI standard, projets publicsTags vides ou saas-linux-*
Group runnersÉquipe partageant des secrets d'infragroup_runners_enabled: true
Project runnersAccès réseau interne, GPU, WindowsRunner enregistré avec tag dédié

Enregistrer un runner (GitLab 17+) :

gitlab-runner register \
  --url https://gitlab.example.com \
  --token $RUNNER_TOKEN \
  --executor docker \
  --docker-image alpine:latest \
  --tag-list "docker,linux,build"

Auto-scaling avec Docker Machine (on-premise) : utiliser executor = "docker+machine" + provider cloud dans config.toml. Pour Kubernetes : utiliser le runner Helm chart officiel.

4. Cache et artifacts

# Cache partagé entre branches, clé sur fichier de lock
cache:
  key:
    files:
      - yarn.lock
  paths:
    - node_modules/
  policy: pull-push   # pull-push par défaut ; "pull" pour jobs read-only

# Artifact de test coverage
test:unit:
  script: pytest --cov=src --cov-report=xml
  artifacts:
    reports:
      coverage_report:
        coverage_format: cobertura
        path: coverage.xml
    expire_in: 7 days

Règle : toujours mettre expire_in sur les artifacts, sans ça, GitLab conserve par défaut selon la config instance (peut saturer le stockage).

dependencies: [] sur les jobs de déploiement pour ne pas télécharger d'artifacts inutiles.

5. Pipelines avancés

DAG avec needs:

test:unit:
  stage: test
  needs: [build:app]   # démarre dès que build:app est terminé, pas toute la stage build

test:e2e:
  stage: test
  needs: [build:app, build:docker]

Pipelines enfants (monorepo)

trigger:backend:
  trigger:
    include: backend/.gitlab-ci.yml
    strategy: depend   # le parent attend la fin du pipeline enfant
  rules:
    - changes:
        - backend/**/*

Templates partagés

include:
  - project: 'infra/ci-templates'
    ref: main
    file: '/templates/docker-build.yml'
  - template: 'Security/SAST.gitlab-ci.yml'

6. Environnements et déploiements

deploy:review:
  stage: deploy
  script: ./scripts/deploy-review.sh $CI_ENVIRONMENT_SLUG
  environment:
    name: review/$CI_COMMIT_REF_SLUG
    url: https://$CI_ENVIRONMENT_SLUG.preview.example.com
    on_stop: stop:review
  rules:
    - if: $CI_PIPELINE_SOURCE == "merge_request_event"

stop:review:
  stage: deploy
  script: ./scripts/teardown-review.sh $CI_ENVIRONMENT_SLUG
  environment:
    name: review/$CI_COMMIT_REF_SLUG
    action: stop
  when: manual
  rules:
    - if: $CI_PIPELINE_SOURCE == "merge_request_event"

7. Sécurité intégrée

Activer les scanners natifs via les templates officiels :

include:
  - template: Security/SAST.gitlab-ci.yml
  - template: Security/Dependency-Scanning.gitlab-ci.yml
  - template: Security/Container-Scanning.gitlab-ci.yml
  - template: Security/Secret-Detection.gitlab-ci.yml

Variables sensibles :

# Via CLI
glab variable set MY_SECRET "valeur" --masked --protected --project monprojet

Dans l'UI : Settings > CI/CD > Variables → cocher Masked + Protected.

Garde-fous et anti-patterns

Anti-patternConséquenceCorrection
Utiliser only/exceptComportement imprévisible sur MRMigrer vers rules:
Artifacts sans expire_inSaturation stockageToujours fixer expire_in
Secrets en clair dans le scriptFuite dans les logsVariables masked + protected
Un seul .gitlab-ci.yml de 500 lignesIllisible, impossible à maintenirinclude:local: par domaine
Cache sans key:files:Cache invalidé ou réutilisé à tortClé sur fichier de lock
when: always sur les jobs de cleanupExécution même en cas d'échec upstreamwhen: on_failure ou needs: explicite
Pas de interruptible: true sur les jobs de buildFiles de runners saturéesMarquer les jobs annulables

Bonnes pratiques 2026

  • Pipeline Component Catalog (GitLab 16.9+) : publier des composants réutilisables dans le Catalog plutôt que des templates include:remote.
  • CI/CD Catalog : préférer component: à include:project: pour la versioning sémantique.
  • id_tokens: (OIDC) : remplacer les tokens statiques pour l'auth cloud (AWS, Azure, GCP) par des tokens OIDC courts-vivants.
  • Merge Train : activer sur les branches protégées à fort trafic pour éviter les régressions post-merge.
  • dast_configuration: : pointer sur un environnement de review pour le DAST plutôt qu'une URL codée en dur.
  • Tester le pipeline localement avant push : gitlab-runner exec docker build:app.

Keep looking

Skills are one crate of 328,083. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.