Pular para conteúdo

Integração CI/CD

O terraview foi projetado para integração nativa com pipelines de CI/CD, oferecendo:

  • Exit codes semânticos0 (ok), 1 (HIGH), 2 (CRITICAL)
  • Saída SARIF — para GitHub Security tab
  • Saída JSON/Markdown — para artefatos e comentários em PRs

GitHub Actions

name: Terraform Security Scan
on:
  pull_request:
    paths: ['**.tf']

jobs:
  scan:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Setup Terraform
        uses: hashicorp/setup-terraform@v3

      - name: Install terraview
        run: curl -sSL https://raw.githubusercontent.com/leonamvasquez/terraview/main/install.sh | bash

      - name: Security scan
        run: terraview scan checkov -f sarif -o ./reports

      - name: Upload SARIF
        if: always()
        uses: github/codeql-action/upload-sarif@v3
        with:
          sarif_file: reports/review.sarif.json

      - name: Comment on PR
        if: always()
        uses: marocchino/sticky-pull-request-comment@v2
        with:
          path: reports/review.md

Com IA na pipeline

      - name: Security scan with AI
        env:
          GEMINI_API_KEY: ${{ secrets.GEMINI_API_KEY }}
        run: terraview scan checkov --provider gemini -f sarif -o ./reports

Modo estrito

      - name: Security scan (strict)
        run: terraview scan checkov --strict -f sarif -o ./reports
        # HIGH findings also return exit code 2 (block merge)

GitLab CI

terraform-scan:
  stage: validate
  script:
    - curl -sSL https://raw.githubusercontent.com/leonamvasquez/terraview/main/install.sh | bash
    - terraview scan checkov -f json -o ./reports
  artifacts:
    paths: [reports/review.json, reports/review.md]
    when: always

Azure DevOps

- task: Bash@3
  displayName: 'Install terraview'
  inputs:
    targetType: 'inline'
    script: |
      curl -sSL https://raw.githubusercontent.com/leonamvasquez/terraview/main/install.sh | bash

- task: Bash@3
  displayName: 'Security scan'
  inputs:
    targetType: 'inline'
    script: |
      terraview scan checkov -f sarif -o $(Build.ArtifactStagingDirectory)/reports

- task: PublishBuildArtifacts@1
  condition: always()
  inputs:
    pathToPublish: '$(Build.ArtifactStagingDirectory)/reports'
    artifactName: 'security-scan'

Exit Codes para CI

Código Significado Ação recomendada
0 Sem issues ou apenas MEDIUM/LOW/INFO Merge permitido
1 Findings HIGH Warning, considerar revisão
2 Findings CRITICAL (ou HIGH com --strict) Bloquear merge

Dica

Use --strict para bloquear PRs com findings HIGH ou CRITICAL. Sem --strict, apenas CRITICAL retorna exit code 2.