Guia para iniciantes: criando um pipeline DevOps

Se você é novo no DevOps, dê uma olhada neste guia de cinco etapas para criar seu primeiro pipeline.

Guia para iniciantes: criando um pipeline DevOps

DevOps se tornou a solução padrão para corrigir processos de desenvolvimento de software lentos, desarticulados ou quebrados. O problema é que se você é novo no DevOps e não sabe por onde começar, pode não entender essas técnicas. Este artigo discutirá a definição de um pipeline DevOps e também fornecerá instruções em cinco etapas para criá-lo. Embora este tutorial não seja exaustivo, ele deve fornecer uma base para iniciar sua jornada e expandir seu conhecimento no futuro. Mas vamos começar com a história.

Minha jornada DevOps

Anteriormente, trabalhei na equipe de nuvem do Citi Group desenvolvendo um aplicativo web de infraestrutura como serviço (IaaS) para gerenciar a infraestrutura de nuvem do Citi, mas sempre estive interessado em como tornar o processo de desenvolvimento mais eficiente e trazer mudanças culturais positivas para o equipe de desenvolvimento. Encontrei a resposta em um livro recomendado por Greg Lavender, CTO de Arquitetura e Infraestrutura em Nuvem do Citi. O livro se chamava The Phoenix Project (O Projeto Fênix) e explica os princípios do DevOps, mas parece um romance.

A tabela no final do livro mostra com que frequência diferentes empresas implantam seus sistemas em um ambiente de lançamento:

Amazônia: 23 por dia
Google: 5 por dia
Netflix: 500 por dia
Facebook: uma vez por dia
Twitter: 3 vezes por semana
Empresa típica: Uma vez a cada 9 meses

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

Estávamos longe disso até implementarmos o DevOps no Citi. Naquela época, minha equipe tinha ambientes diferentes, mas a implantação no servidor de desenvolvimento era totalmente manual. Todos os desenvolvedores tiveram acesso a apenas 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 tinham que comunicar suas intenções uns aos outros, o que era bastante chato. Além disso, havia problemas com a cobertura de código de teste de baixo nível, processos de implantação manual complicados e a incapacidade de rastrear a implantação de código associado a uma tarefa ou história de usuário específica.

Percebi que algo precisava ser feito e encontrei um colega com a mesma opinião. Decidimos colaborar na construção do pipeline inicial de DevOps - ele configurou uma máquina virtual Tomcat e um servidor de aplicativos enquanto eu trabalhava no Jenkins, integrei Atlassian Jira e BitBucket e trabalhei na cobertura de código de teste. Esse projeto paralelo foi muito bem-sucedido: automatizamos quase completamente muitos processos, alcançamos quase 100% de tempo de atividade em nosso servidor de desenvolvimento, fornecemos rastreamento e melhor cobertura de teste do código e adicionamos a capacidade de vincular ramificações do Git a problemas ou implantações do Jira. A maioria das ferramentas que usamos para construir nosso pipeline de DevOps eram de código aberto.

Agora entendo como nosso pipeline DevOps era simples: não usamos extensões como arquivos Jenkins ou Ansible. No entanto, este pipeline simples funcionou bem, talvez devido ao princípio de Pareto (também conhecido como regra 80/20).

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

Se você perguntar a várias pessoas “O que é DevOps?”, provavelmente obterá várias respostas diferentes. O DevOps, assim como o Agile, evoluiu para abranger muitas disciplinas diferentes, mas a maioria das pessoas concordará em algumas coisas: DevOps é uma prática de desenvolvimento de software ou ciclo de vida de desenvolvimento de software (SDLC) cujo princípio central é mudar a cultura na qual desenvolvedores e não- os desenvolvedores existem em um ambiente no qual:

As operações que antes eram realizadas manualmente foram automatizadas;
Cada um faz o que faz de melhor;
O número de implementações durante um determinado período de tempo aumenta; Aumentos de rendimento;
Maior flexibilidade de desenvolvimento.

