Gerador de Pipelines GitLab CI/CD (.gitlab-ci.yml)
Hub de automação GitLab CI/CD

Gerador de Pipelines GitLab CI/CD (.gitlab-ci.yml)

Referência técnica para gerar pipelines de produção do GitLab CI/CD (.gitlab-ci.yml) para Node.js, Python, Go, Rust e contêineres Kaniko.

Pronto para GitLab CI
Predefinições:
Configurações de ambiente 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..."
Eficiência do Pipeline
95%+ Fastzip Enabled
Pontuação de Segurança
100 / 100SAST Active
Aceleração Estimada
3.5x FasterLockfile Cache

Privacidade 100% no Navegador

Gera pipelines GitLab CI inteiramente na memória do navegador sem enviar arquitetura confidencial para servidores externos.

Arquitetura Nativa GitLab CI

Conformidade total com execução multi-estágio, builds rootless com Kaniko, cache baseado em lockfile e templates de segurança.

DevSecOps e Desempenho Blindado

Integração automática de SAST e detecção de segredos, aceleração por compressão Fastzip e cancelamento de pipelines redundantes.

Referência técnica e guia de arquitetura

Referência do Gerador de GitLab CI — Guia de referência

Referência técnica para gerar pipelines de produção do GitLab CI/CD (.gitlab-ci.yml) para Node.js, Python, Go, Rust e contêineres Kaniko.

Parâmetros principais e controles

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

Define o ecossistema de execução, configurando imagens de contêiner base, ferramentas de CLI e comandos padrão de compilação.

Padrão: 'node'
nodePkgManager'pnpm' | 'npm' | 'yarn' | 'bun'

Seleciona o gerenciador de pacotes Node.js, configurando resolução de lockfile, diretórios de cache global e flags de instalação congelada.

Padrão: 'pnpm'
cacheKeyType'branch' | 'job' | 'lockfile'

Determina a estratégia da chave de cache com base na branch Git, nome do job ou checksum do lockfile para invalidação automática.

Padrão: 'lockfile'
cachePolicy'pull-push' | 'pull' | 'push'

Controla a transferência de cache no runner; 'pull' apenas descarrega o cache, enquanto 'pull-push' atualiza o armazenamento no final do job.

Padrão: 'pull-push'
dockerEngine'kaniko' | 'dind'

Escolhe o mecanismo de compilação de contêineres: Google Kaniko sem privilégios de root ou Docker-in-Docker (dind) com modo privilegiado.

Padrão: 'kaniko'
interruptibleboolean

Habilita o cancelamento automático de pipelines desatualizados quando novos commits são enviados para a mesma branch ou merge request.

Padrão: true

Dicas profissionais e melhores práticas

Substituir Only por Regras Rules

Migre diretivas legadas 'only/except' para blocos modernos 'rules:' com verificações '$CI_COMMIT_BRANCH'. Isso viabiliza controle granular sobre eventos de merge request, liberações manuais ('when: manual') e detecção de arquivos alterados ('changes:').

Ativar Policy Pull em Testes

Defina chaves de cache utilizando 'key: files: [pnpm-lock.yaml]'. Em etapas de teste e lint que não adicionam pacotes, configure 'policy: pull' para dispensar o empacotamento redundante e o tempo de upload ao término do runner.

Acelerar Pipelines com DAG Needs

Contorne barreiras lineares entre stages declarando 'needs: [job_name]' em jobs independentes. Os jobs posteriores iniciam no milissegundo em que seus pré-requisitos terminam, sem aguardar outros processos simultâneos do stage anterior.

Compilação Segura com Kaniko

Adote o Google Kaniko ('gcr.io/kaniko-project/executor:debug') em vez de Docker-in-Docker. O Kaniko constrói e envia imagens de contêiner em espaço de usuário não privilegiado, eliminando os riscos de segurança do modo 'privileged = true'.

Problemas comuns e solução de problemas

Job travado em estado pendente: "This job is stuck because you don't have any active runners online with any of these tags"

Acesse Configurações > CI/CD > Runners e confira as tags. Atribua as tags correspondentes de runnerTags ao seu GitLab Runner ou marque a opção "Executar jobs sem tags (Run untagged jobs)" nas preferências do runner caso não utilize tags obrigatórias.

Erro de validação YAML: "jobs:job_name config should implement a script: or a trigger: keyword"

Todo job executável precisa definir uma lista 'script:' ou um comando 'trigger:'. Para criar modelos reaproveitáveis, inicie o nome do job com um ponto (ex.: '.base_job:') para torná-lo um template oculto herdado posteriormente através de 'extends:'.

Falha de conexão com daemon Docker: "Cannot connect to the Docker daemon at unix:///var/run/docker.sock"

Ao utilizar Docker-in-Docker ('dind'), garanta que o executor no config.toml do runner esteja com 'privileged = true'. Defina as variáveis de ambiente 'DOCKER_HOST: tcp://docker:2375' e 'DOCKER_TLS_CERTDIR: ""' para desativar a exigência de certificados TLS.

Perguntas frequentes (FAQ)

Qual a diferença prática entre 'cache' e 'artifacts' no GitLab CI?▼

O cache armazena dependências temporárias (como node_modules ou diretórios .cache) para acelerar execuções futuras no runner ou S3; uma falha de cache não invalida o job. Já os artifacts são produtos finais ou relatórios compilados (dist/, junit.xml) transmitidos com integridade garantida aos estágios subsequentes.

Como a palavra-chave 'needs' otimiza o pipeline em comparação às etapas sequenciais?▼

Pipelines convencionais bloqueiam a execução até que todos os jobs da etapa atual sejam concluídos. Ao declarar 'needs: [job_name]', cria-se um Grafo Acíclico Dirigido (DAG): o job dependente inicia no instante exato em que seu pré-requisito termina, sem esperar por jobs mais lentos de etapas anteriores.

Como evitar a criação de pipelines duplicados em push e merge requests?▼

Insira uma seção global 'workflow:rules:' com condições explícitas: execute pipelines quando '$CI_PIPELINE_SOURCE == "merge_request_event"' ou em branches padrão sem MR aberto. Esse padrão impede o disparo simultâneo de pipelines da branch e do merge request.

Por que o Kaniko é mais seguro que Docker-in-Docker em runners Kubernetes?▼

O Docker-in-Docker exige que o contêiner opere em modo privilegiado ('privileged = true'), criando vulnerabilidades de fuga do contêiner no host. O Google Kaniko compila imagens diretamente no espaço de usuário não privilegiado, dispensando qualquer acesso ao daemon do Docker ou ao socket do sistema operacional.

Ferramentas e utilitários relacionados

Todas as ferramentas →