Ferramentas de integração contínua

Max Rehkopf Max Rehkopf

A Integração contínua (IC) permite que múltiplos desenvolvedores contribuam e colaborem em uma base de código compartilhado em um ritmo rápido. Esta prática é essencial para equipes de alta velocidade em funções de software de alto risco. Sem a integração contínua, a colaboração do desenvolvedor é um processo manual tedioso de coordenar mesclas e atualizações de código.

Pilares da Integração contínua

A CI é construída sobre as melhores práticas de outros softwares incluindo teste automatizado, controle de versão, automação de build e implementações automatizadas. Cada um desses pilares de integração contínua tem o próprio ecossistema de ferramentas e filosofias. Fornecedores de ferramentas de desenvolvimento de software começaram a oferecer CI total como um serviço, o que reúne estes pilares em um pacote holístico. Para entender melhor as ofertas empacotadas, a gente vai revisar a base

Gerenciamento da Versão de Controle da Fonte

É bem provável que o mais importante pilar da base da Integração contínua, o Gerenciamento da versão de controle da fonte, é usado para comunicar e resolver conflitos de edição entre vários desenvolvedores trabalhando na mesma base de código. O Gerenciamento da versão de controle da fonte vem em diversas ferramentas, sendo as mais populares o Git e o Subversion. Produtos de CI como um serviço se concentram em torno do sistema de controle de versão.

Teste Automatizado

Os mais sérios projetos de software incluem uma base de código adicional, que não é explicitamente responsável pelos recursos e produto do negócio. Esta base de código secundária é uma suíte de teste e age como um conjunto de declarações que garantem que a base de código primária está trabalhando corretamente sem bugs. Durante o desenvolvimento, estes testes são rodados por desenvolvedores para validar que este novo código não causou nenhuma regressão em recursos existentes. Estes casos de teste podem ser rodados também por ferramentas estranhas para automatizar este processo de validação. Produtos de serviço de IC irão rodar automaticamente os casos de teste para um projeto em eventos especificados pelo usuário. Geralmente, quando um desenvolvedor coloca o código usando o sistema de controle de versão, um evento irá disparar a execução automática de toda a suíte de teste.

Automação Build

"Builds" são os artefatos criados para fazer um instantâneo da versão de lançamento atual de um projeto de software. Builds são distribuídos para os usuários finais através de várias redes. Existe geralmente um conjunto de etapas com script que um projeto irá fazer para criar um artefato build. Ferramentas de IC ajudam a simplificar este processo de build com o uso de gatilhos automáticos do sistema de controle de versão. Um gatilho de exemplo seria quando um código novo é mesclado na ramificação de produção da base de código, carregar o build em um servidor remoto para que os usuários baixem.

Implementações automatizadas

Quando os builds estão prontos para serem distribuídos, eles passam por um processo de implementação. Dependendo do projeto, a implementação pode ter uma variedade de resultados. Por exemplo, projetos da web são implementados para servidores da web publicamente acessíveis. Durante esta implementação, o artefato que foi gerado na fase de build é copiado nos servidores da web. O processo de implementação para dispositivos móveis e desktop varia e pode envolver o carregamento para um 'repositório' para que os usuários possam baixar o app.

Comparação de ferramentas de Integração contínua

Bitbucket Pipelines

Resumo: O Bitbucket Pipelines é uma ferramenta de CI integrada ao Bitbucket, um sistema de controle de versão em nuvem oferecido pela Atlassian. O Bitbucket Pipelines é uma próxima etapa fácil para habilitar a CI se o projeto já estiver no Bitbucket. O Bitbucket Pipelines é gerenciado como código, então você pode fazer o commit das definições de pipeline e lançamento de builds com facilidade. O Bitbucket Pipelines também oferece CD. O que significa que projetos criados com o Bitbucket Pipelines também podem ser implementados na infraestrutura de produção

Recursos:

  • Fácil instalação e configuração
  • Experiência unificada do Bitbucket
  • Nuvem oferecida por terceiros

Site: https://bitbucket.org/product/features/pipelines

Jenkins

Resumo: Jenkins é uma ferramenta de CI veterana com um registro de rastreamento comprovado. Ele tem código aberto e é conduzido por atualizações da comunidade. O Jenkins é voltado para uma instalação na premissa. O Jenkins é uma ótima opção para quando a empresa precisar de suporte na premissa para lidar com clientes sigilosos como dados de conformidade HIPAA.

Recursos:

  • Na premissa
  • Open Source
  • Ecossistema robusto de plug-ins/complementos

Site: https://jenkins.io/

AWS CodePipeline

Resumo: O Amazon Web Services é uma das provedoras de infraestrutura de nuvem mais dominantes no mercado. A empresa oferece ferramentas e serviços para todas as maneiras de tarefas de infraestrutura e desenvolvimento de código. O CodePipeline é a oferta de ferramenta de CI. O CodePipeline pode fazer interface direto com outras ferramentas existentes do AWS para proporcionar uma experiência perfeita do AWS.

Recursos:

  • Nuvem completa
  • Integração com o Amazon Web Services
  • Suporte a plug-ins personalizados
  • Controle robusto de acesso

Site: https://aws.amazon.com/codepipeline/

CircleCI

