π Claude no Pipeline
Integrar Claude em CI/CD significa automatizar tarefas cognitivas que antes exigiam intervencao humana: code review, geracao de testes, analise de seguranca.
π Fluxo Tipico
ββββββββββββ ββββββββββββ ββββββββββββ ββββββββββββ
β Push β β β Build β β β Claude β β β Deploy β
β PR β β Test β β Review β β Merge β
ββββββββββββ ββββββββββββ ββββββββββββ ββββββββββββ
β
βββββββΌββββββ
β Comentarioβ
β no PR β
βββββββββββββ
- β’ Trigger: Push ou abertura de PR
- β’ Analise: Claude revisa codigo alterado
- β’ Feedback: Comentario automatico no PR
π Casos de Uso em CI/CD
Analise automatica de PRs
Testes para codigo novo
Detectar vulnerabilidades
Sugerir atualizacoes de docs
Gerar release notes
Sugerir correcoes
βοΈ Configurando GitHub Action
Vamos criar uma GitHub Action que executa Claude Code em cada Pull Request para fazer code review automatico.
.github/workflows/claude-review.yml (Action Oficial)
name: Claude Code Review
on:
issue_comment:
types: [created]
pull_request_review_comment:
types: [created]
jobs:
claude:
# Responde a @claude em comentarios
if: contains(github.event.comment.body, '@claude')
runs-on: ubuntu-latest
permissions:
contents: read
pull-requests: write
issues: write
steps:
- name: Claude Code Action
uses: anthropics/claude-code-action@v1
with:
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
Review Automatico em Todo PR
name: Claude Auto Review
on:
pull_request:
types: [opened, synchronize]
jobs:
review:
runs-on: ubuntu-latest
permissions:
contents: read
pull-requests: write
steps:
- name: Claude Code Action
uses: anthropics/claude-code-action@v1
with:
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
prompt: |
Analise as mudancas deste PR e forneca:
1. Resumo das alteracoes
2. Potenciais issues
3. Sugestoes de melhoria
1. Configurar Secret
Repositorio β Settings β Secrets and variables β Actions β ANTHROPIC_API_KEY
2. Action Oficial
Use anthropics/claude-code-action@v1 - a action oficial da Anthropic
3. Inputs Principais
anthropic_api_key (obrigatorio), prompt (opcional), claude_args (opcional)
β οΈ Seguranca
Nunca exponha sua API key no codigo! Use sempre secrets do GitHub. Para repos publicos, considere usar actions approved apenas.
π§ͺ Geracao Automatica de Testes
Configure uma action que gera testes automaticamente para codigo novo e abre um PR com os testes sugeridos.
.github/workflows/claude-tests.yml
name: Claude Test Generation
on:
issue_comment:
types: [created]
jobs:
generate-tests:
# Trigger: comentario "@claude generate tests"
if: |
github.event.issue.pull_request &&
contains(github.event.comment.body, '@claude') &&
contains(github.event.comment.body, 'generate tests')
runs-on: ubuntu-latest
permissions:
contents: write
pull-requests: write
steps:
- uses: actions/checkout@v4
with:
ref: ${{ github.event.pull_request.head.ref }}
fetch-depth: 0
- name: Generate Tests with Claude
uses: anthropics/claude-code-action@v1
with:
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
prompt: |
Identifique arquivos TypeScript alterados neste PR que nao tem testes.
Gere testes unitarios Jest para cada um seguindo os padroes do projeto.
Crie os arquivos de teste e faca commit das mudancas.
Fluxo de Uso
π Security Scan Automatico
Use Claude para detectar vulnerabilidades em codigo alterado e bloquear merge se encontrar issues criticas.
.github/workflows/claude-security.yml
name: Claude Security Scan
on:
pull_request:
paths:
- 'src/**/*.ts'
- 'src/**/*.js'
jobs:
security:
runs-on: ubuntu-latest
permissions:
contents: read
pull-requests: write
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Security Analysis with Claude
uses: anthropics/claude-code-action@v1
with:
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
prompt: |
Faca analise de seguranca dos arquivos alterados neste PR.
Busque por:
1. SQL Injection
2. XSS (Cross-Site Scripting)
3. Senhas ou secrets hardcoded
4. Exposicao de dados sensiveis
5. Falhas de autenticacao/autorizacao
Formato de resposta:
## Resumo de Seguranca
[Resumo geral]
## Issues Criticas (bloquear merge)
[Lista ou "Nenhuma"]
## Issues Altas
[Lista ou "Nenhuma"]
## Recomendacoes
[Sugestoes de correcao]
Bloqueio Automatico
Configure branch protection para exigir que este check passe antes do merge. Issues criticas bloqueiam automaticamente.
Branch Protection
Require status checks:
security
π Changelog Automatico
Gere release notes automaticas baseadas nos commits e PRs mergeados desde a ultima release.
.github/workflows/claude-changelog.yml
name: Claude Changelog
on:
release:
types: [created]
jobs:
changelog:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Get Commits Since Last Release
id: commits
run: |
LAST_TAG=$(git describe --tags --abbrev=0 HEAD^ 2>/dev/null || echo "")
if [ -n "$LAST_TAG" ]; then
COMMITS=$(git log $LAST_TAG..HEAD --pretty=format:"%s" | tr '\n' '|')
else
COMMITS=$(git log --pretty=format:"%s" | head -50 | tr '\n' '|')
fi
echo "commits=$COMMITS" >> $GITHUB_OUTPUT
- name: Generate Changelog
env:
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
run: |
claude --print "Gere um changelog profissional baseado nestes commits:
${{ steps.commits.outputs.commits }}
Formato:
## Novidades
- features novas
## Melhorias
- enhancements
## Correcoes
- bug fixes
## Breaking Changes
- se houver
Seja conciso e focado no usuario final." > CHANGELOG-${{ github.event.release.tag_name }}.md
- name: Update Release Notes
uses: actions/github-script@v7
with:
script: |
const fs = require('fs');
const changelog = fs.readFileSync('CHANGELOG-${{ github.event.release.tag_name }}.md', 'utf8');
github.rest.repos.updateRelease({
owner: context.repo.owner,
repo: context.repo.repo,
release_id: ${{ github.event.release.id }},
body: changelog
});
π‘ Dica
Use Conventional Commits (feat:, fix:, docs:) para changelogs mais precisos. Claude consegue categorizar melhor quando os commits seguem um padrao.
π° Otimizacao de Custos
Claude em CI/CD pode consumir muitos tokens. Implemente estrategias para controlar custos sem perder funcionalidade.
Estrategias de Economia
- β Rodar apenas em arquivos alterados
- β Limitar tamanho de contexto
- β Cache de reviews similares
- β Throttle por PR/dia
- β Usar modelo mais barato para triagem
Exemplo: Limitar Arquivos
# Apenas arquivos < 500 linhas
for file in $FILES; do
lines=$(wc -l < "$file")
if [ "$lines" -lt 500 ]; then
FILTERED="$FILTERED $file"
fi
done
Monitoramento de Custos
# Adicionar ao workflow para tracking - name: Log Token Usage run: | TOKENS=$(cat /tmp/claude-usage.log | grep tokens | awk '{sum+=$2} END {print sum}') echo "::notice::Claude tokens usados: $TOKENS" # Enviar para metricas (opcional) curl -X POST "$METRICS_ENDPOINT" \ -d "{\"repo\": \"$GITHUB_REPOSITORY\", \"tokens\": $TOKENS, \"pr\": $PR_NUMBER}"
Estimativa de Custos
| Cenario | Tokens/PR | PRs/Mes | Custo Est. |
|---|---|---|---|
| Pequeno (review simples) | ~5K | 100 | ~$15 |
| Medio (review + tests) | ~15K | 100 | ~$45 |
| Completo (review + tests + security) | ~30K | 100 | ~$90 |
π Resumo do Modulo
Proximo Modulo:
3.8 - Projeto Final: Sistema Completo - integrando todos os conceitos em um sistema real