CI GitLab é um dos sistemas CI/CD mais poderosos e totalmente integrados disponíveis em 2026 — sem necessidade de serviços externos, pipelines definidos em um único.gitlab-ci.yml arquivo. Este guia cria um pipeline completo, desde o teste até a implantação em produção.
📋 Table of Contents
- Como funciona o GitLab CI
- Estrutura Básica do Pipeline
- Construir estágio com Docker
- Estágio de implantação com ambientes
- Cache para pipelines mais rápidos
- Construções de matrizes paralelas
- Gerenciando segredos e variáveis Nunca codifique segredos. Armazene-os em
- executar jobs fora da ordem do estágio quando as dependências permitirem
- R: O GitLab CI é totalmente integrado ao GitLab (registro, ambientes, verificação de segurança integrada). GitHub Actions tem um mercado maior de ações pré-construídas. Ambos são excelentes; escolha com base em onde seu código reside.
- GitLab CI fornece um sistema CI/CD completo e integrado em um único arquivo YAML. O pipeline aqui – testar com cobertura, criar e enviar imagens Docker, implantar para produção com aprovação manual – cobre todo o fluxo de trabalho para a maioria dos aplicativos. Comece com um estágio de teste, adicione compilação e implantação de forma incremental e otimize com cache e trabalhos paralelos à medida que seu pipeline cresce.
Como funciona o GitLab CI
GitLab CI executa pipelines definidos em.gitlab-ci.yml na raiz do seu repositório. Cada pipeline temetapas (testar, construir, implantar) que são executados sequencialmente. Dentro de um estágio,empregos correr em paralelo. Os trabalhos são executados emcorredores (hospedado no GitLab ou auto-hospedado).
Estrutura Básica do Pipeline
# .gitlab-ci.yml
stages:
- test
- build
- deploy
variables:
NODE_VERSION: "20"
# Test stage
test:
stage: test
image: node:20-alpine
cache:
key: "$CI_COMMIT_REF_SLUG"
paths:
- node_modules/
script:
- npm ci
- npm run lint
- npm run test:coverage
artifacts:
reports:
coverage_report:
coverage_format: cobertura
path: coverage/cobertura-coverage.xml
Construir estágio com Docker
build:
stage: build
image: docker:24
services:
- docker:24-dind
before_script:
- docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" "$CI_REGISTRY"
script:
- docker build -t "$CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA" .
- docker tag "$CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA" "$CI_REGISTRY_IMAGE:latest"
- docker push "$CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA"
- docker push "$CI_REGISTRY_IMAGE:latest"
rules:
- if: '$CI_COMMIT_BRANCH == "main"'
Estágio de implantação com ambientes
deploy_production:
stage: deploy
image: alpine:latest
before_script:
- apk add --no-cache openssh-client
- eval $(ssh-agent -s)
- echo "$SSH_PRIVATE_KEY" | ssh-add -
script:
- ssh -o StrictHostKeyChecking=no $DEPLOY_USER@$PROD_HOST
"cd /app && docker compose pull && docker compose up -d"
environment:
name: production
url: https://example.com
rules:
- if: '$CI_COMMIT_BRANCH == "main"'
when: manual # require manual approval for production
Cache para pipelines mais rápidos
cache:
key:
files:
- package-lock.json # cache invalidates when lockfile changes
paths:
- node_modules/
- .npm/
# Python: paths: [.cache/pip, venv/]
# Go: paths: [.go/pkg/mod/]
# Rust: paths: [target/, .cargo/]
Construções de matrizes paralelas
test:
stage: test
parallel:
matrix:
- NODE_VERSION: ["18", "20", "22"]
image: node:$NODE_VERSION-alpine
script:
- npm ci
- npm test
# Runs 3 parallel jobs testing against Node 18, 20, 22
Gerenciando segredos e variáveis Nunca codifique segredos. Armazene-os em
Configurações, depois CI/CD e depois Variáveis Marque valores sensíveis comoMascarado:
- (oculto nos registros)Marque os segredos de implantação comoProtegido
- (disponível apenas em filiais protegidas)UsarEscopos ambientais
- para diferentes valores de preparação versus produçãoDicas de otimização de pipelineUsar
executar jobs fora da ordem do estágio quando as dependências permitirem
- Usar
needs:em vez de - (moderno, mais flexível)
rules:Usaronly/exceptentão novos impulsos cancelam pipelines desatualizados - Armazenar em cache agressivamente
interruptible: true— a instalação da dependência geralmente é a etapa mais lenta - Use imagens de base pequenas (variantes alpinas) para inicialização mais rápida do trabalho
- Perguntas FrequentesP: GitLab CI vs GitHub Actions?
R: O GitLab CI é totalmente integrado ao GitLab (registro, ambientes, verificação de segurança integrada). GitHub Actions tem um mercado maior de ações pré-construídas. Ambos são excelentes; escolha com base em onde seu código reside.
P: Preciso de executores auto-hospedados?
R: Os executores hospedados no GitLab funcionam para a maioria dos projetos. Os executores auto-hospedados valem a pena para cargas de trabalho pesadas, hardware específico ou acesso à rede privada.
P: Como posso acelerar pipelines lentos?
R: Dependências de cache, use
para execução paralela, use imagens Docker menores, divida conjuntos de testes com
. Crie primeiro o perfil dos trabalhos mais lentos.needs:P: Como lidar com migrações de banco de dados no pipeline?parallel:R: Execute migrações como um trabalho de estágio de implantação antes de reiniciar o aplicativo. Sempre teste primeiro as migrações na preparação com um banco de dados semelhante ao de produção.
P: Cache versus artefatos — qual é a diferença?
acelera os trabalhos reutilizando arquivos entre execuções (não garantido).
passar arquivos entre estágios dentro de um pipeline (garantido).
A: cacheConclusãoartifactsGitLab CI fornece um sistema CI/CD completo e integrado em um único arquivo YAML. O pipeline aqui – testar com cobertura, criar e enviar imagens Docker, implantar para produção com aprovação manual – cobre todo o fluxo de trabalho para a maioria dos aplicativos. Comece com um estágio de teste, adicione compilação e implantação de forma incremental e otimize com cache e trabalhos paralelos à medida que seu pipeline cresce.
GitLab CI fornece um sistema CI/CD completo e integrado em um único arquivo YAML. O pipeline aqui – testar com cobertura, criar e enviar imagens Docker, implantar para produção com aprovação manual – cobre todo o fluxo de trabalho para a maioria dos aplicativos. Comece com um estágio de teste, adicione compilação e implantação de forma incremental e otimize com cache e trabalhos paralelos à medida que seu pipeline cresce.
GitLab CI fornece um sistema CI/CD completo e integrado em um único arquivo YAML. O pipeline aqui – testar com cobertura, criar e enviar imagens Docker, implantar para produção com aprovação manual – cobre todo o fluxo de trabalho para a maioria dos aplicativos. Comece com um estágio de teste, adicione compilação e implantação de forma incremental e otimize com cache e trabalhos paralelos à medida que seu pipeline cresce.
🔗 Share this article
✍️ Leave a Comment