Home > Gestão

10 ferramentas para integração e entrega contínuas na nuvem

Do Bitbucket e GitLab ao AWS CodePipeline e Travis CI, procure por esses 10 serviços de nuvem para automatizar compilações, testes e implantações

Peter Wayner, InfoWorld/EuA

19/02/2019 às 16h33

Foto: Shutterstock

A nuvem e a integração contínua (CI) são uma correspondência natural. Enquanto a nuvem nos libera da dificuldade de instalar e manter servidores físicos, a integração contínua automatiza grande parte da dificuldade de criar, testar e implantar código. Se ambos pretendem tirar o trabalho dos ombros das equipes de desenvolvimento, faz muito sentido combiná-los.

Existem muitos serviços de integração contínua e todos fazem a mesma coisa, pelo menos em um sentido abstrato. Eles começam com uma lista de tarefas, como compilar ou testar, que devem ser realizadas antes que o mundo possa apreciar o gênio por trás do seu novo software. Quando você compromete suas linhas de código, as ferramentas começam a trabalhar na lista de verificação até que elas sejam executadas em um roadblock. Se não houver barreiras, todo mundo fica feliz.

Qualquer um pode usar integração contínua para qualquer projeto de desenvolvimento de software, mas as maiores vantagens são aproveitadas pelas equipes, preferencialmente equipes grandes, que estão trabalhando nos mesmos blocos de código, interligados. As implementações mais completas da integração contínua constroem e reconstroem o código antes de testá-lo mais de uma vez, em busca de novos erros e incompatibilidades que possam ter sido criados quando diferentes membros da equipe registram seu código. Servidores de integração contínua sincronizam o trabalho de todos os programadores e ajudam a equipe a detectar qualquer problema.

Algumas listas de tarefas do servidor de CI terminam com os testes, mas ultimamente mais e mais equipes estão ampliando as listas para que passem a incluir também a implementação do novo código, em um processo às vezes apelidado de “implementação contínua”.

A implementação completamente automatizada deixa algumas pessoas nervosas e muitas vezes adiciona algumas pausas manuais no processo. Adicionar um pouco de responsabilidade e segurança humana permite que eles relaxem um pouco. Eles chamarão essa abordagem híbrida de "entrega contínua" porque ela fornece o código para algum cluster de teste, onde ele aguardará um ser humano enviá-lo finalmente para a produção.

Se a integração contínua é ótima na sala de servidores, pode ser ainda melhor na nuvem, onde há grandes oportunidades para uma entrega mais rápida, com maior eficiência. Nos melhores casos, as nuvens podem dividir o trabalho e executar as tarefas em paralelo. Os serviços começam com um grande pool de hardware e depois o compartilhamento entre muitas equipes. Contanto que todos não estejam gerando código ao mesmo tempo, as compilações e os testes serão executados muito mais rapidamente.  Comprar o mesmo rack enorme de hardware apenas para os momentos em que os desenvolvedores querem executar todos os testes é proibitivo, mas se as equipes compartilharem o rack, todos poderão aproveitar os picos de velocidade.

Há perigos e preocupações, e o maior deles pode ser a perda de controle. Todos os serviços em nuvem exigem a entrega de seu código a terceiros, uma escolha que pode parecer liberadora para alguns, mas assustadora para outros. Todos os serviços em nuvem tentam enfatizar a segurança, mas, de alguma forma, parece diferente quando o código está sob seu próprio teto.

As listas de tarefas são quase sempre codificadas como comandos para algum shell ou linha de comando, portanto, as ferramentas de integração contínua continuam emitindo os comandos até que a lista esteja esgotada ou que algum roadblock intransponível apareça. Algumas das linguagens como o Java oferecem opções mais sofisticadas, mas na maioria das vezes as ferramentas podem realizar qualquer coisa que você possa fazer com uma linha de comando.

Aqui estão 10 opções diferentes para fazer integração contínua na nuvem.

1 - CloudBees
O CloudBees Core começou com o Jenkins, o conhecido projeto de código aberto para integração contínua, e acrescentou testes, suporte e alguma garantia de que o código seria executado. A empresa limpou todos os plug-ins experimentais, adicionou alguns deles e depois aprimorou os plug-ins corretos para que funcionassem conforme o esperado, quando você precisa deles.

