Bots, Devops e Docker

Participamos de um Hackathon de Bots.

Whitepaper: Bots, DevOps e Docker - Lições aprendidas em 48 horas
[Download do Whitepaper]

Já faz quase um ano que nos juntamos para trabalhar em um projeto de Bot. Nosso time era composto por pessoas com diferentes especialidades e, por isso, decidimos empregar as técnicas de DevOps para garantir uma entrega ágil e sem perda de qualidade durante o evento.

Cockpit da NASA

Uma coisa é certa: desde o início já sabíamos como seria nosso dashboard. Teria que todos os indicadores de processo, incluindo cada fase do nosso pipeline de entrega (Build, Release e Teste) até o ambiente de produção.

image

Construímos um pipeline de entrega para remover os passos manuais dos processos de compilação até a publicação. Todos enxergavam o status do projeto pelo dashboard do VSTS, que fornecia informações sobre:

  • Tarefas pendentes
  • Resultado dos builds
  • Distribuição da aplicação
  • Resultado dos testes
  • Monitoração da aplicação e infraestrutura

Uma das vantagens da integração contínua no VSTS era a visão do histórico de compilação. Acredite ou não, ver tantos indicadores na cor verde aumentava a nossa confiança, pois sabíamos que estávamos fazendo o trabalho certo. Lógico que, no começo, estava tudo vermelho.

image

Em um cenário sem esse acompanhamento detalhado, talvez a gente não estivesse tão confortável em fazer modificações próximos ao final do evento. Você já certamente viu isso acontecer na empresa – o período de freezing. Entretanto, nosso time não teve freezing e seguimos codificando até o último minuto.

Linux e Containers

Desde o começo imaginamos criar um projeto para rodar em Linux. Todo o desenvolvimento foi realizado com o Visual Studio 2015 rodando em Windows, porém, utilizamos a versão do .NET Core.

image

Usamos o Windows e Linux ao mesmo tempo. Isso é confuso?

Começamos configurando os agentes VSTS no Linux para compilar nossos microserviços baseados em ASP.NET Core.

image

Nosso ambiente de produção era baseado no Docker:

image

Embora pareça apenas um Docker Host, esse ambiente era um cluster de container.

image

Azure Container Services contém um conjunto de máquinas virtuais instalados com o Docker Engine. Quando um container é instanciado, sua execução será direcionada para um dos nós (VMs) deste grupo de agentes. Assim, temos a garantia de alta disponibilidade.

Bots

Por fim, faltou falar do nosso projeto. A ideia era criar um Bot para responder dúvidas sobre Azure. No front-end, usamos o Microsoft Bot Framework para conectar o Bot com diferentes canais de comunicação (Skype, SMS, e-mail, etc). No back-end, criamos microserviços de busca rodando em Linux e containers Docker.

Ganhamos o Hackathon?

Com tudo isso rodando, não chegamos nem perto de ganhar o Hackathon. Investimos bastante tempo na “engenharia” do projeto e realmente avançamos pouco na inovação do projeto. O time que ganhou combinou uma série de tecnologias: IoT, Machine Learning, PowerBI, e nem me lembro mais o que.

Perdemos o hackaton, mas nem tudo foi em vão. Conseguimos finalizar o projeto do Bot usando as tecnologias propostas inicialmente. Ganhamos muito conhecimento ao longo desses dois dias. Escrevemos um whitepaper sobre o projeto e também aplicamos esse conhecimento em outros projetos (ex: Arda).

Foi um ótimo aprendizado.

 

Conclusão

O evento foi fantástico e pode ser resumido em 3 pontos:

  • Perdemos o hackathon: Durante um hackathon, o ótimo é inimigo do bom. Se você participar de um, exponha sua ideia da forma mais criativa possível. Esqueça a engenharia nos bastidores do projeto, pois isso não ganha ponto (ninguém vê).
  • Aprendemos DevOps: Trabalhamos com uma equipe de 2 ITPros e 3 Developers. Vimos na prática como é difícil definir as responsabilidades dentro da equipe, mas conseguimos enxergar o benefício de adotar os processos de Continuous Integration (CI) para Dev e Continuous Delivery (CD) para Infra.
  • DevOps requer investimento: Dividimos o tempo de 3 desenvolvedores entre código e DevOps. No nosso caso, parece que gastamos 75% em DevOps e apenas 25% codificando. Poderíamos ter investido 100% do tempo em código e ignorado nossa “engenharia em DevOps”. Se você quiser fazer DevOps, então saiba que há um preço a se pagar.

Como o evento de Hackathon durou apenas 2 dias (prazo curtíssimo), não conseguimos usufruir dos benefícios do DevOps. Porém, sempre que começamos um projeto, recomendo que haja um investimento de pelo menos 50% em DevOps. Esse tempo aumenta a eficiência dos desenvolvedores e traz retorno em médio e longo prazo.