Quando o aplicativo não funciona, menos ainda quero ouvir a frase "o problema está do seu lado" dos colegas. Como resultado, os usuários sofrem - mas não se importam com qual parte da equipe é responsável pelo colapso. A cultura do DevOps veio apenas para reunir desenvolvimento e suporte e uni-los em torno de uma responsabilidade comum pelo produto final.
Quais práticas estão incluídas no conceito de DevOps e por que são necessárias? O que os engenheiros do DevOps fazem e o que devem fazer? Os especialistas da EPAM respondem a estas e outras perguntas: Kirill Sergeyev, engenheiro de sistemas e evangelista do DevOps, e Igor Boyko, engenheiro de sistemas líder e coordenador de uma das equipes de DevOps da empresa.

Por que preciso do DevOps?
Anteriormente, havia uma barreira entre desenvolvedores e suporte (as chamadas operações). Parece paradoxal, mas eles tinham objetivos e KPIs diferentes, embora fizessem uma coisa comum. O objetivo do desenvolvimento era implementar os requisitos de negócios o mais rápido possível e adicioná-los a um produto em funcionamento. O suporte foi responsável por garantir que o aplicativo funcionasse de maneira estável - e quaisquer alterações colocam a estabilidade em risco. Existe um conflito de interesses - o DevOps apareceu para resolvê-lo.
O que é o DevOps?
A pergunta é boa - e controversa: finalmente, o mundo ainda não concordou com isso. A EPAM acredita que o DevOps combina tecnologia, processos e uma cultura de interação dentro da equipe. Essa associação visa a entrega contínua de valores aos usuários finais.
Kirill Sergeyev : “Os desenvolvedores escrevem o código, os testadores o verificam e os administradores instalam o produto final no ambiente de produção. Por um longo tempo, essas partes da equipe ficaram um pouco fragmentadas e, em seguida, surgiu a idéia de combiná-las em um processo comum. Foi assim que as práticas de DevOps apareceram. ”
Chegou o dia em que desenvolvedores e engenheiros de sistemas se interessaram pelo trabalho um do outro. A barreira entre produção e suporte começou a desaparecer. Foi assim que o DevOps surgiu, que inclui práticas, cultura e trabalho em equipe.

Qual é a essência da cultura DevOps?
O fato de a responsabilidade pelo resultado final recair sobre cada um dos membros da equipe. O mais interessante e difícil da filosofia do DevOps é entender que uma pessoa em particular não é apenas responsável por seu estágio de trabalho, mas também por como todo o produto funcionará. O problema não se encontra de nenhum lado - é comum e cada membro da equipe ajuda a resolvê-lo.
O ponto mais importante da cultura DevOps é resolver o problema, e não apenas aplicar a prática do DevOps. Além disso, essas práticas não são implementadas "do lado de alguém", mas em todo o produto. O projeto não precisa de um engenheiro de DevOps sozinho - ele precisa de uma solução para o problema, e a função de um engenheiro de DevOps pode ser distribuída por vários membros da equipe com diferentes especializações.
O que são práticas de DevOps?
As práticas de DevOps cobrem todos os estágios do ciclo de vida do software.
Igor Boyko : “O caso ideal é quando começamos a usar as práticas de DevOps logo no início do projeto. Juntamente com os arquitetos, planejamos que tipo de aplicativo a paisagem arquitetônica terá, onde estará localizada e como dimensionar, escolhemos a plataforma. Agora a arquitetura de microsserviços está na moda - para isso escolhemos um sistema de orquestração: precisamos gerenciar cada elemento do aplicativo individualmente e atualizá-lo independentemente dos outros. Outra prática é "infraestrutura como código". Esse é o nome da abordagem na qual a infraestrutura do projeto é criada e gerenciada usando código, em vez de através da interação direta com os servidores.
Em seguida, passamos à fase de desenvolvimento. Uma das maiores práticas aqui é a criação de CI / CD: você precisa ajudar os desenvolvedores a integrar as mudanças no produto rapidamente, em pequenas porções, com mais frequência e sem problemas. O CI / CD abrange a verificação de código, preenchendo o assistente na base de código e implantando o aplicativo nos ambientes de teste e produção.
Nos estágios de CI / CD, o código passa por portas de qualidade. Com a ajuda deles, eles verificam se o código que saiu da estação de trabalho do desenvolvedor atende aos critérios de qualidade especificados. Teste de unidade e interface do usuário é adicionado aqui. Para uma implantação rápida, indolor e focada do produto, você pode escolher o tipo apropriado de implantação.
As práticas de DevOps têm um lugar no estágio de suporte ao produto acabado. Eles são usados para monitoramento, feedback, segurança, implementação de mudanças. O DevOps analisa todas essas tarefas em termos de melhorias contínuas. Minimizamos operações repetitivas, automatizamos-as. Isso também inclui migrações, extensões de aplicativos e suporte à saúde. ”
Por que as práticas de DevOps são úteis?
Se escrevêssemos um livro sobre práticas modernas de DevOps, haveria três pontos em sua primeira página: automação, liberação acelerada e feedback rápido do usuário.
Kirill Sergeev : “O primeiro é a automação. Podemos automatizar todas as interações na equipe: escrevemos o código - implementado - verificado - instalado - coletado feedback - retornado ao início. Tudo isso é automático.
O segundo é acelerar o lançamento e até simplificar o desenvolvimento. É sempre importante para o cliente que o produto entre no mercado o mais rápido possível e comece a se beneficiar mais cedo do que os análogos dos concorrentes. O processo de entrega do produto pode ser infinitamente aprimorado: reduza o tempo, adicione marcas de controle adicionais, aprimore o monitoramento.
Terceiro, é acelerar o feedback do usuário. Se ele tiver comentários, podemos fazer correções imediatamente e atualizar imediatamente o aplicativo. ”