A CloudBees ainda emprega 80% da equipe de desenvolvimento do Jenkins e eles frequentemente contribuem com código para o projeto de código aberto, para que você possa ter certeza de que eles entendem bem essa plataforma dominante. Para agilizar as coisas, a CloudBees também adicionou extensiva paralelização e instrumentação para acompanhar seu processo de desenvolvimento.

A CloudBees oferece uma variedade de preços que vão de níveis gratuitos a "kits iniciais" por um ano inteiro de serviço. A empresa também oferece suporte a Jenkins para qualquer pessoa que precise de ajuda com a ferramenta.

2 - AWS CodePipeline
A ferramenta da Amazon para integração e implementação contínuas, o AWS CodePipeline, é otimizada para fornecer código a um servidor da AWS e ainda estar aberta a caminhos mais elaborados para o seu código e dados. A ferramenta básica oferece uma boa seleção de ambientes de construção pré-configurados para os principais idiomas (Java, Python, Node.js, Ruby, Go, Android, .NET Core para Linux) e, em seguida, despeja o resultado em um bucket do S3 antes de enviá-lo para um servidor para começar a rodar.

Há um número surpreendentemente grande de camadas com nomes ligeiramente diferentes. O CodeBuild e o CodeCommit são acionados inicialmente e entregam o resultado para CodeDeploy. Se são muitas coisas do Code para você configurar, você pode ir direto para o CodeStar, que oferece outra camada de automação. Infelizmente não existe um CodeBugEraserStar para apagar todos os nossos erros automaticamente também.... Vale a pena notar que você não paga tecnicamente por nenhuma dessas camadas de código. A Amazon cobra apenas os recursos de computação e o armazenamento usados ​​ao longo do caminho. Não é exatamente livre, embora pareça.

3 - Bitbucket Pipelines
A Atlassian, desenvolvedora do popular painel de rastreamento de trabalho Jira, e o repositório de código, Bitbucket, decidiram aproveitar seu fluxo de trabalho criando o Bitbucket Pipelines, uma ferramenta de integração contínua na nuvem da Bitbucket. O pulo do gato é uma maior integração, neste caso na forma de conexões entre o mecanismo de compilação e outras ferramentas da Atlassian. Pelo menos cosmeticamente, o Pipelines é apenas mais uma opção de menu para cada projeto no Bitbucket. Outra opção de menu aponta para implantações, permitindo que você selecione onde as compilações acabam.

As conexões são uma bênção e uma limitação. Se você escolher um dos modelos já definidos para os principais idiomas (Java, JavaScript, Python, PHP, .NET, etc.), poderá construir e implantar seu código com apenas alguns cliques. Mas se você se afastar dos padrões, começará a descobrir que as opções não estão lá. A Atlassian encoraja um marketplace de apps que parecem ser uma mistura de gráficos e webhooks em outros serviços. O aplicativo principal no gráfico conectará o Bitbucket com o Jenkins, presumivelmente para fazer algo que não pode ser feito rapidamente dentro das paredes.

A principal vantagem do Pipelines é a velocidade. A Atlassian pré-projetou a maioria dos principais caminhos do código para as implantações em execução e você pode seguir os passos da empresa por apenas alguns dólares. É difícil comparar o custo de usar o Bitbucket porque os builds custam em minutos, como a maioria dos modelos sem servidor, mas as equipes muitas vezes dedicam um conjunto de instâncias para lidar com as compilações do Jenkins. Mesmo que você as feche em noites e fins de semana, as horas se acumulam.

4 - GitLab CI/CD
Um dos maiores concorrentes da Atlassian é o GitLab, outra empresa que quer lidar com cada etapa do processo entre seus dedos e a execução da implantação. Os mecanismos de desenvolvimento, teste e implementação do GitLab também são conectados diretamente aos seus repositórios Git para que eles possam ser ativados. O processo é amplamente construído em torno de containers do Docker e esse armazenamento em cache pode simplificar bastante alguns dos trabalhos de configuração que devem ser feitos em torno das compilações do Jenkins.

As tarefas de compilação podem ter como alvo qualquer idioma, mas devem ser acionadas pelo GitLab Runner, uma ferramenta de escalonamento automático escrita em Go, que está pronta para a maioria das plataformas. Essa flexibilidade significa que você pode acionar qualquer trabalho aleatório em outras máquinas, algo que pode ser útil em arquiteturas elaboradas que fazem mais do que apenas fornecer microsserviços.

