Pipeline de Aplicação¶
O pipeline de aplicação (ads-automations) centraliza toda a automação de CI/CD das aplicações. Todo repositório de aplicação consome os workflows e actions deste repositório via workflow_call.
A arquitetura do pipeline utiliza várias ferramentas de qualidade, segurança e automação para garantir que o código seja testado, verificado e implantado de forma confiável e eficiente.
Figura 1: Pipeline de Aplicação
Visão Geral¶
flowchart LR
A[Branch] --> B[Pull Request]
B --> C{Evento}
C -->|opened/sync| D[PR Pipeline]
C -->|merged| E[Merge Pipeline]
C -->|tag v*| F[Deploy Tag]
D --> D1[Gemini Review]
D --> D2[Jira Validation]
D --> D3[Build + Test + Sonar]
D --> D4[Docker Push<br/>sprint-PR-123]
E --> E1[Jira Validation]
E --> E2[Semantic Tag<br/>v8.0.0]
E --> E3[Build + Docker Push]
E --> E4[Update HML Tenants]
E --> E5[Jira → Aguardando Teste]
F --> F3[Build + Docker Push]
Como Funciona¶
Cada repositório de aplicação possui uma cópia do template application-pipeline.yml no seu .github/workflows/. Este template:
- Detecta a linguagem — lê o Dockerfile da aplicação para identificar
javaounodee a versão - Despacha para o workflow correto conforme o evento do GitHub:
| Evento | Workflow Chamado | Quando |
|---|---|---|
| PR aberto/atualizado | pr-pipeline.yml |
opened, synchronize, reopened |
| PR mergeado | merge-pipeline.yml |
closed (com merge) |
Tag v* pushada |
deploy-tag-pipeline.yml |
Push de tag manual |
PR Pipeline¶
Executado em toda atualização de PR. Realiza revisão automática, validação e build.
Jobs¶
1. Gemini AI Code Review (pr-summarize)¶
O pipeline envia o diff do PR para a API do Google Gemini (gemini-2.0-flash) que gera uma revisão estruturada:
- Resumo das alterações
- Análise técnica
- Pontos positivos
- Problemas encontrados
- Sugestões de melhoria
O resultado é postado como comentário sticky no PR com header gemini-code-review.
2. Jira Validation¶
Valida que o PR está associado a um ticket Jira. O ID é extraído de (em ordem de prioridade):
- Título do PR
- Nome da branch
- Mensagens de commit
Formato esperado: [A-Z]+-[0-9]+ (ex: PROJ-123)
Além de validar o ticket, extrai o Sprint ID (ex: 8.0.0) que será usado no versionamento.
3. Build + Test + SonarQube¶
Dependendo da linguagem detectada, executa o pipeline Java ou Node:
mvn clean install -DskipTests— build do projetomvn test— testes unitários (se não houver label de skip)- Análise SonarQube com relatório comparativo (código novo vs geral)
- Quality Gate check
npm install— instalação de dependênciasnpm test— testes unitários (se não houver label de skip)- SonarQube scan via
SonarSource/sonarqube-scan-action@v6 - Quality Gate check via
SonarSource/sonarqube-quality-gate-action@v1
4. Docker Build + Push¶
Builda a imagem Docker e pusha para o OCIR com tag {sprint}-PR-{pr_number}:
gru.ocir.io/grbtf2fwsmfh/{app}:{sprint}-PR-{pr_number}
Labels de Skip
Adicione labels ao PR para pular etapas:
ignore-testsouskip-tests→ pula testes unitáriosignore-sonarouskip-sonar→ pula análise SonarQube
Merge Pipeline¶
Executado quando um PR é merge. Calcula versão semântica, rebuilda, e atualiza tenants HML.
Jobs¶
1. Versionamento Semântico (calculate-and-tag)¶
O sistema de versionamento é baseado no Sprint do Jira:
| Cenário | Tag Gerada | Exemplo |
|---|---|---|
Merge para development |
{sprint}-DEV |
8.0.0-DEV |
Primeiro merge para main |
v{sprint} |
v8.0.0 |
Merges subsequentes para main |
v{sprint}-N |
v8.0.0-1, v8.0.0-2 |
O workflow cria a tag git e a pusha automaticamente.
2. Cleanup da Imagem PR¶
Após o merge, a imagem de PR ({sprint}-PR-{pr_number}) é deletada do OCIR via action delete-ocir-image-tag.
3. Build + Docker Push¶
Rebuilda e pusha com a tag semântica calculada (ex: v8.0.0).
4. Atualização de Tenants HML¶
Apenas em merges para development: dispara repository_dispatch no repositório ads-automations que executa update-hml-tenants.yml:
- Extrai token do bot
- Clona
ads-tenants-config - Atualiza
image.tagnosvalues.yamlde todos os tenants HML - Commit e push para
main - Comenta no PR de origem com detalhes da atualização
5. Transição Jira¶
Move o ticket Jira para o status "Aguardando Teste" após atualização bem-sucedida dos tenants.
Deploy Tag Pipeline¶
Pipeline simplificado para builds a partir de tags manuais (v*). Apenas roteia para o pipeline Java ou Node baseado na linguagem detectada, sem validação Jira ou atualização de tenants.
Usado para:
- Rebuilds de versões específicas
- Hotfixes que precisam de tag manual
Workflows Disponíveis¶
| Workflow | Arquivo | Trigger | Descrição |
|---|---|---|---|
| Template do App | application-pipeline.yml |
PR + tag | Orquestrador principal (copiado para cada app) |
| PR Pipeline | pr-pipeline.yml |
workflow_call |
Gemini + Jira + Build + Docker |
| Merge Pipeline | merge-pipeline.yml |
workflow_call |
Tag + Build + HML Update + Jira |
| Deploy Tag | deploy-tag-pipeline.yml |
workflow_call |
Build a partir de tag manual |
| Java Pipeline | java-build-deploy-pipeline.yml |
workflow_call |
Build Maven + SonarQube + Docker |
| Node Pipeline | node-build-deploy-pipeline.yml |
workflow_call |
Build NPM + SonarQube + Docker |
| Jira Validation | jira-validation.yml |
workflow_call |
Valida ticket e extrai Sprint |
| Update HML | update-hml-tenants.yml |
repository_dispatch |
Atualiza tenants no ads-tenants-config |
| Vault Secret | print-vault-secret.yml |
workflow_call |
Busca secret do HashiCorp Vault |
Actions Disponíveis¶
| Action | Descrição |
|---|---|
setup-environment |
Hidrata secrets do PIPELINE_SECRETS JSON (OCIR, Jira, Sonar, OCI CLI, AWS) |
setup-oci-cli |
Instala e configura OCI CLI com caching |
detect-language |
Detecta java/node e versão a partir do Dockerfile |
extract-jira-id |
Extrai ID Jira do título, branch ou commits do PR |
jira-validation |
Validação completa Jira + extração do Sprint ID |
jira-transition |
Transiciona ticket Jira para um status alvo |
extract-pipeline-token |
Extrai GH_BOT_TOKEN do PIPELINE_SECRETS |
get-pr-commit-sha |
Obtém SHA do HEAD de um PR em outro repositório |
update-pr-status |
Cria/atualiza status check em PR de outro repositório |
update-tenants-values |
Atualiza image.tag nos values.yaml dos tenants HML |
commit-tenants-changes |
Prepara commit com mensagem convencional para tenants |
delete-ocir-image-tag |
Deleta tag de imagem do OCIR |
tag-ocir-image |
Cria nova tag para imagem existente no OCIR via ORAS |
sonar-analysis |
Análise SonarQube completa para Java com relatório comparativo |
start-oci-runner |
Inicia Container Instance do runner OCI |
stop-oci-runner |
Para Container Instance do runner OCI |
Secrets e Configuração¶
Todos os workflows dependem de dois secrets do repositório:
PIPELINE_SECRETS: JSON contendo todas as credenciais (OCIR, Jira, SonarQube, OCI CLI, AWS)TOKEN: GitHub token com permissões cross-repo
A action setup-environment parseia o JSON e exporta cada credencial como variável de ambiente mascarada.
Runners¶
| Runner | Uso |
|---|---|
oci-oke-runner |
Build, test, Docker push (acesso à rede interna) |
ubuntu-24.04 |
Jobs leves: Jira validation, tag calculation, tenant updates |
Configuração do Runner
O PIPELINE_SECRETS e o OCI_RUNNER_ID devem estar configurados como secrets no repositório da aplicação. Sem eles, o pipeline não consegue iniciar o runner self-hosted nem acessar os serviços internos.