Cheatsheet

← Voltar para página principal
🔄 CI/CD Cheatsheet

Comandos essenciais para integração contínua, entrega contínua e automação de pipelines

🔄 O que é CI/CD?

📖 Definição

CI/CD (Continuous Integration/Continuous Deployment) é um conjunto de práticas e ferramentas que automatizam o processo de build, teste e deploy de software. Permite entregas mais rápidas, consistentes e com menor risco de erros humanos.

💪 Por que aprender?

• Automated builds and testing
• Continuous integration
• Continuous deployment/delivery
• Infrastructure as code
• Pipeline orchestration

🚀 O que você pode fazer?

• Software development
• DevOps teams
• Cloud deployments
• Microservices architecture
• Enterprise applications

💡 Onde você vai usar:
🔄 Pipelines
Jenkins, GitLab, GitHub
🔧 DevOps
Automation, IaC
☁️ Cloud
AWS, Azure, GCP
Deploy
Containers, Kubernetes
Filtro ativo:Todos
Total: 17 categoriasBásico: 5Intermediário: 6Avançado: 6

🔧 Jenkins Básico

Comandos essenciais do Jenkins para automação de builds

📋Jenkinsfile

Básico
pipeline { agent any stages { stage('Build') { steps { sh 'mvn clean package' } } } }

# Pipeline básico com estágio de build

Básico
pipeline { agent { docker 'maven:3.6.3-jdk-8' } stages { stage('Test') { steps { sh 'mvn test' } } } }

# Pipeline com agente Docker para testes

📋Comandos Jenkins CLI

Básico
java -jar jenkins-cli.jar -s http://jenkins:8080 list-jobs

# Lista jobs

Básico
java -jar jenkins-cli.jar -s http://jenkins:8080 build job-name

# Executa job

Básico
java -jar jenkins-cli.jar -s http://jenkins:8080 console job-name

# Logs do job

Básico
java -jar jenkins-cli.jar -s http://jenkins:8080 safe-restart

# Reinicia seguro

📋Plugins

Básico
java -jar jenkins-cli.jar -s http://jenkins:8080 list-plugins

# Lista plugins

Básico
java -jar jenkins-cli.jar -s http://jenkins:8080 install-plugin plugin.hpi

# Instala plugin

Básico
java -jar jenkins-cli.jar -s http://jenkins:8080 restart

# Reinicia Jenkins

🐙 GitHub Actions Básico

Workflows essenciais do GitHub Actions

📋Workflow Básico

Básico
name: CI on: [push, pull_request] jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Setup Node.js uses: actions/setup-node@v2 with: node-version: '16' - name: Install dependencies run: npm install - name: Run tests run: npm test

# Workflow básico de CI

📋Build e Deploy

Básico
name: Build and Deploy on: push: branches: [main] jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Build Docker image run: docker build -t myapp . - name: Push to registry run: docker push myregistry/myapp

# Build e deploy de imagem Docker

📋Secrets e Variáveis

Básico
jobs: deploy: runs-on: ubuntu-latest steps: - name: Deploy to production env: API_KEY: ${{ secrets.API_KEY }} DEPLOY_URL: ${{ secrets.DEPLOY_URL }} run: | curl -X POST $DEPLOY_URL \ -H "Authorization: Bearer $API_KEY"

# Uso de secrets e variáveis de ambiente

🦊 GitLab CI Básico

Configurações essenciais do GitLab CI

📋.gitlab-ci.yml Básico

Básico
stages: - build - test - deploy build: stage: build script: - echo "Building..." - npm run build artifacts: paths: - dist/ test: stage: test script: - npm test

# Pipeline básico com build, test e deploy

📋Cache e Dependências

Básico
variables: NODE_CACHE: "$CI_PROJECT_DIR/.npm" cache: key: ${CI_COMMIT_REF_SLUG} paths: - .npm/ before_script: - npm ci --cache .npm --prefer-offline

# Configuração de cache para dependências

📋Docker Build

Básico
build: stage: build image: docker:latest services: - docker:dind script: - docker build -t ${CI_REGISTRY_IMAGE}:${CI_COMMIT_SHA} . - docker push ${CI_REGISTRY_IMAGE}:${CI_COMMIT_SHA} only: - main