O preço é incluído nos vários níveis para aproximar a necessidade. Os grupos Gold, por exemplo, obtêm todos os melhores recursos, como painéis de segurança e 50 mil minutos de construção no cluster compartilhado de máquinas. Não há custo para usar suas próprias máquinas em parte do processo ou instâncias separadas em alguma outra nuvem.

5 - CircleCI
Muitas das ferramentas de integração contínua concentram-se no código que pode ser construído no ambiente Linux. A CircleCI constrói e entrega no mundo Linux, mas também oferece um produto que irá construir aplicativos Android e qualquer coisa que saia do Xcode da Apple (para iOS, MacOS, tvOS ou watchOS). Se você estiver trabalhando em uma equipe que esteja produzindo aplicativos para essas plataformas, poderá comprometer seu código e deixar que o CircleCI imponha alguma disciplina de teste em todos os membros divergentes de sua equipe.

As listas de tarefas estão escritas em arquivos YAML. O CircleCI usa o Docker, em várias camadas, para configurar os ambientes de teste do código. As construções começam com containers novos e todos os testes também. O trabalho do Mac é executado em máquinas virtuais que têm um tempo de vida similarmente curto. Isso evita alguns dos problemas com a configuração, porque os ambientes limpos não têm nenhum resto de bits por aí. (Se seus problemas foram causados ​​por resíduos digitais remanescentes, bem, a culpa é sua.)

O preço é focado na quantidade de CPU que suas builds sugam. O número de usuários e o número de repositórios são ilimitados. O número de minutos de construção e os containers, no entanto, são medidos. O primeiro container é gratuito e você pode executar um build nele. Se você quiser mais paralelismo ou mais produtividade, o CircleCI pode ganhar algum dinheiro. Os usuários de Mac não recebem o mesmo contrato gratuito, mas há planos introdutórios para quem testar o serviço.

6 - Travis CI
Se suas compilações produzem código que precisa ser testado em caixas do Windows, o Travis CI oferece uma única parada. A empresa oferece opções de MacOS e Linux há algum tempo, mas acaba de lançar a opção Windows, tornando mais simples a produção de código em mais lugares.

As listas de tarefas também são explicitadas em YAML e as tarefas são executadas em máquinas virtuais limpas com configuração razoavelmente padrão. O código Linux obtém algumas versões básicas do Ubuntu, o código do Mac é executado em uma das doze combinações de OS X e Xcode e JDK. Por enquanto, o código do Windows só pode ser usado em uma versão do Windows Server (1803). O Travis CI oferece uma longa lista de 30 idiomas e cria regras pré-configuradas e praticamente prontas para serem executadas.

O preço é baseado em quantos trabalhos simultâneos podem ser executados de uma só vez, mas não há limites formais para o número de minutos que essas compilações podem ocupar. É como se você conseguisse um número fixo de instâncias dedicadas para o seu trabalho e elas estivessem prontas o tempo todo. Não há opções gratuitas para o trabalho proprietário, mas os projetos de código aberto são “sempre gratuitos” - então, essa pode ser a maneira mais simples de testar o Travis CI.

7 - Azure Pipelines
O material promocional do Azure Pipelines diz: "Qualquer idioma, qualquer plataforma". Embora isso seja quase certamente uma hipérbole e o Azure provavelmente não tenha muito a oferecer aos programadores ENIAC, ele oferece proeminentemente caminhos para seu código no universo Microsoft, Linux e Apple. No caso da Apple apenas para compilações do MacOS, não o iOS ou o tvOS ou o watchOS, mas não vamos ser exigentes. Este é um copo que está muito mais do que meio cheio.

Em resumo, o sistema é semelhante aos outros. Existem agentes que executam compilações para produzir artefatos. Alguns deles podem ser auto-hospedados se essa opção ajudar. A pilha abrange totalmente os containers do Docker e o hardware do Azure está pronto para executá-los para você. Todos esses detalhes podem ser clicados juntos com um designer visual construído em uma página Web ou especificados com o YAML se você preferir viver no mundo da linha de comando.

