Quando um aplicativo não funciona, a última coisa que você deseja ouvir dos colegas é a frase "o problema está do seu lado". No final, são os usuários que sofrem – e eles não se importam qual parte da equipe é responsável pela falha. A cultura DevOps surgiu exatamente para unir desenvolvimento e suporte e congregá-los em torno da responsabilidade compartilhada 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 DevOps fazem e quais habilidades devem ter? Especialistas da EPAM respondem a estas e outras perguntas: Kirill Sergeev, engenheiro de sistemas e evangelista DevOps, e Igor Boyko, engenheiro de sistemas sênior e coordenador de uma das equipes DevOps da empresa.

Por que DevOps é necessário?
Antigamente, havia uma barreira entre desenvolvedores e suporte (o chamado operations). É paradoxal, mas eles tinham objetivos e KPIs diferentes, embora estivessem trabalhando na mesma missão. O objetivo do desenvolvimento era atender às demandas de negócios o mais rápido possível e integrá-las no produto em funcionamento. O suporte era responsável pela operação estável do aplicativo – e qualquer mudança colocava essa estabilidade em risco. Havia um conflito de interesses – o DevOps surgiu para resolvê-lo.
O que é DevOps?
A pergunta é boa – e debatida: ainda não há um consenso a respeito no mundo. Na EPAM, acredita-se que o DevOps combina tecnologias, processos e a cultura de interação dentro da equipe. Essa combinação visa a entrega contínua de valor aos usuários finais.
Kirill Sergeev: "Os desenvolvedores escrevem o código, os testadores o verificam e os administradores implementam o produto final no ambiente de produção. Durante muito tempo, essas partes da equipe estavam um tanto dissociadas, até que surgiu a ideia de unificá-las em um processo comum. Assim, surgiram as práticas DevOps."
Chegou o dia em que desenvolvedores e engenheiros de sistemas se interessaram pelo trabalho uns dos outros. A barreira entre produção e suporte começou a se dissolver. Assim nasceu o DevOps, que inclui práticas, cultura e ordem de interação na equipe.

Qual é a essência da cultura DevOps?
A responsabilidade pelo resultado final recai sobre cada membro da equipe. O aspecto mais interessante e desafiador da filosofia DevOps é entender que uma pessoa não está apenas responsável pela sua parte do trabalho, mas sim pela forma como todo o produto funcionará. O problema não está de um lado ou de outro – ele é compartilhado, e cada membro da equipe contribui para sua resolução.
A posição mais importante da cultura DevOps é resolver problemas, e não apenas aplicar práticas DevOps. Além disso, essas práticas não são implementadas "de um lado qualquer", mas sim em todo o produto. O projeto não precisa apenas de um engenheiro DevOps isolado – ele precisa de uma solução para o problema, e a função do engenheiro DevOps pode ser distribuída entre vários membros da equipe com diferentes especializações.
Quais são as práticas DevOps?
As práticas DevOps abrangem todas as etapas do ciclo de vida de software.
Igor Boiko: "O cenário ideal é começarmos a usar práticas DevOps logo na fase de iniciação do projeto. Juntamente com os arquitetos, planejamos qual será a arquitetura do aplicativo, onde ele será hospedado e como escalar, e escolhemos a plataforma. Atualmente, a arquitetura de microserviços está em alta – para ela, escolhemos um sistema de orquestração: é necessário ser capaz de gerenciar cada elemento do aplicativo de forma independente e atualizá-lo sem afetar os outros. Outra prática é a 'infraestrutura como código'. Isso se refere a um método em que a infraestrutura do projeto é criada e gerenciada através de código, e não por meio de interação direta com os servidores."
Em seguida, passamos para a fase de desenvolvimento. Aqui, uma das principais práticas é a construção do CI/CD: precisamos ajudar os desenvolvedores a integrar mudanças no produto de forma rápida, em pequenas porções, com mais frequência e sem dor. O CI/CD cobre tanto a verificação do código quanto a incorporação do master na base de código e a implantação do aplicativo em ambientes de teste e produção.
Nas etapas do CI/CD, o código passa por quality gates. Com eles, verificamos se o código que saiu da estação de trabalho do desenvolvedor atende aos critérios de qualidade estabelecidos. Aqui, são incluídos testes unitários e de UI. Para uma implantação rápida, sem dor e focada, é possível escolher o tipo de implantação mais adequado.
As práticas de DevOps têm um lugar na fase de suporte de um produto já desenvolvido. Elas são usadas para monitoramento, feedback, segurança e implementação de mudanças. Para todas essas tarefas, o enfoque do DevOps é sempre em melhorias contínuas. Minimizamos operações repetitivas e as automatizamos. Isso também inclui migrações, expansão de aplicações e suporte ao funcionamento.
Quais são os benefícios das práticas de DevOps?
Se fôssemos escrever um manual sobre práticas modernas de DevOps, na primeira página estariam três pontos: automação, aceleração do lançamento e feedback rápido dos usuários.
Kirill Sergeev: "Primeiro, é a automação. Podemos automatizar todas as interações na equipe: escrevemos o código – fazemos a liberação – verificamos – instalamos – coletamos feedback – retornamos ao início. Tudo isso é feito automaticamente.
O segundo ponto é a aceleração do lançamento e mesmo a simplificação do desenvolvimento. Para o cliente, é sempre importante que o produto chegue ao mercado o mais rápido possível e comece a trazer benefícios antes que os concorrentes. O processo de entrega do produto pode ser constantemente melhorado: reduzindo o tempo, adicionando pontos de controle adicionais, aperfeiçoando o monitoramento.
O terceiro ponto é a aceleração do feedback do usuário. Se ele tiver comentários, podemos imediatamente fazer ajustes e atualizar o aplicativo.