# Build e push de imagem Docker

🏗️ Terraform Básico

Comandos fundamentais do Terraform

📋Comandos Básicos

Básico
terraform init

# Inicializa projeto

Básico
terraform plan

# Mostra mudanças

Básico
terraform apply

# Aplica mudanças

Básico
terraform destroy

# Destrói recursos

Básico
terraform validate

# Valida sintaxe

Básico
terraform fmt

# Formata código

📋Workspace Management

Básico
terraform workspace new dev

# Cria workspace

Básico
terraform workspace select dev

# Seleciona workspace

Básico
terraform workspace list

# Lista workspaces

Básico
terraform workspace delete dev

# Remove workspace

🐳 Docker CI/CD Básico

Comandos essenciais para Docker em CI/CD

📋Dockerfile

Básico
FROM node:16-alpine WORKDIR /app COPY package*.json ./ RUN npm ci --only=production COPY . . EXPOSE 3000 CMD ["npm", "start"]

# Dockerfile básico para aplicação Node.js

📋Build Commands

Básico
docker build -t myapp:latest .

# Build imagem

Básico
docker build -t myapp:v1.0 -t myapp:latest .

# Múltiplas tags

Básico
docker build --build-arg NODE_ENV=production -t myapp .

# Build args

Básico
docker build --no-cache -t myapp .

# Sem cache

📋Registry Push

Básico
docker login registry.example.com

# Login registry

Básico
docker tag myapp:latest registry.example.com/myapp:latest

# Tag para push

Básico
docker push registry.example.com/myapp:latest

# Push imagem

🔧 Jenkins Intermediário

Recursos intermediários do Jenkins

📋Pipeline Multibranch

Intermediário
pipeline { agent any triggers { pollSCM('H/5 * * * *') } stages { stage('Checkout') { steps { git branch: 'main', url: 'https://github.com/user/repo.git' } } } }

# Pipeline com trigger SCM polling

📋Parallel Stages

Intermediário
pipeline { agent any stages { stage('Test') { parallel { stage('Unit Tests') { steps { sh 'mvn test' } } stage('Integration Tests') { steps { sh 'mvn verify' } } } } } }

# Execução paralela de estágios

📋Deploy com Parâmetros

Intermediário
pipeline { agent any parameters { string(name: 'ENVIRONMENT', defaultValue: 'dev') } stages { stage('Deploy') { steps { sh "deploy.sh ${params.ENVIRONMENT}" } } } }

# Pipeline com parâmetros configuráveis

🐙 GitHub Actions Intermediário

Recursos intermediários do GitHub Actions

📋Matrix Strategy

Intermediário
jobs: test: runs-on: ubuntu-latest strategy: matrix: node-version: [14.x, 16.x, 18.x] os: [ubuntu-latest, windows-latest] steps: - uses: actions/checkout@v2 - name: Use Node.js ${{ matrix.node-version }} uses: actions/setup-node@v2 with: node-version: ${{ matrix.node-version }}

# Execução em matriz de configurações

📋Cache de Dependências

Intermediário
jobs: build: runs-on: ubuntu-latest steps: - name: Cache node modules uses: actions/cache@v2 with: path: ~/.npm key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} restore-keys: | ${{ runner.os }}-node-

# Cache inteligente de dependências

🦊 GitLab CI Intermediário

Recursos intermediários do GitLab CI

📋Deploy com Ambiente

Intermediário
deploy_staging: stage: deploy script: - echo "Deploying to staging..." - rsync -avz dist/ user@staging:/var/www/ environment: name: staging url: https://staging.example.com only: - main

# Deploy para ambiente staging

📋Testes Paralelos

Intermediário
test: stage: test parallel: 4 script: - npm run test -- --shard=${CI_NODE_INDEX}/${CI_NODE_TOTAL} artifacts: reports: junit: test-results/junit.xml

# Execução paralela de testes

⛵ ArgoCD Intermediário

Recursos intermediários do ArgoCD

📋Instalação ArgoCD

Intermediário
kubectl create namespace argocd

# Cria namespace

Intermediário
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml

# Instala ArgoCD