Embora ter as ferramentas de software certas não seja a única coisa que você precisa para criar um ambiente DevOps, algumas ferramentas são essenciais. Uma ferramenta fundamental é a integração contínua e a implantação contínua (CI/CD). Nesse pipeline, os ambientes têm diferentes estágios (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, obter agilidade de desenvolvimento e altas taxas de implantação.

Este artigo descreve uma abordagem em cinco etapas para criar um pipeline de DevOps como o mostrado no diagrama a seguir usando ferramentas de código aberto.

Etapa 1: Métodos CI/CD

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

Então, o que é Jenkins? Pense nisso como uma espécie de controle remoto universal mágico que pode conversar e organizar vários serviços e ferramentas. Por si só, uma ferramenta de CI/CD como o Jenkins é inútil, mas se torna mais poderosa à medida que se conecta a diferentes ferramentas e serviços.

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

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

Esta é a aparência dos processos DevOps com uma ferramenta CI/CD:

Guia para iniciantes: criando um pipeline DevOps

Você tem uma ferramenta CI/CD em execução no seu host local, mas não há muito que você possa fazer no momento. Vamos passar para a próxima etapa da jornada do DevOps.

Etapa 2: gerenciar sistemas de controle de origem

A melhor (e talvez mais fácil) maneira de verificar se sua ferramenta CI/CD pode fazer sua mágica é integrá-la a uma ferramenta de controle de código-fonte (SCM). Por que você precisa de controle de origem? Digamos que você esteja desenvolvendo um aplicativo. Sempre que você cria um aplicativo, você está programando, e não importa se usa Java, Python, C++, Go, Ruby, JavaScript ou qualquer uma das zilhões de linguagens de programação. O código que você escreve é ​​chamado de código-fonte. No começo, especialmente quando você está trabalhando sozinho, provavelmente não há problema em colocar tudo em um diretório local. Mas à medida que o projeto se torna maior e você convida outras pessoas para colaborar, você precisa de uma maneira de evitar conflitos e, ao mesmo tempo, compartilhar as modificações de maneira eficaz. Você também precisa de uma maneira de restaurar versões anteriores, porque criar backups e copiar/colar neles está se tornando obsoleto. Você (e seus companheiros de equipe) precisam de algo melhor.

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

Embora existam muitas ferramentas de controle de origem, o Git é o padrão, e com razão. Eu recomendo fortemente o uso do Git, embora existam outras opções de código aberto, se você preferir.

Git: GPLv2 e LGPL v2.1
Subversão: Apache 2.0
Sistema de versões simultâneas (CVS): GNU
Vesta: LGPL
Mercurial: GNU GPL v2+

Esta é a aparência de um pipeline DevOps com a adição de controles de código-fonte.

Guia para iniciantes: criando um pipeline DevOps

Uma ferramenta CI/CD pode automatizar os processos de revisão, aquisição de código-fonte e colaboração entre membros. Nada mal? Mas como transformá-lo em um aplicativo funcional para que bilhões de pessoas possam usá-lo e apreciá-lo?

Etapa 3: Crie uma ferramenta de automação de construção

Ótimo! Você pode revisar o código e fazer alterações no controle de origem e convidar seus amigos para colaborar no desenvolvimento. Mas você ainda não criou um aplicativo. Para criar um aplicativo da web, ele deve ser compilado e empacotado em um formato de lote implantável ou executado como um arquivo executável. (Observe que uma linguagem de programação interpretada como JavaScript ou PHP não precisa ser compilada).

Use uma ferramenta de automação de construção. Não importa qual ferramenta de automação de construção você decida usar, todas elas têm o mesmo objetivo: construir o código-fonte em algum formato desejado e automatizar a tarefa de limpeza, compilação, teste e implantação em um ambiente específico. As ferramentas de construção variam 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

Formiga
Apache 2.0
Java

Gradle
Apache 2.0
Java

Bazel
Apache 2.0
Java

Realizar
GNU
N/D

Grunhido
MIT
JavaScript

Gole
MIT
JavaScript

Construtor
apache
Ruby

Ancinho
MIT
Ruby

AAP
GNU
Python

SCons
MIT
Python

BitBake
GPLv2
Python

Bolo
MIT
C#

ASDF
Expatriado (MIT)
LISP

Cabala
BSD
Haskell

Ótimo! Você pode colocar os arquivos de configuração da ferramenta de automação de compilação em seu sistema de controle de origem e deixar sua ferramenta CI/CD juntar tudo.

Guia para iniciantes: criando um pipeline DevOps

Está tudo bem, não está? Mas onde implantar seu aplicativo?

Etapa 4: Servidor de aplicativos da Web

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

Um servidor de aplicativos da web é exatamente um desses contêineres. O servidor fornece um ambiente no qual a lógica do pacote que está sendo implementado pode ser definida. O servidor também fornece uma interface e oferece serviços web expondo os soquetes ao mundo exterior. Você precisa de um servidor HTTP, bem como de algum ambiente (como uma máquina virtual) para instalá-lo. Por enquanto, vamos supor que você aprenderá mais sobre isso (embora eu aborde os 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

Pontão
Apache 2.0
Java

Vôo selvagem
GNU Menor Público
Java

Peixe de vidro
CDDL e GNU menos públicos
Java

Django
3-Cláusula BSD
Python

Tornado
Apache 2.0
Python

gunicórnio
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: criando um pipeline DevOps

Embora você possa parar por aí e cuidar da integração sozinho, a qualidade do código é uma coisa importante para um desenvolvedor de aplicativos se preocupar.

Etapa 5: cobertura de teste de código

A implementação de testes pode ser outro requisito complicado, mas os desenvolvedores devem detectar quaisquer bugs no aplicativo antecipadamente e melhorar a qualidade do código para garantir que os usuários finais estejam satisfeitos. Felizmente, existem muitas ferramentas de código aberto para testar seu código e fazer recomendações para melhorar sua qualidade. O que é ainda melhor é que 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: estruturas de teste de código que ajudam a escrever e executar testes e ferramentas de sugestão que ajudam a melhorar a qualidade do seu código.

Sistemas de teste de código

Nome
Licença
Linguagem de programação

JUnit
Licença Pública do Eclipse
Java

EasyMockGenericName
apache
Java

mockito
MIT
Java

PowerMockName
Apache 2.0
Java

Pytest
MIT
Python

Hipótese
Mozilla
Python

Tox
MIT
Python

Sistemas de recomendação para melhoria de código

Nome
Licença
Linguagem de programação

Cobertura
GNU
Java

CodeCover
Eclipse Público (EPL)
Java

Cobertura.py
Apache 2.0
Python

Emma
Licença Pública Comum
Java

JaCoCo
Licença Pública do Eclipse
Java

Hipótese
Mozilla
Python

Tox
MIT
Python

Jasmim
MIT
JavaScript

Carma
MIT
JavaScript

ágata
MIT
JavaScript

Brincadeira
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 GCC seja de código aberto).

Agora que você implementou ferramentas de cobertura de teste, seu pipeline de DevOps deverá ser semelhante ao diagrama mostrado no início deste tutorial.

Etapas adicionais

Containers

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

O que são contêineres? A breve explicação é que uma máquina virtual precisa de uma enorme quantidade de memória do sistema operacional, excedendo o tamanho da aplicação, enquanto um contêiner precisa apenas de algumas bibliotecas e configurações para executar a aplicação. Obviamente, ainda existem usos importantes para uma máquina virtual, mas um contêiner é uma solução leve para hospedar um aplicativo, incluindo um servidor de aplicativos.

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

Docker: Apache 2.0
Kubernetes: Apache 2.0

Ferramentas de automação intermediárias

Nosso pipeline de DevOps concentra-se principalmente na criação e implantação colaborativa de aplicativos, mas há muitas outras coisas que podem ser feitas com ferramentas de DevOps. Uma delas é a utilização de ferramentas de Infraestrutura como Código (IaC), também conhecidas como ferramentas de automação de middleware. Essas ferramentas ajudam a automatizar a instalação, o gerenciamento e outras tarefas de middleware. Assim, por exemplo, uma ferramenta de automação pode extrair aplicativos como um servidor de aplicativos web, um banco de dados e uma ferramenta de monitoramento com as configurações corretas e implantá-los no servidor de aplicativos.

Aqui estão algumas ferramentas de automação de middleware de código aberto:

Ansible: GNU Público
SaltStack: Apache 2.0
Chef: Apache 2.0
Fantoche: Apache ou GPL

Guia para iniciantes: criando um pipeline DevOps

Descubra detalhes sobre como conseguir uma profissão procurada do zero ou subir de nível em termos de habilidades e salário fazendo cursos online pagos da SkillFactory:

mais cursos

útil

Fonte: habr.com

Adicionar um comentário