Back to blog
DevOps·5 min

Integrando SOFI no seu Pipeline de CI/CD

Guia prático para integrar a SOFI com Jenkins, GitHub Actions e Terraform, automatizando o provisionamento de VDBs mascarados no seu pipeline de entrega contínua.

FR

Felipe Rodrigues

DevOps Engineer · 01 de Outubro de 2025

Pontos de Integração no CI/CD

A SOFI se integra em múltiplos pontos do pipeline de CI/CD para automatizar o ciclo de vida dos dados de teste. Os principais pontos de integração são: provisionamento de VDB no início do pipeline, aplicação de mascaramento como step de preparação, execução de testes contra o VDB e destruição do VDB no cleanup.

A integração pode ser feita via API REST, CLI, SDKs (Python, Go, TypeScript) ou plugins nativos para ferramentas de CI/CD. Cada abordagem tem suas vantagens dependendo da complexidade do pipeline e da ferramenta utilizada. Para pipelines simples, a CLI é suficiente; para orquestrações complexas, os SDKs oferecem maior controle.

O padrão recomendado é o 'VDB-per-branch': cada branch de feature recebe seu próprio VDB com dados mascarados de produção recentes. O VDB é criado quando o PR é aberto e destruído quando o PR é mergeado ou fechado. Isso garante isolamento total e dados sempre atualizados para cada contexto de desenvolvimento.

A API REST da SOFI segue padrões RESTful com suporte a idempotência via header Idempotency-Key, o que é essencial para pipelines de CI/CD que podem sofrer retries. Uma operação de provisionamento pode ser retentada com segurança sem risco de criar VDBs duplicados, simplificando significativamente o tratamento de erros nos scripts de automação.

Jenkins Plugin: Variáveis Groovy

O plugin Jenkins da SOFI expõe variáveis globais Groovy que podem ser usadas diretamente em Jenkinsfiles declarativos ou scriptados. As principais variáveis incluem sofiProvisionVDB para criar VDBs, sofiRefreshVDB para atualizar dados, sofiSnapshot para criar pontos de restauração, sofiMasking para aplicar mascaramento e sofiDestroyVDB para cleanup.

Cada variável aceita parâmetros tipados e retorna objetos com informações do resultado, como o ID do job criado, o status da operação e os detalhes do recurso provisionado. O plugin gerencia automaticamente a autenticação via credenciais Jenkins (tipo Username/Password ou API Key).

Um Jenkinsfile típico cria o VDB no stage de setup, roda testes de integração no stage de test apontando para o endpoint do VDB, e destrói o VDB no post-always. O sofiWaitForJob é utilizado após cada operação assíncrona para aguardar a conclusão antes de prosseguir para o próximo stage.

Para pipelines mais avançados, é possível usar sofiBranch para criar branches de dados e sofiBookmark para marcar pontos específicos no tempo, permitindo cenários como rollback de dados durante debug de testes falhos ou compartilhamento de um estado específico entre diferentes pipelines.

O plugin também suporta VDB Groups, que permitem provisionar e destruir múltiplos VDBs relacionados como uma unidade atômica. Isso é fundamental para aplicações que dependem de vários bancos de dados (por exemplo, um PostgreSQL para dados transacionais e um MongoDB para documentos). O VDB Group garante que todos os bancos sejam provisionados a partir do mesmo ponto no tempo, mantendo consistência cross-database.

GitHub Actions e Terraform Provider

Para repositórios no GitHub, a integração via GitHub Actions utiliza a CLI da SOFI em steps do workflow. A CLI é instalada via pip no runner e autenticada via secret do repositório. Cada step executa um comando como 'sofi vdb provision', 'sofi masking apply' ou 'sofi vdb destroy', com parâmetros passados via variáveis de ambiente.

O Terraform Provider da SOFI (terraform-provider-sofi) permite gerenciar recursos de virtualização como Infrastructure as Code. Recursos como datasources, dSources, VDBs, políticas de mascaramento e schedules podem ser definidos em arquivos HCL e gerenciados pelo ciclo de vida do Terraform (plan, apply, destroy).

A combinação de Terraform com CI/CD é particularmente poderosa para ambientes de staging permanentes. O Terraform mantém o estado dos VDBs, e o pipeline atualiza os dados via terraform apply, que executa um refresh do VDB automaticamente. Mudanças na configuração de mascaramento são aplicadas de forma declarativa, com preview via terraform plan.

O provider também suporta data sources para consultar informações como snapshots disponíveis, jobs em execução e métricas de storage. Isso permite criar configurações dinâmicas que escolhem automaticamente o snapshot mais recente ou que escalam o número de VDBs baseado na carga do pipeline.

Para GitLab CI, a SOFI fornece um template de CI reutilizável (.sofi-ci.yml) que pode ser incluído via include:remote nos pipelines do projeto. O template define stages padronizados para provisionamento, testes e cleanup, com variáveis configuráveis para personalizar o comportamento sem precisar escrever scripts de integração do zero.

