A customização do Open Source com a Microsoft


A customização do Open Source com a Microsoft

Uma maneira muito didática de entendermos como podemos utilizar soluções Open Source com soluções Microsoft é observarmos como nossos clientes tem se beneficiado deste processo. Hoje vamos falar de uma empresa chamada Zup Innovation, uma startup que utiliza um plugin Microsoft junto com o Jenkins.

Cenário antigo, oneroso e difícil de gerenciar

A Zup, como todo boa startup, já vem de uma cultura de utilizar tecnologias Open Source, e, dada a sua forma de desenvolvimento de software ser baseada em CI/CD (continuous integration/continuous delivery), eles utilizavam o Jenkins para automatizar as tarefas de build aplicações, assim como automatização de deploys.

Como a empresa trabalha com muitos jobs sendo executados ao mesmo tempo, isso acabava por sobrecarregar o servidor. No início, toda vez que um job fosse executar uma build o Jenkins subia um container Docker para cada artefato a ser compilado, o que causava diversos problemas como consumo de espaço em disco e lentidão.

Assim, a solução do Jenkins era tornar isso possível sem que houvesse sobrecarga no Jenkins Master. Além disso, era necessário que os slaves fossem desligados após certo período de inatividade.Inicialmente a empresa pensou em implementar os servidores manualmente, mas isso seria oneroso e criaria custos extras.

Novos tempos, DevOps e automatização de tarefas

Para resolver este problema a Microsoft criou um plugin que trabalha com o Jenkins dentro do Azure, o VM Agent.

O VM Agent do Azure é um processo seguro e leve que gerencia a interação da VM com o Azure Fabric Controller. O VM Agent tem uma função fundamental na habilitação e execução de extensões de máquina virtual do Azure. Extensões de VM habilitam a configuração de VM pós-implantação, como instalação e configuração de software. Extensões de VM também habilitam os recursos de recuperação como redefinir a senha administrativa de uma VM. Sem VM Agent do Azure, não é possível executar extensões da VM.

O VM Agent vem instalado por padrão em qualquer VM do Windows, mas caso você não tenha ele instalado, basta seguir o seguinte comando:

msiexec.exe /i WindowsAzureVmAgent.2.7.1198.778.rd_art_stable.160617-1120.fre /quiet

Vale lembrar que para inicializar a VM é necessário ter o AP (Agente de Provisionamento) instalado na VM. Para saber mais sobre o processo de implantação do Jenkins para atender à demanda com VM Agents do Azure você pode acessar esta documentação.

Dentre as atividades do plugin estava a criação de novas VMs automaticamente.

Arquiteutra da solução do Azure VM Agent

A Zup utiliza o Jenkins Multibranch Pipeline, e no momento do build o plugin é acionado para lançar os agentes (VMs), caso ainda não existisse nenhuma. Porém, se já houver VMs iniciadas, o Jenkins seleciona alguma disponível. O plugin trabalha como um orquestrador de VMs, deste modo, os desenvolvedores não precisam se preocupar em manter os slaver servidores do Jenkins.

Sempre que VMs on-demand são lançadas para executar builds, o Jenkins sobe instâncias Docker nestas VMs, porém, após um período de duas horas de inatividade, a VM Slave era destruída, tornando o processo de desenvolvimento mais ágil.

Para que tudo isso fosse possível, eles precisaram fazer a integração do plugin com o Azure. A integração se deu por um script de configuração de inicialização no campo de configuração do Jenkins, chamado VM First Startup Configuration. Este script possui instruções de instalação das dependências como Docker, Java, Kubectl e Helm, assim, era possível executar os builds e os deploys automáticos no orquestrador de containers.

A instalação de dependências é bem simples, segue um exemplo de como instalar e executar um container Docker NGINX:

$PublicSettings = '{"docker": {"port": "2375"},"compose": {"web": {"image": "nginx","ports": ["80:80"]}}}'

 

Set-AzureRmVMExtension -ExtensionName "Docker" -ResourceGroupName $resourceGroup -VMName $vmName 

  -Publisher "Microsoft.Azure.Extensions" -ExtensionType "DockerExtension" -TypeHandlerVersion 1.0 

  -SettingString $PublicSettings -Location $location

 

Sensação de alívio

Em um dia de alta demanda, a equipe da Zup provisionava cerca de 6 slaves com 2 executores em cada, além disso, de 10 a 12 pipelines ocorriam simultaneamente.

Hoje, a utilização do plugin da Microsoft, o Azure e o Jenkins, possibilitou que os desenvolvedores tenham uma melhor utilização do seu tempo, facilita o gerenciamento das VMs e torna o processo de build e deploys muito mais rápidos. E é por isso que a Microsoft ama o Open Source! 😉

 


Autor: Microsoft Tech