Quer paralelismo? A Microsoft oferece 1800 minutos  gratuitos de tempo de construção. Se você quiser mais paralelismo ou mais tempo, você começa a pagar. O plano inclui um nível gratuito generoso para projetos de código aberto, enfatizando novamente o desejo da Microsoft de participar da comunidade de código aberto geral. Mas se a Microsoft vai gastar US $ 7,5 bilhões para comprar um assento na mesa ao adquirir o GitHub, isso faz muito sentido.

8 - CodeShip
Configurar sua lista de tarefas geralmente é o maior desafio ao usar uma ferramenta de integração contínua. O CodeShip usa duas abordagens diferentes para isso em dois níveis de serviço. O plano “Básico” inclui muita automação e pré-configuração, juntamente com uma interface gráfica do usuário para configurar um esboço das tarefas. Tudo o mais é feito para você. A versão “Pro” permite que você olhe sob o capô e contorne a configuração e os containers Docker usados ​​para definir os ambientes de construção. Você pode escolher quantas máquinas serão dedicadas às suas tarefas, bem como o quão bem provisionadas elas poderão ser.

De certa forma, isso é o oposto de como o mundo geralmente funciona. Você paga mais e consegue fazer mais trabalho. O chamado usuário básico obtém tudo automatizado. Não parece justo, até que você queira fazer algo que não seja exatamente o padrão e sinta necessidade de atualizar do Basic para o Pro.

O plano Basic oferece um nível gratuito com uma build machine, projetos ilimitados e pessoas, mas apenas 100 builds por mês. Portanto, se você tiver mais de 100 projetos, precisará pagar se quiser compilá-los todos em um mês. Uma vez que você comece a pagar, não há limites para o número de compilações ou quantos minutos elas levam. Você escolhe apenas quantas máquinas de construção e máquinas de teste cuidarão de suas tarefas. O plano Pro também começa com uma opção gratuita, mas quando você começa a pagar sua conta é determinada pelo tamanho e número de instâncias de nuvem dedicadas ao seu trabalho.

9 - Sauce Labs
A maioria das ferramentas listadas aqui é especializada em orquestrar o fluxo do código do repositório para a implementação. O Sauce Labs se concentra nos testes. O serviço oferece uma ampla variedade de combinações para que você tenha certeza de que tudo está funcionando. Você quer testar no Firefox 58 rodando no Windows 10? E quanto ao Firefox 56 no MacOS? Eles estão prontos para você. É possível gerar rapidamente uma enorme variedade de combinações e opções de plataforma para os testadores mais obsessivos.

Os scripts de teste podem ser escritos em seu idioma de preferência, desde que você escolha um dos padrões como Java, Node, Ruby ou PHP. A nuvem de processadores terá como alvo cada um em paralelo. A Sauce Labs também é especializada em integrar os testes com outras ferramentas ou pipelines de CI. Então você pode executar o Jenkins localmente e delegar o teste para o Sauce Labs.

O preço começa com uma taxa baixa para testes "ao vivo". Você pagará mais por testes automatizados, medidos em minutos e em número de caminhos paralelos. O Sauce Labs também tem a opção de testar seu software em qualquer uma das centenas de dispositivos reais na nuvem da empresa.

10 - Jenkins e Hudson
Uma das maneiras mais simples de iniciar um pipeline de integração contínua na nuvem é alugar uma instância do servidor e iniciar o Jenkins ou o Hudson. Em muitos casos, já existe uma imagem pré-construída de um dos provedores como o Bitnami esperando por você para iniciar o processo.

Jenkins e Hudson começaram como um mesmo programa para testar códigos Java, mas se dividiram em dois campos quando surgiu uma disputa entre alguns desenvolvedores e a Oracle. Os detalhes não são tão importantes, mas a divisão mostra como as licenças de código aberto permitem que os desenvolvedores tomem decisões sobre o código, limitando o controle dos proprietários nominais.

E embora Jenkins e Hudson possam ter começado como uma ferramenta para a construção de projetos Java, há muito tempo superaram esse nicho. Agora, as equipes os utilizam para lidar com quase todos os idiomas e há milhares de plugins para lidar com a criação, o empacotamento, o teste e a implantação. O código é open source, portanto não há custo adicional para usá-lo. Você paga apenas pelo servidor - e seu tempo configurando-o.

 

Junte-se a nós e receba nossas melhores histórias de tecnologia. Newsletter Newsletter por e-mail