Générateur de Pipeline GitLab CI/CD (.gitlab-ci.yml)
Hub d'automatisation GitLab CI/CD

Générateur de Pipeline GitLab CI/CD (.gitlab-ci.yml)

Référence technique pour générer des pipelines de production GitLab CI/CD (.gitlab-ci.yml) pour Node.js, Python, Go, Rust et conteneurs Kaniko.

Prêt pour GitLab CI
Préréglages :
Paramètres d'environnement Node.js
# ============================================================================
# GitLab CI/CD Pipeline Configuration (.gitlab-ci.yml)
# Synthesized via ToolsAA Flagship Generator (100% Client-Side Engine)
# ============================================================================

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

stages:
  - lint
  - test
  - security
  - build
  - deploy

default:
  image: node:20-alpine
  interruptible: true
  retry:
    max: 2
    when:
      - runner_system_failure
      - stuck_or_timeout_failure
  tags:
    - docker
    - saas-linux-medium-amd64

variables:
  FF_USE_FASTZIP: "true"
  ARTIFACT_COMPRESSION_LEVEL: "fast"
  CACHE_COMPRESSION_LEVEL: "fast"
  SAST_EXCLUDED_PATHS: "test, tests, spec, docs"
  NEXT_TELEMETRY_DISABLED: "1"
  CI: "true"

cache:
  key:
    files:
      - pnpm-lock.yaml
  policy: pull-push
  paths:
    - .pnpm-store
    - node_modules/.cache

lint-and-format:
  stage: lint
  timeout: 25m
  rules:
    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
    - if: $CI_PIPELINE_SOURCE == "merge_request_event"
    - if: $CI_COMMIT_TAG
  before_script:
    - npm install -g pnpm
    - pnpm config set store-dir .pnpm-store
    - pnpm install --frozen-lockfile
  script:
    - pnpm run lint
    - pnpm run typecheck

unit-tests:
  stage: test
  timeout: 25m
  parallel:
    matrix:
      - NODE_VERSION: ["18", "20", "22"]
  image: node:${NODE_VERSION}-alpine
  rules:
    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
    - if: $CI_PIPELINE_SOURCE == "merge_request_event"
    - if: $CI_COMMIT_TAG
  before_script:
    - npm install -g pnpm
    - pnpm config set store-dir .pnpm-store
    - pnpm install --frozen-lockfile
  script:
    - pnpm test -- --coverage
  coverage: '/Lines\s*:\s*(\d+\.\d+\%)/'
  artifacts:
    reports:
      junit: junit.xml
      coverage_report:
        coverage_format: cobertura
        path: coverage/cobertura-coverage.xml
    expire_in: 3 days
    when: always

compile-and-package:
  stage: build
  timeout: 25m
  rules:
    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
    - if: $CI_PIPELINE_SOURCE == "merge_request_event"
    - if: $CI_COMMIT_TAG
  before_script:
    - npm install -g pnpm
    - pnpm install --frozen-lockfile
  script:
    - pnpm run build
  artifacts:
    paths:
      - dist/
      - .next/
      - coverage/
    expire_in: 1 week
    when: on_success

deploy-service:
  stage: deploy
  environment:
    name: production
    url: https://toolsaa.com
  rules:
    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
      when: manual
  script:
    - echo "Deploying production bundle..."
Efficacité du Pipeline
95%+ Fastzip Enabled
Score de Sécurité
100 / 100SAST Active
Accélération Estimée
3.5x FasterLockfile Cache

Confidentialité 100% Côté Client

Générez des pipelines GitLab CI complets dans la mémoire de votre navigateur sans aucun transfert externe de données ou clés.

Architecture GitLab CI Native

Compatibilité intégrale avec l'ordonnancement multi-étapes, les builds Kaniko sans privilèges, le cache lockfile et les modèles SAST.

DevSecOps & Optimisation de Vitesse

Inclusion automatisée de la détection de secrets et SAST, accélération par compression Fastzip et annulation des jobs obsolètes.

Référence technique et guide d'architecture

Référence du Générateur GitLab CI — Guide de référence

Référence technique pour générer des pipelines de production GitLab CI/CD (.gitlab-ci.yml) pour Node.js, Python, Go, Rust et conteneurs Kaniko.

Paramètres clés et contrôles

ecosystem'node' | 'python' | 'go' | 'rust' | 'docker' | 'pages' | 'generic'

Définit l'écosystème d'exécution, configurant les images de conteneurs de base, les outils CLI et les scripts de compilation standards.

Par défaut : 'node'
nodePkgManager'pnpm' | 'npm' | 'yarn' | 'bun'

Sélectionne le gestionnaire de paquets Node.js, paramétrant la détection du lockfile, les répertoires de cache et les drapeaux d'installation figée.

Par défaut : 'pnpm'
cacheKeyType'branch' | 'job' | 'lockfile'

Configure la stratégie de clé de cache selon la branche Git, le nom du job ou la somme de contrôle du lockfile pour l'invalidation automatique.

Par défaut : 'lockfile'
cachePolicy'pull-push' | 'pull' | 'push'

Gère les transferts de cache du runner ; 'pull' télécharge sans renvoyer de données, tandis que 'pull-push' met à jour le stockage partagé.

Par défaut : 'pull-push'
dockerEngine'kaniko' | 'dind'

Définit le moteur de compilation de conteneurs : Google Kaniko sans privilèges root ou Docker-in-Docker (dind) en mode privilégié.

Par défaut : 'kaniko'
interruptibleboolean

Active l'annulation automatique des pipelines obsolètes dès qu'un nouveau commit est poussé sur la même branche ou merge request.

Par défaut : true

Conseils de pro et bonnes practices

Remplacer Only par Règles Rules