Resumo: O CircleCI é a ferramenta de CI que combina com o Github com facilidade, uma das ferramentas de hospedagem em nuvem de sistema de controle de versão mais populares. O CircleCI é uma das ferramentas de CI mais flexíveis, visto que é compatível com uma matriz de sistemas de controle de versão, sistemas de contêineres e mecanismos de entrega. O CircleCI pode ser hospedado na premissa ou usado por meio de uma oferta de nuvem.

Recursos:

  • Acionadores de notificação de eventos de CI
  • Otimização de desempenho para builds rápidos
  • Depuração fácil por meio de SSH e builds locais
  • Análises para medir o desempenho do build

Site: https://circleci.com/

Azure Pipelines

Resumo: O Azure é a plataforma de infraestrutura de nuvem da Microsoft, o equivalente na Microsoft ao Amazon Web Services. Como o AWS CodePipeline mencionado acima, o Azure oferece uma ferramenta de CI que se integra por completo ao pacote de ferramentas de hospedagem do Azure.

Recursos:

  • Integração com a plataforma Azure
  • Suporte à plataforma Windows
  • Suporte a contêiner
  • Integração com o GitHub

Site: https://azure.microsoft.com

Gitlab

Resumo: O GitLab é uma ferramenta nova de CI que oferece uma experiência completa de DevOps. O GitLab foi criado com intenção de melhorar a experiência global do GitHub. O GitLab oferece uma experiência do usuário moderna com suporte a contêiner.

Recursos:

  • Hospedagem na premissa ou na nuvem
  • Teses de segurança contínuos
  • Experiência do usuário fácil de aprender

Site: https://about.gitlab.com

Atlassian Bamboo

Resumo: Outra oferta de CI da Atlassian. Considerando que o Bitbucket Pipelines é uma opção de hospedagem na nuvem, o Bamboo oferece uma alternativa de auto-hospedagem.

Recursos:

  • Melhor integração com o pacote de produtos da Atlassian
  • Extenso marketplace de complementos e plug-ins
  • Suporte a contêineres com agentes do Docker
  • API de acionadores para funcionalidade IFTTT

Site: https://www.atlassian.com/software/bamboo

Qual a melhor ferramenta de IC para sua empresa?

Ao escolher uma ferramenta de IC para sua equipe, existem alguns fatores importantes para tomada de decisão a considerar.

Suporte ao Sistema de Controle de Versão

O pilar central de um sistema de Integração Contínua/Implementação Contínua é o suporte e integração do Sistema de Controle de Versão (VCS) subjacente. Os VCS’s mais populares são Git, Subversion, Mercurial e Perforce. Ferramentas de IC na nuvem podem oferecer suporte para alguns ou todos estes VCS’s. É fundamental escolher uma ferramenta de IC que oferece suporte para o VCS do seu projeto.

No local x Na nuvem

Algumas das ferramentas de CI mencionadas acima, como o Jenkins, podem ser instaladas na premissa. Ou seja, a equipe é responsável por configurar e gerenciar o sistema de CI na própria infraestrutura. Pode ser benéfico por razões de privacidade e segurança. Por exemplo, se você tem preocupação com privacidade de dados do cliente para atender padrões de conformidade, instalar na premissa pode ser um requisito. Além disso, instâncias na premissa podem oferecer opções mais aprofundadas de personalização e configuração.

Instalar na premissa pode ser trabalho extra que não vai de acordo com as necessidades principais da empresa. As opções em nuvem terceirizam o gerenciamento da ferramenta de CI para um fornecedor externo. A empresa de hospedagem em nuvem lida com a disponibilidade, suporte e escala da ferramenta de CI, permitindo que a equipe se concentre nas necessidades principais da empresa. Talvez seja um grande benefício para equipes com orçamento limitado ou empresas menores que precisam se concentrar bastante nas metas de adequação do mercado de produtos.

Suporte a contêiner

Conteinerização é uma tendência de desenvolvimento moderno de software. A conteinerização permite a distribuição de uma cópia imutável, repetível e isolada de um aplicativo. A conteinerização é habilitada por ferramentas como o Docker e o Kubernetes. Ferramentas modernas de CI vão oferecer suporte para contêineres de integração no processo de CI/CD. Os contêineres resolvem o problema de "funciona na minha máquina". Garantindo que o código de aplicativo seja empacotado em uma captura de tela congelada das dependências de nível do sistema. Assim, você tem garantias de que quando o código da equipe for executado na ferramenta de CI, ele vai ser uma cópia do ambiente local. Essa ação elimina toda uma classe de itens de solução de problemas de paridade de ambiente que surgem sem os contêineres.

Integrações de plugins e terceiros

As ferramentas de IC se tornam ainda mais úteis quando integradas com o resto de sua pilha de tecnologia. Análises sobre eficiência e desempenho da equipe de engenharia podem ser coletadas de ferramentas de IC. Aplicativos de planejamento de sprint podem ser conectados a ferramentas de IC para atualizar automaticamente o status do sprint quando o código foi entregue. Estas integrações podem ser usadas para orientar KPIs e roteiros de equipes de engenharia.

Comece a usar a IC

Uma ferramenta moderna de CI é um requisito essencial para habilitar uma equipe de engenharia de alto desempenho. As equipes de engenharia podem otimizar a comunicação e velocidades de entrega usando uma ferramenta de CI. O mercado tem muitas ofertas de ferramentas de CI populares. Os principais conceitos a considerar quando for escolher uma ferramenta de CI são suporte do sistema de controle de versão, hospedagem na nuvem vs. na premissa, pipelines de implementação e integrações com aplicativos externos.