Guia para iniciantes: como criar um pipeline DevOps

Se você é novo em DevOps, consulte este guia para criar seu primeiro pipeline em cinco etapas.

Guia para iniciantes: como criar um pipeline DevOps

DevOps tornou-se a solução padrão para corrigir processos de desenvolvimento de software lentos, fragmentados ou não funcionais. O problema é que, se você é novo em DevOps e não sabe por onde começar, pode faltar compreensão sobre esses métodos. Este artigo abordará a definição de um pipeline DevOps e fornecerá um guia para sua criação em cinco etapas. Embora este tutorial não seja abrangente, ele deve fornecer uma base para que você comece sua jornada e expanda seu conhecimento no futuro. Mas vamos começar com uma história.

Minha jornada em DevOps

Antes, eu trabalhava na equipe de nuvem da Citi Group, desenvolvendo um aplicativo web Infrastructure-as-a-Service (IaaS) para gerenciar a infraestrutura em nuvem da Citi, mas sempre me interessei em como tornar o processo de desenvolvimento mais eficiente e trazer mudanças culturais positivas para a equipe de desenvolvedores. A resposta eu encontrei em um livro recomendado por Greg Lavender, diretor técnico de arquitetura em nuvem e infraestrutura da Citi. O livro se chamava "Projeto Fênix" (The Phoenix Project), e nele são explicados os princípios do DevOps, sendo lido como um romance.

A tabela no verso do livro mostra com que frequência diferentes empresas implantam seus sistemas em ambientes para o lançamento de versões:

Amazon: 23.000 por dia
Google: 5.500 por dia
Netflix: 500 por dia
Facebook: Uma vez por dia
Twitter: 3 vezes por semana
Uma empresa típica: Uma vez a cada 9 meses

Como são possíveis as frequências da Amazon, Google e Netflix? Tudo porque essas empresas descobriram como implementar um pipeline DevOps quase perfeito.

Estávamos longe disso até implementarmos o DevOps no Citi. Naquela época, minha equipe tinha diferentes ambientes, mas a implantação no servidor de desenvolvimento era completamente manual. Todos os desenvolvedores tinham acesso apenas a um servidor de desenvolvimento baseado no IBM WebSphere Application Server Community Edition. O problema era que o servidor desligava sempre que vários usuários tentavam implantar ao mesmo tempo, então os desenvolvedores precisavam se comunicar sobre suas intenções, o que era bastante doloroso. Além disso, havia problemas com a cobertura de testes de baixo nível do código, processos manuais de implantação complicados e a falta de um sistema para rastrear a implantação de código relacionada a uma determinada tarefa ou história de usuário.

Percebi que era necessário fazer algo e encontrei um colega com mentalidade semelhante. Decidimos colaborar na criação do pipeline DevOps inicial – ele configurou uma máquina virtual e um servidor de aplicativos Tomcat, enquanto eu trabalhava no Jenkins, integrando o Atlassian Jira e o BitBucket, além de melhorar a cobertura de testes de código. Este projeto paralelo foi muito bem-sucedido: conseguimos quase automatizar muitos processos, alcançamos praticamente 100% de disponibilidade do nosso servidor de desenvolvimento, garantimos rastreamento e melhoramos a cobertura de testes de código, além de adicionar a capacidade de vincular branches no Git a tarefas no Jira ou implantações. A maioria das ferramentas que usamos para construir nosso pipeline DevOps tinha código aberto.

Agora eu entendo o quão simples era nosso pipeline DevOps: não usávamos extensões como arquivos Jenkins ou Ansible. No entanto, esse pipeline simples funcionava bem, possivelmente devido ao princípio de Pareto (também conhecido como regra 80/20).

Uma breve introdução ao DevOps e ao pipeline CI/CD

Se você perguntar a várias pessoas: "O que é DevOps?", provavelmente receberá diferentes respostas. DevOps, assim como Agile, evoluiu para abranger várias disciplinas diferentes, mas a maioria das pessoas concorda em alguns pontos: DevOps é uma prática de desenvolvimento de software ou ciclo de vida de desenvolvimento de software (SDLC), cujo princípio central é a mudança na cultura em que desenvolvedores e não desenvolvedores coexistem em um ambiente onde:

As operações que antes eram manuais são automatizadas;
Cada um faz o que sabe fazer melhor;
O número de implantações em um determinado período de tempo aumenta; A capacidade de entrega aumenta;
A flexibilidade do desenvolvimento é aprimorada.

Embora ter as ferramentas de software certas não seja a única coisa necessária para criar um ambiente DevOps, algumas ferramentas são essenciais. Uma ferramenta chave é integração contínua e entrega contínua (CI/CD). Nesse pipeline, os ambientes têm várias etapas (por exemplo, DEV, INT, TST, QA, UAT, STG, PROD), muitas operações são automatizadas, e os desenvolvedores podem escrever código de alta qualidade, alcançar flexibilidade no desenvolvimento e alta frequência de implantações.

Este artigo descreve uma abordagem em cinco etapas para criar um pipeline DevOps, semelhante ao mostrado no próximo diagrama, usando ferramentas de código aberto.