Migrez les directives obsolètes 'only/except' vers des blocs 'rules:' modernes avec vérifications '$CI_COMMIT_BRANCH'. Cela procure un contrôle granulaire des événements de merge request, des validations manuelles ('when: manual') et de détection de modifications ('changes:').

Activer Policy Pull pour Tests

Définissez des clés de cache avec 'key: files: [pnpm-lock.yaml]' pour une invalidation par hachage. Dans les jobs de test et de lint sans ajout de paquets, configurez 'policy: pull' pour éviter la compression et l'envoi de données inutiles en fin de job.

Accélérer les DAG avec Needs

Dépassez la synchronisation stricte des étapes en déclarant 'needs: [job_name]' sur les jobs indépendants. Les jobs démarrent dès que leurs prérequis s'achèvent, sans attendre les autres tâches concurrentes du même stade, formant un graphe orienté acyclique.

Compiler sans Root avec Kaniko

Privilégiez Google Kaniko ('gcr.io/kaniko-project/executor:debug') au lieu de Docker-in-Docker. Kaniko compile et publie des images de conteneurs dans l'espace utilisateur non privilégié, supprimant le besoin de configurer les runners en mode 'privileged = true'.

Pièges courants et dépannage

Job bloqué en attente : "This job is stuck because you don't have any active runners online with any of these tags"

Accédez à Paramètres > CI/CD > Runners et vérifiez les tags associés. Attribuez le tag défini dans runnerTags à votre GitLab Runner, ou activez l'option "Exécuter les jobs non tagués (Run untagged jobs)" si aucune étiquette stricte n'est requise.

Échec de validation YAML : "jobs:job_name config should implement a script: or a trigger: keyword"

Chaque job exécutable doit déclarer un tableau 'script:' ou une directive 'trigger:'. Pour concevoir des modèles réutilisables, préfixez l'identifiant par un point (ex. '.base_job:') pour déclarer un job masqué hérité via le mot-clé 'extends:'.

Erreur de connexion au démon Docker : "Cannot connect to the Docker daemon at unix:///var/run/docker.sock"

En utilisant Docker-in-Docker ('dind'), assurez-vous que 'privileged = true' est actif dans le fichier config.toml du runner. Déclarez les variables 'DOCKER_HOST: tcp://docker:2375' et 'DOCKER_TLS_CERTDIR: ""' pour les configurations sans certificats TLS.

Foire aux questions (FAQ)

Quelle est la différence fondamentale entre 'cache' et 'artifacts' dans GitLab CI ?▼

Le cache conserve des dépendances éphémères (comme node_modules ou .pnpm-store) entre les exécutions pour accélérer les jobs ; son absence n'interrompt pas le pipeline. Les artifacts sont des livrables immuables (dossiers dist/, rapports junit.xml) transmis avec certitude aux étapes suivantes et stockés sur l'instance GitLab.

Comment la directive 'needs' optimise-t-elle l'exécution par rapport aux étapes linéaires ?▼

Par défaut, GitLab CI attend la fin de tous les jobs d'une étape avant d'enclencher la suivante. Avec 'needs: [job_name]', le pipeline adopte un graphe orienté acyclique (DAG) : le job s'exécute dès que son prérequis direct est validé, sans patienter après d'autres tâches lentes de l'étape précédente.

Comment éviter la création de pipelines en double lors de pushs et de merge requests ?▼

Déclarez une section globale 'workflow:rules:' autorisant les exécutions si '$CI_PIPELINE_SOURCE == "merge_request_event"' ou lors de pushs sur les branches principales sans MR actif. Ce filtrage prévient le déclenchement simultané et redondant de deux pipelines pour le même commit.

Pourquoi privilégier Kaniko face à Docker-in-Docker sur des runners Kubernetes ?▼

Docker-in-Docker nécessite un conteneur en mode 'privileged = true', introduisant des risques majeurs d'évasion de conteneur. Google Kaniko compile et pousse les images de conteneurs dans l'espace utilisateur sans aucun privilège administrateur, sans daemon Docker actif ni montage du socket hôte.

Outils et utilitaires connexes

Tous les outils →
Guide Développeur du Générateur de Configuration Supervisord Linux (supervisord.conf)Développement

Générez des blocs de configuration de programmes Supervisord prêts pour la production avec redémarrage automatique, multi-processus, redirection des logs et privilèges utilisateur.

Ouvrir l'outil→
Référence Développeur HAProxy Config GeneratorDéveloppement

Générateur et validateur syntaxique de configurations HAProxy taillé pour la production.

Ouvrir l'outil→
Guide Développeur du Générateur de Helm Charts Kubernetes (Chart.yaml & values.yaml)Développement

Générez des fichiers standard Kubernetes Helm v3 Chart.yaml, values.yaml et modèles de déploiement avec Service, Ingress et limites de ressources.

Ouvrir l'outil→
Guide Développeur du Générateur de Dockerfile Multi-Étapes (Node, Go, Python, Rust)Développement

Générez des Dockerfiles multi-étapes sécurisés et ultra-légers pour Node.js, Golang, Python, Rust et Java avec utilisateur non-root et optimisation du cache BuildKit.

Ouvrir l'outil→
Référence Développeur Sql To KyselyDéveloppement

Manuel technique de référence et générateur de schémas pour convertir des définitions SQL DDL en interfaces TypeScript Kysely robustes pour PostgreSQL, MySQL et SQLite.

Ouvrir l'outil→
Guide du Développeur du Générateur d'Entités MikroORM TypeScript depuis SQL DDLDéveloppement

Convertissez les instructions SQL CREATE TABLE en classes d'entité MikroORM avec @Entity, @PrimaryKey, @Property, @Index et relations.

Ouvrir l'outil→