Intermediário
kubectl get pods -n argocd

# Verifica instalação

Intermediário
kubectl port-forward svc/argocd-server -n argocd 8080:443

# Acesso UI

📋ArgoCD CLI

Intermediário
argocd login localhost:8080

# Login CLI

Intermediário
argocd app list

# Lista aplicações

Intermediário
argocd app create guestbook --repo https://github.com/argoproj/argocd-example-apps.git --path guestbook --dest-server https://kubernetes.default.svc --dest-namespace default

# Cria aplicação

Intermediário
argocd app sync guestbook

# Sincroniza app

📋Application YAML

Intermediário
apiVersion: argoproj.io/v1alpha1 kind: Application metadata: name: my-app namespace: argocd spec: project: default source: repoURL: https://github.com/user/my-app.git targetRevision: HEAD path: manifests destination: server: https://kubernetes.default.svc namespace: my-app syncPolicy: automated: prune: true selfHeal: true

# Definição de aplicação ArgoCD

🏗️ Terraform Intermediário

Recursos intermediários do Terraform

📋State Management

Intermediário
terraform state list

# Lista recursos

Intermediário
terraform state show aws_instance.web

# Mostra recurso

Intermediário
terraform state rm aws_instance.old

# Remove do state

Intermediário
terraform import aws_instance.web i-123456

# Importa recurso

📋Modules

Intermediário
module "vpc" { source = "./modules/vpc" cidr_block = "10.0.0.0/16" }

# Uso de módulos

Intermediário
terraform get

# Baixa modules

Intermediário
terraform graph

# Gera grafo de dependências

📋Variables e Outputs

Intermediário
variable "instance_type" { description = "EC2 instance type" type = string default = "t3.micro" }

# Definição de variável

Intermediário
output "instance_ip" { description = "Public IP of EC2 instance" value = aws_instance.web.public_ip }

# Definição de output

Intermediário
terraform apply -var="instance_type=t3.large"

# Variável inline

Intermediário
terraform apply -var-file="prod.tfvars"

# Arquivo de variáveis

🐳 Docker CI/CD Intermediário

Recursos intermediários de Docker em CI/CD

📋Multi-stage Build

Intermediário
FROM node:16-alpine AS builder WORKDIR /app COPY package*.json ./ RUN npm ci COPY . . RUN npm run build FROM nginx:alpine COPY --from=builder /app/dist /usr/share/nginx/html EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]

# Build multi-stage para otimização

📋docker-compose.yml

Intermediário
version: '3.8' services: app: build: . ports: - "3000:3000" environment: - NODE_ENV=production depends_on: - db db: image: postgres:13 environment: - POSTGRES_DB=myapp - POSTGRES_USER=user - POSTGRES_PASSWORD=pass

# Compose com aplicação e banco

📋CI/CD Commands

Intermediário
docker-compose -f docker-compose.yml -f docker-compose.prod.yml build

# Build múltiplos

Intermediário
docker-compose up -d

# Start detached

Intermediário
docker-compose down

# Stop e remove

Intermediário
docker-compose logs -f app

# Logs em tempo real

🔧 Jenkins Avançado

Recursos avançados do Jenkins

📋Notificações

Avançado
pipeline { agent any post { success { slackSend(channel: '#deployments', message: 'Deploy successful!') } failure { mail to: 'team@example.com', subject: 'Build Failed' } } }

# Configuração de notificações

🐙 GitHub Actions Avançado

Recursos avançados do GitHub Actions

📋Deploy Multi-Ambiente

Avançado
name: Deploy on: workflow_dispatch: inputs: environment: description: 'Target environment' required: true default: 'staging' type: choice options: - staging - production jobs: deploy: runs-on: ubuntu-latest steps: - name: Deploy to ${{ github.event.inputs.environment }} run: ./deploy.sh ${{ github.event.inputs.environment }}

# Deploy manual com seleção de ambiente

📋Testes Automatizados

Avançado
jobs: test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Run tests run: npm test - name: Upload coverage uses: codecov/codecov-action@v1 with: file: ./coverage/lcov.info

# Execução de testes com upload de coverage

📋Releases Automáticos

