Exemplo de Pipeline Java

Descrição da ilustração cicd-process-pipeline.png
O Pipeline Orchestrator orienta o processo de pipeline neste exemplo de pipeline Java ilustrado com o uso de algumas ferramentas comumente usadas. Estas são as etapas do processo:
- Código de Alteração
Executa verificações básicas do Git para credenciais usando o SAST (Static Application Security Testing) e inicia o pipeline. Usa a abordagem Gitflow para tratar o repositório de código com base em como o código é estruturado usando ferramentas como GitLab ou GithHub. O código pode ser estruturado para ter ramificação de versão, mesclagem e liberação para controlar as alterações de origem. O código é mapeado para ambientes como desenvolvimento, teste, pré-produção e produção. Commits nas diferentes partes do repositório acionam ações Sast.
- Por exemplo, GitHub incorpora a verificação de segurança estática para procurar padrões que reconhecerão senhas e tokens nos arquivos de código e configuração.
- Construir Código
Gera um JAR/WAR/EAR e extrai as dependências necessárias. Você pode usar ferramentas como o Java Apache Maven para compilar e criar o JAR (ou arquivos compactados implantáveis relacionados) e assinar o artefato.
- Gerenciar Dependências de Terceiros: Gerencia dependências de código e bibliotecas de terceiros usando ferramentas como Snyk. A Synk verifica e garante que as dependências estejam corretas, em uma origem aceita, e procura conteúdo malicioso. Ele recupera, inspeciona, aprova e armazena artefatos de dependência externa. O gerenciamento de dependências de terceiros permite que você armazene localmente nossas dependências usando ferramentas como Archiva, Nexus OSS etc. Você também pode controlar dependências para garantir que elas tenham origens confiáveis. Isso pode garantir que a dependência não tenha sido comprometida com conteúdo malicioso usando ferramentas como Snyk, Nexus ou scanOS.
- Verificar Qualidade e Conformidade
Verifique os principais problemas do OWASP 10 e verifique a conformidade com os padrões de codificação usando ferramentas como Sonarcube ou Lint.
- Executar Teste de Unidade
Execute testes de unidade e capture dados de cobertura de código usando JACOCO e JUnit. O JACOCO fornece a coleção de cobertura, como pesquisa de quais linhas de código foram executadas e quanto do código foi testado de maneira estatística. JUnit executa os testes de unidade. Você pode optar por expandir a descrição se achar que ela ajuda.
- Executar Teste de API
Testa as APIs com dados simulados e testa os clientes usando ferramentas como Dredd, Apiary ou Swagger Hub.
- Componentes de teste e experiência do usuário
Testar componentes de caixa preta e quaisquer elementos de IU. Mede o desempenho para garantir que não haja problemas básicos. Coleta métricas de cobertura de teste usando ferramentas como Selenium e JMeter. JMeter executa testes de desempenho e experiência do usuário e testa os workflows do usuário. Selenium impulsiona o exercício de elementos da interface do usuário.
- Testar Segurança
Teste código para vulnerabilidades, como, por exemplo, como ele trata chamadas de API ilegais, payloads em excesso, ataques de injeção etc., usando Zap. Execute testes de segurança verificando o código redundante e as instruções SQL preparadas.
- Pacote para Implantação
Empacote a solução como um contêiner, valide as embalagens e verifique se há problemas de contêiner e melhores práticas usando ferramentas como o Docker Snyk.
- Gerar Documentação
Gere documentação útil e disponibilize-a para consumo. Assine artefatos usando ferramentas como Pandoc ou Doxygen. A Pandoc empurra o projeto para o próximo estágio e o adiciona à loja confiável, como um registro a ser usado na próxima fase.
Se alguma dessas etapas falhar ou o processo identificar muitos avisos, a criação falhará. Os builds podem falhar em qualquer ponto do processo e impedir que as etapas subsequentes continuem. Uma criação com falha impede qualquer promoção de código automatizada que foi configurada. Você pode usar algumas das ferramentas recomendadas para builds com várias fases para suportar a execução de testes em cada fase. Por exemplo, os testes de nível de sistema podem usar ferramentas de teste de API para interagir com o sistema como um serviço externo, em vez de simular as ações de outro componente dentro da solução empresarial.