DevOps: ferramental é fundamental
Hoje falaremos um pouco sobre DevOps, um assunto que estréia essa categoria aqui no nosso blog.
Antes de falar de ferramentas, é válido colocar aqui uma visão do que seria DevOps, para que todos, independente do grau de conhecimento possam compreender. DevOps é a junção de Desenvolvimento (Dev) com Operação (Ops), abrangendo o que um sistema precisa para ser disponibilizado para seus usuários.
Essa história nasceu muito ligada à ALM (Application Lifecycle Management), que remete ao ciclo de vida de um software. Vamos pensar que um sistema web nasce de uma idéia, é feito o planejamento, depois chega para um time de desenvolvedores codificar. Começa aí o ciclo de vida dessa aplicação. Depois de desenvolvida, alguém precisa criar um ambiente (servidores, processadores, memória, etc). Precisam ser instalados os requisitos para funcionamento desse sistema, realizar o deploy dele, configurar variáveis, DNS (www.algumacoisa.com.br), enfim. Depois disso tudo, temos um sistema publicado. E esse caminho todo é DevOps, mas quando ele acontece de forma automática, em formato de pipeline. Falamos aqui de agilidade.
Daí você se pergunta, como automatizar isso? A gente explica.
Quando se termina uma release de um sistema, queremos publicá-lo para que seja testado e após fique disponível de forma segura para os usuários, correto? Pois bem, esse já é um pipeline, onde vamos obter o código da aplicação, compilar, gerar um artefato. Este artefato pode ser um diretório de binários, uma imagem de container docker, um arquivo java (.war, .jar) ou qualquer outro. Temos até aqui 2 passos de um pipeline, um de obter os fontes e um de compilar esses fontes (criar um container poderia aqui ser um terceiro).
Mas queremos validar as coisas, então podemos acoplar nesse pipeline um passo de code review ou revisão de código. Podemos também fazer um scan de segurança nessa aplicação antes de fazer o deploy. E também realizarmos testes automatizados, mitigando que bugs sejam enviados para produção.
Mas ainda não respondi a pergunta. Como?
Vejam essa tabela periódica (não tem a ver com química):
Já deixo aqui o link da tabela interativa: https://digital.ai/devops-tools-periodic-table
Como podemos ver, temos muitas ferramentas nessa tabela. Calma, você não precisa saber todas para ter um skill de DevOps, mas precisa sim elencar as que vão atender ao seu cenário.
Vamos exemplificar pensando em uma aplicação de backend, uma API, que tem regras de negócio, conexão com banco de dados e outras funções. Precisamos publicar essa API em uma nuvem. Aí começam as ferramentas que viabilizam isso. Uma primeira, poderia ser o Terraform, que vai provisionar um servidor ou um serviço de publicação de containers, como um cluster kubernetes (falaremos mais em próximos posts). Uma vez provisionado, podemos usar um gestor de configuração de ambiente, que pode instalar algo em um servidor, lembrando que para serviços de cloud pré-configurados, talvez isso não seja necessário.
O seu pipeline precisa então de uma ferramenta que orquestre esses passos. Pode ser o Jenkins, o Gitlab CI, o Azure DevOps (que não obrigatoriamente precisa ser no Azure) ou o AWS CodeBuild. Essa ferramenta obtem os códigos fontes e nessa ocasião podemos incluir um passo para análise do código, usando ferramentas SAST (de análise estática de código), por exemplo o Sonarqube, Veracode, etc. Após essa análise e tendo um resultado satisfatório, podemos seguir então com a compilação, o build, construir uma imagem de container docker e subir para validarmos também de forma automática. Ferramentas DAST (de análise dinâmica), fazem a validação da aplicação em tempo de execução. Ferramentas como OWASP Zap ajudam nessa etapa. Testes automatizados podem ser realizados também nessa hora, sendo executados dentro do pipeline.
Feitas as validações automatizadas e com resultados satisfatórios, podemos seguir com o deploy. Entram aí ferramentas que podem gerenciar a configuração do ambiente, se ele é de homologação ou produção, por exemplo, usando ferramental como Puppet e Chef, ou setando variáveis com Ansible, enfim, temos muitas opções para isso.
Vejam que esse processo, contemplado em um pipeline, é orquestrado por uma ferramenta também e utiliza outras diversas ferramentas para cumprir seu roadmap. Vale lembrar que os provedores de nuvem disponibilizam os chamados CLI (Command line interface), que viabilizam a gestão de recursos em nuvem por linhas de comando. Vale buscar mais informações sobre isso.
Falamos um pouco, ainda que muito resumidamente, desse acoplamento de ferramentas para compor um processo automático de deploy. Isso é o DevOps.
Tocaremos nesse assunto em posts futuros. Bora automatizar?
Lembrando que a Dopster pode assessorar sua empresa nessa questão. Fale com a gente.
Até a próxima!