🦊 DevSecOps Completo

🦊 GitLab

CI/CD avançado, segurança integrada e plataforma DevSecOps end-to-end

🦊 O que é GitLab?

GitLab é uma plataforma DevSecOps completa — do planejamento ao monitoramento em produção, tudo em um único lugar. Disponível como SaaS (gitlab.com) ou self-hosted gratuito.

🏠

Self-Hosted Gratuito

GitLab Community Edition (CE) é 100% open source. Instale no seu servidor sem custo de licença.

🔄

CI/CD Nativo Poderoso

Pipeline como código com .gitlab-ci.yml — stages, jobs, artifacts, environments e muito mais.

🔒

DevSecOps Integrado

SAST, DAST, Secret Detection e Dependency Scanning incluídos — segurança no pipeline sem ferramentas externas.

📦

Registry Integrado

Container Registry, Package Registry (npm, Maven, PyPI) e Terraform Module Registry nativos.


⚙️ GitLab CI/CD

O .gitlab-ci.yml define todo o pipeline — stages, jobs, regras e ambientes.

▶ Pipeline #1042 — commit: a1b2c3d — branch: main
build
✔ build-app
✔ build-docker
test
✔ unit-tests
✔ lint
✔ sast
staging
✔ deploy-staging
✔ smoke-test
production
⏸ deploy-prod
.gitlab-ci.yml — pipeline completo
stages:
  - build
  - test
  - staging
  - production

variables:
  IMAGE: $CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA

# ── BUILD ──────────────────────────────
build-docker:
  stage: build
  image: docker:24
  services: [docker:24-dind]
  script:
    - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
    - docker build -t $IMAGE .
    - docker push $IMAGE

# ── TEST ───────────────────────────────
unit-tests:
  stage: test
  image: node:20
  script:
    - npm ci
    - npm test
  artifacts:
    reports:
      junit: junit.xml

sast:
  stage: test
  include:
    - template: Security/SAST.gitlab-ci.yml

# ── STAGING ────────────────────────────
deploy-staging:
  stage: staging
  environment:
    name: staging
    url: https://staging.meusite.com
  script:
    - kubectl set image deployment/app app=$IMAGE

# ── PRODUCTION ─────────────────────────
deploy-prod:
  stage: production
  environment:
    name: production
    url: https://meusite.com
  when: manual          # requer aprovação manual
  only: [main]
  script:
    - kubectl set image deployment/app app=$IMAGE
💡 Variáveis Predefinidas

GitLab injeta automaticamente variáveis como $CI_REGISTRY, $CI_COMMIT_SHORT_SHA, $CI_PROJECT_NAME e $CI_ENVIRONMENT_URL — sem configuração extra.


🏃 GitLab Runners

Runners são os agentes que executam os jobs do pipeline. Você pode usar runners compartilhados ou hospedar os seus.

☁️

Shared Runners

Fornecidos pelo GitLab.com. Gratuitos com limite de minutos. Ideais para projetos open source e times pequenos.

🏢

Group Runners

Compartilhados entre todos os projetos de um grupo. Ótimos para times que precisam de configuração padronizada.

🖥️

Self-Hosted Runners

Instale em qualquer máquina — EC2, VM, Kubernetes. Sem limite de minutos e acesso a recursos internos.

bash — instalar runner self-hosted no Ubuntu
# Instalar gitlab-runner
curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh | sudo bash
sudo apt install gitlab-runner

# Registrar runner (obter token em Settings > CI/CD > Runners)
sudo gitlab-runner register \
  --url https://gitlab.com \
  --token SEU_TOKEN \
  --executor docker \
  --docker-image alpine:latest \
  --description "meu-runner-aws"

# Iniciar como serviço
sudo gitlab-runner start
sudo gitlab-runner status

📦 Container Registry

Cada projeto GitLab tem um Container Registry integrado — sem configuração extra.

bash — usar o registry do GitLab
# Login
docker login registry.gitlab.com

# Build com tag do projeto
docker build -t registry.gitlab.com/grupo/projeto/app:latest .

# Push
docker push registry.gitlab.com/grupo/projeto/app:latest

# No .gitlab-ci.yml — login automático com variáveis CI
# docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY

🔒 DevSecOps — Segurança no Pipeline

GitLab inclui ferramentas de segurança prontas para usar via templates — basta incluir no .gitlab-ci.yml.

🔍
SAST
Static Application Security Testing — analisa código-fonte em busca de vulnerabilidades
🌐
DAST
Dynamic Analysis — testa a aplicação em execução contra ataques comuns (OWASP)
📦
Dependency Scan
Verifica dependências com CVEs conhecidas em npm, pip, Maven e outros
🐳
Container Scan
Analisa imagens Docker em busca de vulnerabilidades nas camadas base
🔑
Secret Detection
Detecta tokens, senhas e chaves API acidentalmente commitados no código
📋
License Compliance
Verifica licenças das dependências para conformidade legal
.gitlab-ci.yml — ativar todos os scans de segurança
include:
  - template: Security/SAST.gitlab-ci.yml
  - template: Security/DAST.gitlab-ci.yml
  - template: Security/Dependency-Scanning.gitlab-ci.yml
  - template: Security/Container-Scanning.gitlab-ci.yml
  - template: Security/Secret-Detection.gitlab-ci.yml

# Os resultados aparecem na aba Security do Merge Request
# e no Security Dashboard do projeto/grupo

⚖️ GitLab vs GitHub — Quando usar cada um?

Não existe resposta única — depende do contexto do seu projeto e time.

🐙

Escolha GitHub quando...

Projeto open source, quer maior visibilidade da comunidade, usa GitHub Copilot, ou o time já está familiarizado com o ecossistema GitHub.

🦊

Escolha GitLab quando...

Precisa de self-hosted gratuito, quer DevSecOps integrado sem ferramentas extras, ou a empresa exige controle total da infraestrutura.

💡 Dica prática

Muitas empresas usam os dois: GitHub para projetos open source e contribuições externas, GitLab internamente para pipelines corporativos com segurança e compliance.

← GitHub ← Voltar ao Hub
📤 Compartilhar: