A função de um engenheiro DevOps moderno é notoriamente complexa, especialmente no que diz respeito às habilidades tecnológicas necessárias.
É esperado que o profissional domine diversas linguagens de programação, como Node.JS, scripts em lote, Python, entre outras. Além disso, é fundamental que compreenda como incorporar a automação de testes nos processos de implementação.
Atuando como integrador de código em pipelines automatizados, o engenheiro DevOps deve ter, no mínimo, um conhecimento básico do funcionamento de diversos serviços de nuvem.
Apesar de toda essa complexidade técnica, as competências técnicas não são, necessariamente, o maior gargalo nas habilidades de um engenheiro DevOps. Embora seja lógico supor que o domínio das habilidades técnicas seja o mais importante, observações de profissionais da área indicam que as habilidades interpessoais são, muitas vezes, ainda mais cruciais para o sucesso.
Habilidades Essenciais de DevOps
Fonte: devopsuniversity.org
Observar a atuação de um engenheiro DevOps em uma equipe Scrum pode ser bastante revelador. Na maioria das vezes, ele não está diretamente envolvido no conteúdo específico das tarefas que o restante da equipe está desenvolvendo, concentrando-se mais nos aspectos técnicos e nas funcionalidades necessárias para integrar o trabalho da equipe.
No entanto, ele precisa ser capaz de integrar o resultado do trabalho da equipe em um pipeline de implementação eficiente, que inclua a execução e validação de vários testes automatizados.
É nesse ponto que ser apenas um especialista técnico não é mais suficiente. A comunicação se torna um fator fundamental para o sucesso. Vamos, então, explorar as habilidades mais importantes para um profissional de DevOps.
Habilidades Interpessoais
Na verdade, a colaboração e a comunicação dentro da equipe ágil são as principais razões pelas quais a falta de habilidades interpessoais está no topo da lista de desafios para um profissional de DevOps. Se você ainda se questiona o motivo, aqui estão alguns dos argumentos mais relevantes:
- Engenheiros DevOps não conseguem ser eficazes sem se adaptar ao ritmo da equipe de desenvolvimento. Essa equipe cria a base do software ou da plataforma. Cabe ao engenheiro DevOps criar um ambiente ativo para que tudo funcione corretamente.
- Além de manter a sincronia com sua própria equipe de desenvolvimento, eles são um ponto de contato importante para stakeholders externos que buscam acesso à plataforma de software. Eles devem ser capazes de entender essas demandas e traduzir toda a complexidade técnica do ambiente automatizado em termos não técnicos, de modo que os stakeholders possam realmente entender o cenário. Assim, o engenheiro DevOps age como intermediário entre a equipe de desenvolvimento e os stakeholders externos.
- Embora seja possível construir um sistema de aprendizado para adquirir habilidades técnicas específicas, desenvolver as habilidades interpessoais adequadas exige um aprofundamento na própria integridade e personalidade. É preciso aprender a se observar sob outras perspectivas e identificar áreas de crescimento. Nem todos conseguem fazer isso com facilidade.
Networking
Quando se observa o cenário tecnológico das plataformas de nuvem atuais, é fácil se sentir perdido. É preciso lidar com serviços de sistema de arquivos, inúmeros bancos de dados, APIs de back-end, arquiteturas de servidor ou serverless, serviços de front-end, modelos de aprendizado de máquina, ambientes híbridos, redes privadas virtuais, balanceadores de carga de alta disponibilidade, diversos serviços de streaming em tempo real e muito mais.
É impossível saber tudo sobre tudo. No entanto, é essencial que os engenheiros DevOps saibam como conectar todas as peças em uma plataforma de software funcional. Construir uma forte rede de contatos é fundamental.
Encontrar o equilíbrio ideal entre a simplicidade e a eficiência na comunicação de sistemas distribuídos é um desafio constante que eles devem estar preparados para enfrentar e solucionar junto à equipe.
Normalmente, percebe-se que a infraestrutura construída atingiu um nível de maturidade quando as questões e desafios de segurança da plataforma se tornam prioridade. E, novamente, essa é uma área de domínio do engenheiro DevOps.
Em vez de se apegar a contatos antigos e comprovados, é preciso buscar continuamente novas conexões para dar conta de todos os serviços solicitados pela equipe.
Testes de Software
Especialmente no mundo ágil, a flexibilidade nas versões de software é fundamental. É possível que uma configuração de scrum utilize sprints de duas semanas. Logo, é esperado um novo lançamento de produção a cada duas semanas.
Se considerarmos todo o ciclo de vida do projeto, que inclui planejamento, estimativa, desenvolvimento, teste e lançamento, não será possível atingir essa meta sem uma automação consistente no maior número possível dessas etapas.
O principal requisito para o sucesso nesse modelo (e, consequentemente, para permitir um tempo mais rápido de implementação em produção) é um grande foco na automação de testes. Implantações mais rápidas aliadas a testes automatizados resultam em um tempo menor para o feedback dos usuários aos desenvolvedores.
Para o engenheiro DevOps, isso significa integrar os resultados de diversas equipes de teste em um pipeline de CI/CD:
- Habilitar a execução de scripts de teste de unidade após cada commit no repositório. Se esses testes não existirem, é preciso negociar com os desenvolvedores para que sejam criados.
- Incluir casos de teste de integração nos pipelines de CI/CD, implementando em um ambiente de teste totalmente integrado e consistente. Não faz sentido executar testes de integração em todos os ambientes de desenvolvimento que a equipe de desenvolvimento está usando. Os casos de teste de integração devem funcionar perfeitamente no ambiente em que todos os serviços são implementados e os dados são consistentes.
- Incorporar casos de teste completos do mundo real no pipeline de CI/CD. Torná-lo uma execução obrigatória para cada implementação de código mestre no ambiente de teste de integração ou de aceitação do usuário. Isso garante que todos os processos de negócio importantes e críticos possam ser executados sem falhas.
Criar casos de teste eficazes que não sejam excessivos, mas que também cubram todos os processos críticos, é outro desafio a ser superado. Os engenheiros DevOps não precisam necessariamente lidar com isso sozinhos.
Analistas de negócios ou gerentes de qualidade podem fazer parte da rede (se não diretamente da equipe) para ajudar nesse processo e definir as etapas exatas. No entanto, é função do engenheiro DevOps traduzir isso em código executável automatizado.
CI/CD e Infraestrutura como Código
Já abordamos esse tema em diferentes pontos. No entanto, é inegável que o IaC (e, consequentemente, sua execução por meio de pipelines de CI/CD) são os principais resultados dos engenheiros DevOps. É aqui que todas as entradas da equipe de desenvolvimento (na forma de diferentes funcionalidades de serviço) são conectadas a ambientes de infraestrutura reais. Em seguida, elas formam um software utilizável como saída de serviço, que pode ser implementado repetidamente em diferentes ambientes.
Não é à toa que esse é um dos principais desafios de todo engenheiro DevOps. Ainda mais se o requisito for permanecer independente da nuvem. Isso geralmente significa escrever o IaC na linguagem Terraform e garantir que o código não contenha particularidades de um provedor de nuvem específico. A experiência demonstra isso de forma clara. Migrar para scripts de código de infraestrutura independentes da nuvem pode ser uma tarefa árdua, mesmo para engenheiros experientes.
É praticamente impossível manter a infraestrutura na nuvem utilizando apenas etapas manuais para as implementações. No passado, esse era o padrão. Entretanto, também era o padrão para projetos em cascata. Não há como sobreviver com implementações manuais em um ambiente ágil. A transição precisa ser feita, e isso quase sempre é doloroso.
Mas, uma vez feita corretamente, tudo se encaixa.
- Precisa de uma implementação de produção? Basta executar o pipeline de lançamento que contém a implementação do código na produção.
- Precisa de outro ambiente de desenvolvimento para não sobrepor os trabalhos de desenvolvimento dentro da equipe? Encontre o pipeline de desenvolvimento e clique no botão “Executar”. Toda a infraestrutura de desenvolvimento será executada e criada automaticamente, incluindo os dados de teste.
- Uma vez que não seja mais necessário um ambiente, o mesmo pipeline de desenvolvimento pode executar os comandos de destruição para todos os serviços previamente implementados nesse ambiente.
É imprescindível para uma equipe ágil de sucesso implementar a infraestrutura como código e colocá-la dentro de pipelines de CI/CD que podem executar as tarefas a qualquer hora e momento. Os engenheiros DevOps são os responsáveis por isso.
Conteinerização
Fonte: aws.amazon.com
Em projetos de grande escala, a possibilidade de replicação rápida é crucial. Criar centenas de cópias dos mesmos ambientes ao mesmo tempo não seria possível sem o uso de contêineres. A conteinerização é uma habilidade que exige uma curva de aprendizado íngreme. Essa é uma das razões pelas quais apenas alguns projetos a utilizam de forma eficaz.
O servidor de contêineres é um modelo a ser aplicado sempre que necessário, e a saída será sempre a mesma: infraestrutura idêntica e dados idênticos. Essa é uma propriedade que somente engenheiros DevOps podem construir para a equipe. Eles precisam aprender a fazer isso com diversas ferramentas.
Os contêineres são projetados para serem facilmente criados e destruídos. Os engenheiros DevOps devem implementar ferramentas de orquestração de contêineres, como Kubernetes ou Docker Swarm, que podem gerenciar automaticamente a implantação, o escalonamento e a recuperação de contêineres.
Os contêineres compartilham o mesmo sistema operacional host. Se um contêiner for comprometido, ele pode comprometer outros contêineres no mesmo host. Além disso, se os contêineres forem criados a partir de imagens de terceiros, eles podem conter vulnerabilidades no código. Os engenheiros DevOps devem se esforçar para implementar recursos de segurança, como isolamento de contêineres, controle de acesso e verificação de vulnerabilidades, a fim de mitigar esses riscos.
A escalabilidade é outra propriedade inerente aos contêineres. É possível escalá-los horizontalmente com facilidade para lidar com o aumento da carga de trabalho. Isso pode gerar contenção de recursos e problemas de desempenho. Os engenheiros DevOps devem implementar ferramentas de gerenciamento de recursos, como cgroups ou cotas de recursos do Kubernetes, que podem limitar o número de recursos que cada contêiner pode consumir.
Os engenheiros DevOps precisam abordar a conteinerização tendo em mente segurança, escalabilidade e resiliência. Dentre todas as habilidades técnicas, dominar a conteinerização exige uma curva de aprendizado especialmente acentuada. A complexidade é muito alta. Essa é também a razão pela qual apenas alguns projetos a utilizam de forma eficaz.
Conclusão
O profissional de DevOps é um membro único da sua equipe ágil. É possível que haja apenas um ou dois deles para todo o projeto, mas mesmo assim, eles serão cruciais para o sucesso.
As expectativas sobre os engenheiros DevOps são altas, pois eles precisam desempenhar diversas funções ao mesmo tempo:
- Eles devem ser desenvolvedores técnicos competentes;
- membros de equipe que demonstram empatia, compreensão e prontidão para colaboração;
- intermediários eficazes entre a equipe de desenvolvimento e stakeholders externos não técnicos;
- responsáveis por conectar toda a equipe à automação e verificações de código;
- facilitadores dos lançamentos regulares do projeto;
- e construtores de uma rede de especialistas que muda constantemente.
Apesar de toda a complexidade técnica, é o elemento humano que desempenha um papel crucial no sucesso de qualquer iniciativa DevOps. Se você pretende se tornar um profissional dessa área, tem todo o direito de se orgulhar de sua decisão e adotar uma abordagem educacional mais abrangente, não se limitando apenas ao conhecimento técnico.
Em seguida, confira as perguntas e respostas mais frequentes em entrevistas de DevOps.