Independente da ferramenta de CI/CD utilizada, a SOFI oferece uma GitHub Action reutilizável (sofi-provision) que encapsula o provisionamento completo em um único step. Basta referenciar a action no workflow, passar o ID do dSource e os parâmetros de mascaramento, e o VDB estará disponível como variável de output para os steps seguintes do pipeline.

CLI para Scripting e Automação

A CLI da SOFI é a ferramenta mais versátil para automação, servindo como base para scripts customizados e integrações com ferramentas que não possuem plugins dedicados. Instalada via pip install sofi-cli, ela oferece comandos para todas as operações da plataforma, com output em JSON para facilitar parsing em scripts.

Comandos como 'sofi datasources list', 'sofi vdb provision --dsource-id UUID --name test-vdb' e 'sofi masking apply --vdb-id UUID --policy-id UUID' cobrem o ciclo completo de provisionamento. O parâmetro --wait em operações assíncronas bloqueia até a conclusão do job, simplificando scripts sequenciais.

Para ambientes air-gapped ou com restrições de rede, a CLI suporta configuração de proxy e autenticação via API key (sem necessidade de login interativo). O arquivo de configuração em ~/.sofi/config.yaml permite definir múltiplos perfis de conexão para diferentes ambientes (dev, staging, prod), facilitando a alternância entre contextos.

Um padrão avançado é combinar a CLI com ferramentas de orquestração como Ansible ou Puppet para provisionar VDBs como parte do setup de infraestrutura. Isso permite que novos servidores de aplicação recebam automaticamente um VDB com dados mascarados atualizados como parte do processo de bootstrap.

A CLI também suporta output em formatos estruturados (JSON, YAML, table) que facilitam integração com ferramentas de monitoramento e observabilidade. Um script cron pode consultar periodicamente o status dos VDBs via CLI e alimentar métricas no Prometheus/Grafana, proporcionando visibilidade completa do ciclo de vida dos dados de teste na mesma stack de observabilidade já utilizada pela equipe de operações.

Boas Práticas e Armadilhas Comuns

A armadilha mais comum ao integrar virtualização de dados no CI/CD é tratar VDBs como recursos permanentes. VDBs devem ser efêmeros: criados no início do pipeline e destruídos ao final. Pipelines que falham sem cleanup deixam VDBs órfãos que consomem recursos desnecessariamente. A SOFI oferece retention policies que destroem automaticamente VDBs sem atividade após um período configurável, servindo como rede de segurança.

Outra prática recomendada é separar os snapshots de desenvolvimento dos snapshots de compliance. Snapshots para CI/CD podem ter retenção curta (7 dias), enquanto snapshots para evidência de auditoria devem ser locked e retidos pelo período exigido pela regulamentação. Essa separação otimiza o uso de storage sem comprometer requisitos regulatórios.

Por fim, monitore o throughput do pipeline após a integração e ajuste o número de VDBs simultâneos de acordo com a capacidade do storage pool. A SOFI reporta métricas de utilização que permitem dimensionar a infraestrutura corretamente, evitando tanto sub-utilização (desperdício de investimento) quanto sobre-utilização (degradação de performance).

Recomendamos também implementar tags padronizadas nos VDBs que identifiquem o projeto, o time responsável e o tipo de uso (ci, dev, qa, demo). Essas tags facilitam a governança, o chargeback de custos entre departamentos e a identificação rápida de VDBs que podem ser removidos em caso de necessidade de liberar storage urgentemente.

Finalmente, considere implementar notificações de custo por time. A SOFI rastreia o consumo de storage por VDB e pode calcular o custo proporcional baseado no preço por GB configurado pelo administrador. Relatórios mensais por departamento incentivam a disciplina no uso de recursos e identificam oportunidades de otimização, como VDBs que foram criados para demos e nunca foram destruídos.

Para equipes que adotam GitOps, a SOFI pode ser integrada ao ArgoCD ou FluxCD como fonte de configuração de ambientes de dados. Definições de VDBs em repositórios Git são reconciliadas automaticamente com o estado real da plataforma, garantindo que o ambiente de dados de cada microserviço esteja sempre em conformidade com a configuração declarada no repositório.

A observabilidade é outro aspecto fundamental da integração. A SOFI publica eventos de ciclo de vida dos VDBs (criação, refresh, destruição, falha) via webhooks configuráveis. Esses eventos podem alimentar dashboards de engenharia no Datadog ou New Relic, correlacionando a saúde dos dados de teste com métricas de qualidade do software como taxa de falha de testes e tempo médio de detecção de bugs.

Como último conselho, documente os padrões de integração adotados pela equipe em um runbook acessível. Inclua exemplos de Jenkinsfile, workflows do GitHub Actions e comandos CLI mais utilizados. Uma biblioteca interna de snippets de integração acelera a adoção por novos times e garante consistência nos padrões de provisionamento, mascaramento e cleanup em todos os projetos da organização.