Como se relacionam os conceitos de "engenheiro de sistemas", "engenheiro de build" e "engenheiro de DevOps"?
Eles se sobrepõem, mas se referem a áreas um pouco diferentes.
O engenheiro de sistemas na EPAM é uma posição. Eles podem variar em diferentes níveis: de júnior a especialista chefe.
O engenheiro de build é mais uma função que pode ser desempenhada em um projeto. Atualmente, esse termo é usado para se referir a pessoas responsáveis por CI/CD.
Um engenheiro de DevOps é um especialista que implementa práticas de DevOps em um projeto.
Se resumirmos tudo isso, temos aproximadamente o seguinte: uma pessoa na posição de engenheiro de sistemas atua em um projeto como engenheiro de build e se ocupa da implementação de práticas de DevOps.
O que exatamente faz um engenheiro de DevOps?
Os engenheiros de DevOps reúnem todas as partes que compõem um projeto. Eles conhecem a especificidade do trabalho dos programadores, testadores e administradores de sistemas, e ajudam a simplificar seu trabalho. Eles compreendem as necessidades e exigências do negócio, seu papel no processo de desenvolvimento, e organizam o processo levando em consideração os interesses do cliente.
Falamos muito sobre automação – ela é o foco principal dos engenheiros de DevOps. Este é um ponto muito abrangente, que inclui, entre outras coisas, a preparação do ambiente.
Kirill Sergeev: "Antes de implementar atualizações no produto, elas precisam ser testadas em um ambiente externo. Este é preparado pelos engenheiros de DevOps. Eles também promovem a cultura DevOps no projeto como um todo: implementam práticas DevOps em todas as camadas de seus projetos. Esses três princípios: automação, simplificação e aceleração – eles os trazem para qualquer lugar que conseguem alcançar."
O que um engenheiro de DevOps deve saber?
Em essência, ele deve ter conhecimentos em diferentes áreas: programação, trabalho com sistemas operacionais, bancos de dados, sistemas de construção e configurações. A isso se acrescenta a habilidade de trabalhar com infraestrutura em nuvem, sistemas de orquestração e monitoramento.
1. Linguagens de programação
Os engenheiros de DevOps conhecem várias linguagens básicas para automação e podem, por exemplo, dizer ao programador: "Vamos fazer a instalação do código não manualmente, mas com a ajuda do nosso script, que automatiza tudo? Para isso, prepararemos um arquivo de configuração, que será fácil de ler tanto para você quanto para nós – e poderemos alterá-lo a qualquer momento. Além disso, poderemos ver quem, quando e por que faz alterações nele."
Um engenheiro de DevOps pode aprender uma ou várias dessas linguagens: Python, Groovy, Bash, Powershell, Ruby, Go. Não é necessário conhecê-las a fundo – o conhecimento dos fundamentos da sintaxe, dos princípios de POO e a capacidade de escrever scripts simples para automação são suficientes.
2. Sistemas operacionais
Um engenheiro de DevOps deve entender em qual servidor o produto será instalado, em qual ambiente será executado e com quais serviços interagirá. É possível escolher uma especialização em Windows ou no núcleo Linux.
3. Sistemas de controle de versões
Sem conhecimentos em sistemas de controle de versões, um engenheiro de DevOps não vai longe. Git é um dos sistemas mais populares no momento.
4. Provedores de nuvem
AWS, Google, Azure – especialmente se estamos falando da linha Windows.
Kirill Sergeev: «Os provedores de nuvem nos fornecem servidores virtuais, que se encaixam perfeitamente nas trilhas de CI/CD.
Instalar dez de servidores físicos requer cerca de cem operações manuais. Cada servidor precisa ser iniciado manualmente, o sistema operacional adequado deve ser instalado e nosso aplicativo precisa ser colocado nesses dez servidores, e, então, tudo precisa ser verificado dez vezes. Os serviços de nuvem substituem esse procedimento por dez linhas de código, e um bom engenheiro de DevOps deve saber como operá-los. Assim, ele economiza tempo, esforço e dinheiro – tanto para o cliente quanto para a empresa.»
5. Sistemas de orquestração: Docker e Kubernetes
Kirill Sergeev: «Os servidores virtuais são divididos em contêineres, em cada um dos quais podemos instalar nosso aplicativo. Quando há muitos contêineres, é necessário gerenciá-los: ligar um, desligar outro, fazer backups em algum lugar. Isso se torna uma tarefa bastante complexa, para a qual é necessário um sistema de orquestração.
Antes, cada aplicativo era tratado por um servidor separado – qualquer alteração em seu funcionamento poderia impactar o funcionamento do aplicativo. Graças aos contêineres, os aplicativos se tornam isolados e são executados separadamente – cada um em sua própria máquina virtual. Se ocorrer uma falha, não é necessário perder tempo procurando a causa. É mais simples destruir o contêiner antigo e adicionar um novo».
6. Sistemas de configuração: Chef, Ansible, Puppet
Quando é necessário manter todo um parque de servidores, é preciso realizar muitas operações semelhantes. Isso é demorado e complicado, e o trabalho manual aumenta a chance de erros. Aqui, os sistemas de configuração entram em ação. Eles permitem criar um script que é fácil de ler tanto para programadores quanto para engenheiros de DevOps e administradores de sistemas. Esse script ajuda a executar operações idênticas nos servidores automaticamente. Assim, o número de operações manuais (e, consequentemente, erros) diminui.
Que carreira um engenheiro de DevOps pode construir?
É possível desenvolver-se tanto horizontal quanto verticalmente.
Igor Boiko: «Do ponto de vista do desenvolvimento horizontal, os engenheiros de DevOps têm atualmente as perspectivas mais amplas. Tudo está constantemente mudando, e é possível expandir habilidades em uma variedade de direções: desde sistemas de controle de versões até monitoramento, desde gerenciamento de configurações até bancos de dados.
É possível se tornar um arquiteto de sistemas se o funcionário estiver interessado em entender como o aplicativo funciona em todas as etapas de seu ciclo de vida – desde o desenvolvimento até o suporte.
Como se tornar um engenheiro DevOps?
- Leia os livros "Projeto 'Fênix'" e DevOps Handbook. Estes são verdadeiros pilares da filosofia DevOps, sendo que o primeiro é um romance.
- Estude as tecnologias da lista acima: de forma independente ou em cursos online.
- Junte-se como engenheiro DevOps em um projeto de código aberto.
- Pratique e sugira práticas DevOps em seus projetos pessoais e profissionais.
Fonte: habr.com