Avançado
name: Release on: push: tags: - 'v*' jobs: release: runs-on: ubuntu-latest steps: - name: Create Release uses: actions/create-release@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: tag_name: ${{ github.ref }} release_name: Release ${{ github.ref }} draft: false prerelease: false

# Criação automática de releases

🦊 GitLab CI Avançado

Recursos avançados do GitLab CI

📋Multi-Project Pipeline

Avançado
build_api: stage: build trigger: project: my-group/api-project strategy: depend build_frontend: stage: build script: - npm run build artifacts: paths: - dist/

# Pipeline multi-projeto

📋Deploy Condicional

Avançado
deploy_production: stage: deploy script: - echo "Deploying to production..." rules: - if: ${CI_COMMIT_BRANCH} == ${CI_DEFAULT_BRANCH} - when: manual environment: name: production url: https://example.com

# Deploy condicional com regras

📋Include Templates

Avançado
include: - local: '/templates/.gitlab-ci-template.yml' - project: 'my-group/common-ci' file: '/templates/node.yml' ref: main variables: NODE_VERSION: "16"

# Include de templates externos

⛵ ArgoCD Avançado

Recursos avançados do ArgoCD

📋App of Apps

Avançado
apiVersion: argoproj.io/v1alpha1 kind: Application metadata: name: root-app spec: project: default source: repoURL: https://github.com/user/my-apps.git targetRevision: HEAD path: . destination: server: https://kubernetes.default.svc namespace: argocd syncPolicy: automated: prune: true

# Padrão App of Apps para múltiplas aplicações

📋Progressive Delivery

Avançado
apiVersion: argoproj.io/v1alpha1 kind: Rollout metadata: name: my-app spec: replicas: 5 strategy: canary: steps: - setWeight: 20 - setWeight: 40 - setWeight: 60 - setWeight: 80 canaryService: my-app-canary stableService: my-app

# Deploy progressivo com Canary

📋Sync Waves

Avançado
apiVersion: argoproj.io/v1alpha1 kind: Application metadata: name: my-app annotations: argocd.argoproj.io/sync-options: CreateNamespace=true argocd.argoproj.io/sync-wave: "1" spec: project: default source: repoURL: https://github.com/user/my-app.git targetRevision: HEAD destination: server: https://kubernetes.default.svc namespace: my-app

# Sincronização com waves para ordem de deploy

📋Notifications

Avançado
apiVersion: argoproj.io/v1alpha1 kind: Application metadata: name: my-app spec: project: default source: repoURL: https://github.com/user/my-app.git destination: server: https://kubernetes.default.svc notification: triggers: - on-sync-status-unknown - on-sync-failed - on-sync-succeeded template: service: slack template: | text: | Application {{.app.metadata.name}} sync status is {{.app.status.sync.status}} recipients: - my-channel

# Configuração de notificações

🏗️ Terraform Avançado

Recursos avançados do Terraform

📋Remote State

Avançado
terraform { backend "s3" { bucket = "my-terraform-state" key = "prod/terraform.tfstate" region = "us-east-1" } }

# Configuração de state remoto em S3

Avançado
terraform force-unlock LOCK_ID

# Força unlock

Avançado
terraform plan -out=tfplan

# Salva plano

Avançado
terraform apply tfplan

# Aplica plano salvo

🐳 Docker CI/CD Avançado

Recursos avançados de Docker em CI/CD

📋Production Deploy

Avançado
docker-compose -f docker-compose.prod.yml up -d --remove-orphans

# Deploy prod

Avançado
docker-compose pull

# Atualiza imagens

Avançado
docker-compose restart app

# Restart serviço

Avançado
docker-compose exec app npm run migrate

# Executa comando

📋Health Checks

Avançado
version: '3.8' services: app: image: myapp:latest healthcheck: test: ["CMD", "curl", "-f", "http://localhost:3000/health"] interval: 30s timeout: 10s retries: 3 start_period: 40s

# Configuração de health checks

🤝 Contribuindo

Encontrou um erro? Quer melhorar um cheatsheet? Tem uma sugestão? Adoraríamos suas contribuições! Abra uma issue ou submeta um PR.

Gostou do projeto? Apoie o desenvolvimento com um café e ajude a manter tudo open source ☕