Passo 1: Métodos CI/CD

A primeira coisa que você precisa é de uma ferramenta para CI/CD. O Jenkins, uma ferramenta de código aberto baseada em Java e licenciada sob a MIT, é o meio que popularizou a abordagem DevOps e se tornou o padrão de fato.

Então, o que é Jenkins? Considere-o como um controle remoto mágico que pode se comunicar com vários serviços e ferramentas e organizá-los. Por si só, uma ferramenta CI/CD como o Jenkins é inútil, mas se torna mais poderosa à medida que se conecta a diferentes ferramentas e serviços.

O Jenkins é apenas uma das muitas ferramentas de código aberto para CI/CD que você pode usar para construir um pipeline DevOps.

Jenkins: Creative Commons e MIT
Travis CI: MIT
CruiseControl: BSD
Buildbot: GPL
Apache Gump: Apache 2.0
Cabie: GNU

Veja como os processos DevOps aparecem com uma ferramenta CI/CD:

Guia para iniciantes: como criar um pipeline DevOps

Você tem uma ferramenta CI/CD funcionando em seu localhost, mas no momento você pode fazer pouco com isso. Vamos avançar para a próxima etapa da jornada no mundo DevOps.

Passo 2: Gerenciamento de sistemas de controle de versão

A melhor (e talvez a mais simples) maneira de testar se sua ferramenta CI/CD pode fazer mágica é integrando-a a uma ferramenta de controle de código-fonte (SCM). Por que você precisa de controle de código-fonte? Suponhamos que você esteja desenvolvendo um aplicativo. Sempre que você cria um aplicativo, você programa, e não importa se você está usando Java, Python, C++, Go, Ruby, JavaScript ou qualquer uma das inúmeras linguagens de programação. O código que você escreve é chamado de código-fonte. No início, especialmente quando você está trabalhando sozinho, pode ser que você consiga colocar tudo em um diretório local. Mas quando o projeto cresce e você convida outras pessoas para colaborar, você precisa de um método para evitar conflitos ao compartilhar modificações de forma eficaz. Você também precisa de uma maneira de restaurar versões anteriores, porque fazer backups e copiar/colar neles já está obsoleto. Você (e seus colegas de equipe) precisam de algo melhor.

É aqui que a ferramenta de controle de código-fonte se torna praticamente uma necessidade. Essa ferramenta armazena seu código em repositórios, controla versões e coordena o trabalho dos participantes do projeto.

Embora existam várias ferramentas de controle de código-fonte, o Git é o padrão, e isso é verdade. Eu recomendo fortemente o uso do Git, embora existam outras opções de código aberto, se preferir.

Git: GPLv2 e LGPL v2.1
Subversion: Apache 2.0
Concurrent Versions System (CVS): GNU
Vesta: LGPL
Mercurial: GNU GPL v2+

Assim é um pipeline DevOps com a adição de ferramentas de controle de código-fonte.

Guia para iniciantes: como criar um pipeline DevOps

Uma ferramenta CI/CD pode automatizar os processos de verificação, obtenção de código-fonte e colaboração entre os membros. Não é ruim? Mas como transformar isso em um aplicativo funcional que bilhões de pessoas possam usar e avaliar?

Passo 3: Criando uma ferramenta de automação de builds

Ótimo! Você pode verificar o código e fazer alterações no sistema de controle de versão, além de convidar seus amigos para colaborar no desenvolvimento. Mas você ainda não criou um aplicativo. Para fazer um aplicativo da web, você precisa compilá-lo e empacotá-lo em um formato de pacote implantável ou executá-lo como um arquivo executável. (Observe que linguagens de programação interpretadas, como JavaScript ou PHP, não precisam de compilação).

Use uma ferramenta de automação de builds. Independentemente da ferramenta de automação de builds que você escolher, todas elas têm o mesmo objetivo: compilar o código-fonte em um formato desejado e automatizar a tarefa de limpeza, compilação, teste e implantação em um ambiente específico. As ferramentas de build variarão dependendo da sua linguagem de programação, mas aqui estão algumas opções comuns de código aberto.

Nome
Licença
Linguagem de programação

Maven
Apache 2.0
Java

Ant
Apache 2.0
Java

Gradle
Apache 2.0
Java

Bazel
Apache 2.0
Java

Make
GNU
N/A

Grunt
MIT
JavaScript

Gulp
MIT
JavaScript

Buildr
Apache
Ruby

Rake
MIT
Ruby

A-A-P
GNU
Python

SCons
MIT
Python

BitBake
GPLv2
Python

Cake
MIT
C#

ASDF
Expat (MIT)
LISP

Cabal
BSD
Haskell

Legal! Você pode colocar arquivos de configuração da ferramenta de automação de builds no sistema de controle de versão e permitir que sua ferramenta CI/CD una tudo.

Guia para iniciantes: como criar um pipeline DevOps

Tudo bem, não é? Mas onde você vai implantar seu aplicativo?

Passo 4: Servidor para aplicativos da web

Por enquanto, você tem um arquivo empacotado que pode ser tanto executável quanto instalável. Para que qualquer aplicativo seja realmente útil, ele deve fornecer algum serviço ou interface, mas você precisa de um contêiner para hospedar seu aplicativo.

