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 IC é construída sobre as melhores práticas de outros softwares incluindo teste automatizado, controle de versão, automação build e implementações automatizadas. Cada um destes pilares de integração contínua tem seu próprio ecossistema de ferramentas e filosofias. Fornecedores de ferramentas de desenvolvimento de software começaram a oferecer IC total como um serviço, o que reúne estes pilares em um pacote holístico. Para entender melhor as ofertas empacotadas, vamos revisar a base
Gerenciamento da Versão de Controle da Fonte
Provavelmente 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 múltiplos desenvolvedores trabalhando na mesma base de código. Gerenciamento da Versão de Controle da Fonte vem em uma variedade de ferramentas, sendo as mais populares Git e Subversion. Produtos de IC como um serviço centram-se 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: Bitbucket Pipelines é uma ferramenta de IC diretamente integrada no Bitbucket, um sistema de controle de versão em nuvem oferecido pela Atlassian. Bitbucket Pipelines é uma próxima etapa fácil para habilitar IC se o seu projeto já está no Bitbucket. Bitbucket Pipelines é gerenciado como código, então você pode confirmar facilmente definições de pipeline e lançamento dos builds. Bitbucket Pipelines, também oferece implementação contínua. Isto significa que projetos criados com Bitbucket Pipelines também podem ser implementados na infraestrutura de produção
Recursos:
- Fácil instalação e configuração
- Experiência Bitbucket unificada
- Nuvem por terceiros
Jenkins
Resumo: Jenkins é uma ferramenta de IC veterana com um registro de rastreamento comprovado. Ele tem código aberto e é conduzido por atualizações da comunidade. Jenkins é destinado primariamente para uma instalação no local. Jenkins é uma ótima opção quando sua organização precisa de suporte no local para lidar com clientes sigilosos como dados de conformidade HIPAA.
Recursos:
- No local
- Código aberto
- Complemento robusto /ecossistema de plugin
Website: https://jenkins.io/
AWS CodePipeline
Resumo: Amazon Web Services é uma das mais dominantes provedoras de infraestrutura de rede no mercado. Eles oferecem ferramentas e serviços para todas as maneiras de tarefas de infraestrutura e desenvolvimento de código. CodePipeline é sua oferta de Ferramenta de IC. CodePipeline pode fazer interface diretamente com outras ferramentas existentes da AWS para fornecer uma experiência de AWS perfeita.
Recursos:
- Totalmente na nuvem
- Integrada com Amazon Web Services
- Suporte a plugin personalizado
- Controle de acesso robusto
Website: https://aws.amazon.com/codepipeline/
CircleCI
Resumo: CircleCI é a Ferramenta de IC que faz par facilmente com Github, uma das mais populares ferramentas de hospedagem em nuvem de sistema de controle de versão. CircleCi é uma das mais flexíveis Ferramentas de IC, visto que suporta uma matriz de sistemas de controle de versão, sistemas de contêiner e mecanismos de entrega. CircleCi pode ser hospedada no local ou usada através de uma oferta de nuvem.
Recursos:
- Gatilhos de notificação de eventos de IC
- Desempenho otimizado para builds rápidos
- Depuração fácil através de SSH e builds locais
- Análise para medir desempenho do build
Website: https://circleci.com/
Azure Pipelines
Resumo: Azure é a plataforma de infraestrutura de rede da Microsoft, o equivalente na Microsoft ao Amazon Web Services. Como o acima mencionado AWS CodePipeline, a Azure oferece uma Ferramenta de IC que se integra totalmente na suíte Azure de ferramentas de hospedagem.
Recursos:
- Integração com plataforma Azure
- Suporte à plataforma Windows
- Suporte a contêiner
- Integração com Github
Website: https://azure.microsoft.com
Gitlab
Resumo: Gitlab é uma nova Ferramenta de IC que oferece uma experiência total em DevOps. A Gitlab foi criada com intenção de melhorar a experiência global do Github. Gitlab oferece uma UX (experiência do usuário) moderna com suporte a contêiner.
Recursos:
- Hospedagem no local ou em nuvem
- Teste de segurança contínuo
- UX fácil de aprender
Website: https://about.gitlab.com
Atlassian Bamboo
Resumo: Outra oferta de IC da Atlassian. Enquanto o Bitbucket Pipelines é puramente uma opção hospedada em nuvem, Bamboo oferece uma alternativa auto-hospedada.
Recursos:
- Melhor integração com suíte de produtos Atlassian
- Um extenso mercado de complementos e plugins
- Suporte a contêiner com agentes Docker
- Gatilho API para funcionalidade IFTTT
Website: 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 IC mencionadas acima, como a Jenkins, podem ser instaladas no local. Isto significa que sua equipe é responsável por configurar e gerenciar o sistema de IC em sua própria infraestrutura. Isto 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 no local pode ser um requisito. Além disso, instâncias no local podem oferecer opções mais aprofundadas de personalização e configuração.
Instalar no local pode ser trabalho extra que não está em linha com suas necessidades de negócios principais. As opções em nuvem terceirizam o gerenciamento da Ferramenta de IC para um fornecedor externo. A empresa de hospedagem em nuvem lida então com tempo de funcionamento, suporte e dimensionamento da Ferramenta de IC, permitindo que sua equipe se concentre nas necessidades de negócios principais. Este pode ser um grande benefício para equipes com orçamento limitado ou empresas menores que precisam concentrar-se agressivamente nas metas de adequação do mercado do produto.
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. Ela é habilitada por ferramentas como Docker e Kubernetes. Ferramentas modernas de IC irão oferecer suporte para contêineres de integração no processo de IC/Implementação Contínua. Os contêineres resolvem o problema de "funciona no meu computador". Garantindo que este código de aplicativo é empacotado em um instantâneo congelado das dependências de nível do sistema. Isto fornece garantias de que quando o código de sua equipe é executado na Ferramenta de IC, ele é uma cópia do ambiente local. Isto elimina toda uma classe 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 de IC moderna é um requisito crítico para habilitar uma equipe de engenharia de alto desempenho. Equipes de engenharia podem otimizar sua comunicação e velocidades de entrega usando uma ferramenta de IC. O mercado tem muitas ofertas de ferramentas de IC populares. Os conceitos pilares para considerar quando escolher uma ferramenta de IC são suporte do sistema de controle de versão, hospedagem na nuvem no local x nuvem, pipelines de implementação e integrações de aplicativo externas.