DevOps na prática – Produção automatizada de ambientes

Blog_MATERA_DevOpsA palavra DevOps vem ganhando cada vez mais evidência no contexto de aplicações e ambientes de TI, com diversos artigos, sites dedicados, comunidades, eventos e etc. É sem dúvida uma das grandes tendências da atualidade no complexo universo do desenvolvimento e execução de software e com todo mérito, visto que a abordagem é realmente um divisor de águas para as empresas de TI.

Ao mesmo tempo que o assunto desperta grande interesse e tem ganhos substanciais, sua efetiva disseminação no mercado não é tão expressiva, como se pode notar no Relatório Anual sobre DevOps da PuppetLabs. Isso dá margem a supor que sua adoção não é algo tão simples. De fato, não se trata de uma tecnologia ou metodologia. DevOps está mais para uma cultura que busca criar um fluxo no qual novas features entram em produção de forma segura, rápida, confiável e frequente.

Experimentar e Inovar

A MATERA começou a explorar essa disciplina em 2014 num projeto de comércio eletrônico e foi 1 ano de bastante aprendizado. Nessa oportunidade o time de desenvolvimento trabalhou de forma muito próxima ao time de infraestrutura e operações de TI, no conceito mais puro de DevOps. De forma absolutamente resumida: os desenvolvedores tomam cuidados importantes nas aplicações, como logs úteis, especificações de ambiente, resiliência, build, deploy, etc; e os analistas de infra criam scripts que instalam e configuram toda infra necessária para instalar, atualizar e executar a aplicação. Esses scripts passam a fazer parte do código-fonte da aplicação, inclusive com versionamento. Um perfil ajuda o outro até que tudo funcione perfeitamente.

No final de 2015 nasceu uma proposta ousada de aplicar os conceitos de DevOps na construção de um pipeline de provisionamento de ambientes para resolver 2 problemas da empresa:

  1. Necessidade de se dedicar muito tempo para criar ambientes de testes nas sprints;
  2. Dificuldade em reproduzir o ambiente exato do cliente no canal de atendimento devido ao imenso número de combinações válidas de versões entre os diversos sistemas da empresa.

O detalhe principal é que ambos os problemas convergem para uma única necessidade: a partir de um ambiente matriz (baseado numa versão semestral), aplicar todos os updates necessários para levar o sistema para a versão desejada, considerando também a atualização das versões de todos os demais sistemas dos quais ele depende. A nada-sutil diferença entre os 2 casos é que para as sprints as versões estariam sendo desenvolvidas, portanto primeiro teria que gerar os artefatos a partir do código fonte para só depois fazer a atualização da versão.

Trabalho e Recompensa

Tal proposta ganhou vida com a formação de um grupo multidisciplinar para elaborar uma padronização sistematizada de vários aspectos de infra de TI e dos sistemas bem como para automatizar todas as tarefas de construção e de atualização de um ambiente, já na forma padronizada. Esse grupo lançou mão de várias tecnologias e ferramentas (Jenkins, Vagrant, Puppet, KVM, Packer, LinuxShell Script, Python e REST) e conseguiu criar um pipeline no Jenkins pelo qual um testador ou um analisata de atendimento pode solicitar a criação de um ambiente com um determinado sistema na versão deseja e pronto! Em poucos minutos ele recebe um e-mail com os dados para acessar o ambiente “up and running”.

O projeto foi um grande sucesso! A reação do público alvo foi muito comovente e recompensadora, mostrando que realmente agregou muito valor. O ROI previsto é de apenas 4 meses e os usuários estão contribuindo com diversas ideias que elevarão a solução a um grau superior de excelência, eficácia, eficiência, robustez, flexibilidade e resiliência.

 

JenkinsPipelineDevops

Exemplo da execução do pipeline de Provisionamento de Ambientes no Jenkins

Conclusão

A jornada apenas começou. Há uma enormidade de trabalho pela frente e muitos frutos a colher. Como aprendizado desse trabalho destacam-se:

  • Padronização: todo esforço em padronização do ambiente, nas suas diversas camadas, significa eficiência e simplicidade nas atividades de automação, pois reduz a diversidade a ser tratada. Padronizações de nomenclaturas, diretórios, tecnologia dos sistemas, pormenores do middleware e até de ritmo de entregas favorece os esforços de automação;
  • Automação: começar pelas partes mais simples é mais recompensador e motivante para expandir o trabalho mais e mais. Em seguida é importante atacar aquilo que consome mais tempo das pessoas, para arrebanhar aliados e promotores da iniciativa, pois inevitavelmente terá que envolver os usuários em vários pontos até ser concluída e validada. As tecnologias precisam ser escolhidas com cuidado, levando-se em conta o conhecimento disponível na empresa e a popularidade na comunidade para conseguir ajuda quando necessário e também inferir sua longevidade.
  • Cultura: a abordagem DevOps é muito diferente e por isso as pessoas precisarão ser instruídas e conquistadas para o projeto ser bem sucedido. Abrir mão dos costumes atuais, com uma VM com ambiente cultivado há anos, intimidade com os dados na base, snapshots para cada versão dos sistemas, etc… para entrar num mundo em que o ambiente necessário simplesmente nasce sem qualquer esforço manual, é usado e em seguida descartado, é mesmo muito radical e a resistência é natural, mas precisa ser trabalhada e convertida em apoio para experimentar, colher resultados e depois propagar da iniciativa.

 

Links Externos

[1] DevOps –> a página em português da Wikipedia foi evitada por dizer logo na primeira linha que DevOps é uma “metodologia de desenvolvimento de software”, o que é um erro bastante comum.

[2] Relatório Anual sobre DevOps da PuppetLabs

[3] Sprint

[4] Jenkins

[5] Vagrant

[6] Puppet

[7] KVM

[8] Packer

[9] Shell Scritp

[10] Python

[11] REST

[12] ROI

Por EMILSON MARGOTO

Postado em: 04 de outubro de 2016

Confira outros artigos do nosso blog

Seja Digital migra para AWS com Matera

13 de dezembro de 2017

Caue dos Santos Pereira

Raspberry Pi e o propósito de Valores

28 de setembro de 2016

Emilson Margoto

Cuidados com Smartphones

27 de agosto de 2015

Jose Rafael Eloy Capucho

Backup remoto de VMs com RSYNC

21 de agosto de 2015

Emilson Margoto

Deixe seu comentário