Um servidor para aplicativos da web é exatamente esse contêiner. O servidor fornece um ambiente onde pode ser definida a lógica do pacote implantável. Além disso, o servidor oferece uma interface e oferece serviços da web, abrindo soquetes para o mundo externo. Você precisa de um servidor HTTP, bem como de um ambiente (como uma máquina virtual) para hospedá-lo. E por enquanto, vamos supor que você aprenderá mais sobre isso depois (embora eu fale sobre contêineres abaixo).

Existem vários servidores de aplicativos da web de código aberto.

Nome
Licença
Linguagem de programação

Tomcat
Apache 2.0
Java

Jetty
Apache 2.0
Java

WildFly
GNU Lesser Public
Java

GlassFish
CDDL & GNU Less Public
Java

Django
3-Clause BSD
Python

Tornado
Apache 2.0
Python

Gunicorn
MIT
Python

Python
MIT
Python

Rails
MIT
Ruby

Node.js
MIT
Javascript

Seu pipeline DevOps está quase pronto para uso. Bom trabalho!

Guia para iniciantes: como criar um pipeline DevOps

Embora você possa parar aqui e lidar com a integração sozinho, a qualidade do código é uma questão importante para os desenvolvedores de aplicativos, e deve ser uma preocupação.

Passo 5: Cobertura de teste de código

A implementação de testes pode ser mais uma exigência pesada, mas os desenvolvedores devem capturar quaisquer erros no aplicativo desde o início e melhorar a qualidade do código para garantir que os usuários finais fiquem satisfeitos. Felizmente, existem várias ferramentas de código aberto para testar seu código e gerar recomendações sobre como melhorar sua qualidade. Melhor ainda, a maioria das ferramentas de CI/CD pode se conectar a essas ferramentas e automatizar o processo.

O teste de código consiste em duas partes: frameworks de teste que ajudam a escrever e executar testes, bem como ferramentas de sugestões que ajudam a melhorar a qualidade do código.

Sistemas de teste de código

Nome
Licença
Linguagem de programação

JUnit
Eclipse Public License
Java

EasyMock
Apache
Java

Mockito
MIT
Java

PowerMock
Apache 2.0
Java

Pytest
MIT
Python

Hypothesis
Mozilla
Python

Tox
MIT
Python

Sistemas de recomendações para melhorar o código

Nome
Licença
Linguagem de programação

Cobertura
GNU
Java

CodeCover
Eclipse Public (EPL)
Java

Coverage.py
Apache 2.0
Python

Emma
Common Public License
Java

JaCoCo
Eclipse Public License
Java

Hypothesis
Mozilla
Python

Tox
MIT
Python

Jasmine
MIT
JavaScript

Karma
MIT
JavaScript

Mocha
MIT
JavaScript

Jest
MIT
JavaScript

Observe que a maioria das ferramentas e frameworks mencionados acima são escritos para Java, Python e JavaScript, já que C++ e C# são linguagens de programação proprietárias (embora o GCC tenha código aberto).

Agora que você implementou ferramentas de cobertura de código com testes, seu pipeline DevOps deve se parecer com o diagrama mostrado no início deste guia.

Passos Adicionais

Contêineres

Como já mencionei, você pode hospedar seu servidor em uma máquina virtual ou servidor, mas os contêineres são uma solução popular.

O que são contêineres? A explicação breve é que uma máquina virtual precisa de um grande volume de memória do sistema operacional, maior que o tamanho do aplicativo, enquanto um contêiner precisa apenas de algumas bibliotecas e configurações para executar o aplicativo. É evidente que a máquina virtual ainda possui áreas de aplicação importantes, mas o contêiner é uma solução leve para hospedagem de aplicativo, incluindo servidores de aplicativos.

Embora existam outras opções de contêineres, os mais populares são o Docker e o Kubernetes.

Docker: Apache 2.0
Kubernetes: Apache 2.0

Ferramentas de automação intermediária

Nosso pipeline DevOps é principalmente voltado para a colaboração na criação e deployment de aplicativos, mas há muitas outras coisas que podem ser feitas com ferramentas DevOps. Uma delas é o uso de ferramentas de Infraestrutura como Código (IaC), que também são conhecidas como ferramentas de automação intermediária. Essas ferramentas ajudam a automatizar a instalação, gerenciamento e outras tarefas para middleware. Por exemplo, uma ferramenta de automação pode extrair aplicativos como servidores de aplicação, banco de dados e ferramentas de monitoramento, com as configurações corretas e implantá-los em servidores de aplicação.

Aqui estão algumas ferramentas de automação intermediária de código aberto:

Ansible: GNU Public
SaltStack: Apache 2.0
Chef: Apache 2.0
Puppet: Apache ou GPL

Guia para iniciantes: como criar um pipeline DevOps

Saiba mais detalhes sobre como obter uma profissão em alta demanda do zero ou elevar suas habilidades e salário, fazendo cursos online pagos da SkillFactory:

mais cursos

Útil

Fonte: habr.com

Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS 🔥 Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS | ProHoster