Como os conceitos “engenheiro de sistema”, “engenheiro de construção” e “engenheiro de DevOps” se relacionam?
Eles se cruzam, mas pertencem a áreas ligeiramente diferentes.
Engenheiro de Sistemas na EPAM é uma posição. Eles vêm em diferentes níveis: do júnior ao especialista chefe.
Um engenheiro de construção provavelmente tem uma função que pode ser desempenhada em um projeto. Agora, este é o nome das pessoas responsáveis pelo CI / CD.
Um engenheiro de DevOps é um especialista que implementa práticas de DevOps em um projeto.
Para resumir tudo isso, acontece algo assim: uma pessoa na posição de engenheiro de sistema desempenha o papel de engenheiro de construção no projeto e está envolvida na implementação das práticas de DevOps.
O que exatamente um engenheiro de DevOps está fazendo?
Os engenheiros do DevOps reúnem todas as partes que compõem o projeto. Eles conhecem as especificidades do trabalho de programadores, testadores, administradores de sistemas e ajudam a simplificar seu trabalho. Eles entendem as necessidades e requisitos do negócio, seu papel no processo de desenvolvimento - e constroem o processo levando em consideração os interesses do cliente.
Conversamos muito sobre automação - os engenheiros do DevOps fazem isso primeiro. Esse é um ponto muito amplo, que, entre outras coisas, inclui a preparação do meio ambiente.
Kirill Sergeyev : “Antes de introduzir atualizações no produto, elas precisam ser testadas em um ambiente de terceiros. Está sendo preparado pelos engenheiros do DevOps. Eles instilam a cultura do DevOps como um todo no projeto: eles introduzem as práticas do DevOps em todas as camadas de seus projetos. Esses três princípios: automação, simplificação, aceleração - eles trazem para todos os lugares onde podem chegar ".
O que um engenheiro de DevOps deve saber?
Em geral, ele deve ter conhecimento de diferentes áreas: programação, trabalho com sistemas operacionais, bancos de dados, sistemas e configurações de compilação. A capacidade de trabalhar com infraestrutura de nuvem, orquestração e sistemas de monitoramento é adicionada a eles.
1. Linguagens de programaçãoOs engenheiros do DevOps conhecem várias linguagens básicas de automação e podem, por exemplo, dizer ao programador: “Vamos lá, você não instalará o código manualmente, mas com a ajuda do nosso script que automatiza tudo? Vamos preparar um arquivo de configuração para ele, será conveniente lê-lo para você e para nós - e podemos alterá-lo a qualquer momento. E veremos quem, quando e por que faz alterações. ”
Um engenheiro do DevOps pode aprender um ou mais desses idiomas: Python, Groovy, Bash, Powershell, Ruby, Go. Não é necessário conhecê-los em um nível profundo - apenas os princípios básicos de sintaxe, princípios de POO, capacidade de escrever scripts simples para automação.
2. Sistemas OperacionaisO engenheiro do DevOps deve entender em qual servidor o produto será instalado, em que ambiente será lançado e com quais serviços ele irá interagir. Você pode optar por se especializar na família Windows ou Linux.
3. Sistemas de controle de versãoSem o conhecimento do sistema de controle de versão, o engenheiro do DevOps não está em lugar algum. O Git é um dos sistemas mais populares no momento.
4. Provedores de nuvemAWS, Google, Azure - especialmente se estivermos falando sobre a direção do Windows.
Kirill Sergeyev : “Os provedores de nuvem nos fornecem servidores virtuais que se encaixam perfeitamente nas faixas de CI / CD.
A instalação de dez servidores físicos requer cerca de cem operações manuais. Cada servidor deve ser iniciado manualmente, instalado e configurado o sistema operacional desejado, instalar nosso aplicativo nesses dez servidores e, em seguida, verificar tudo dez vezes. Os serviços em nuvem substituem esse procedimento por dez linhas de código, e um bom engenheiro de DevOps deve ser capaz de lidar com eles. Então, ele economiza tempo, esforço e dinheiro - tanto para o cliente quanto para a empresa. ”
5. Sistemas de orquestração: Docker e KubernetesKirill Sergeyev : “Servidores virtuais são divididos em contêineres, em cada um dos quais podemos instalar nosso aplicativo. Quando há muitos contêineres, você precisa gerenciá-los: um para ligar, outro para desligar, um lugar para fazer backups. Isso está se tornando um assunto bastante complicado para o qual é necessário um sistema de orquestração.
Anteriormente, cada aplicativo estava envolvido em um servidor separado - qualquer alteração em sua operação poderia afetar a saúde do aplicativo. Graças aos contêineres, os aplicativos ficam isolados e são executados separadamente - cada um em sua própria máquina virtual. Se ocorrer uma falha, não há necessidade de perder tempo procurando a causa. É mais fácil destruir o contêiner antigo e adicionar um novo. "
6. Sistemas de configuração: Chef, Ansible, PuppetQuando você precisa manter uma frota de servidores, precisa executar muitas das mesmas operações. É longo e difícil, e mesmo o trabalho manual aumenta a chance de erro. É aqui que os sistemas de configuração são salvos. Com a ajuda deles, eles criam um script que é conveniente para ler por programadores, engenheiros de DevOps e administradores de sistema. Esse script ajuda a executar as mesmas operações nos servidores automaticamente. Portanto, operações manuais (e, portanto, erros) se tornam menos.
Que carreira o engenheiro de DevOps pode construir?
Você pode desenvolver horizontalmente e verticalmente.
Igor Boyko : “Do ponto de vista do desenvolvimento horizontal, os engenheiros de DevOps agora têm as maiores perspectivas. Tudo muda constantemente, e você pode desenvolver habilidades de várias maneiras: dos sistemas de controle de versão ao monitoramento, do gerenciamento de configuração aos bancos de dados.
Você pode se tornar um arquiteto de sistemas se um funcionário estiver interessado em entender como o aplicativo funciona em todas as etapas do seu ciclo de vida - do desenvolvimento ao suporte. ”
Como se tornar um engenheiro de DevOps?
- Leia os livros do Phoenix Project e o DevOps Handbook. Esses são os verdadeiros pilares da filosofia do DevOps, sendo o primeiro um romance artístico.
- Aprenda a tecnologia da lista acima: em seus próprios cursos ou online.
- Entre como engenheiro do DevOps para um projeto de código aberto.
- Pratique e ofereça práticas de DevOps em seus projetos pessoais e de trabalho.