O artigo foi preparado por Konstantin Bryukhanov, chefe do curso "CI / CD" . Nele, Konstantin revelou uma série de questões problemáticas relacionadas à entrega de implantação de código de produto de software em empresas de TI e coletou recomendações entre as melhores práticas internacionais.
Na operação de TI, a direção mais exigida é precisamente o ajuste e a provisão de entrega e implantação contínuas. As tecnologias e metodologias estão em constante evolução, as ferramentas estão sendo aprimoradas. Como tal, os requisitos de entrega e implantação mais recentes incluem a prontidão e continuidade dos testes de mudança, preparação e configuração de um ambiente de teste para a equipe de QA.
Avanços tecnológicos e software livre levaram a uma mudança significativa na abordagem de organização de processos de CI / CD. A transição para novos princípios influenciou muito a cultura corporativa, as habilidades exigidas dos funcionários e os próprios princípios de trabalho nas organizações, o que levou a mudanças em grande escala no mundo do desenvolvimento de software.
As soluções em nuvem estão se tornando cada vez mais prioritárias. A entrega contínua de software requer colaboração eficaz entre as equipes de desenvolvimento, teste e operações, e a nuvem é ótima para essa colaboração.
No entanto, a fase de implantação, executada em uma topologia distribuída complexa, está sujeita a erros e geralmente requer solução de problemas manual. A fase de implantação do produto de um processo de entrega contínua geralmente cria gargalos e impacta negativamente a eficácia do processo DevOps.
A entrega contínua permite que você obtenha a automação dos testes de alterações de software incrementais e a implantação rápida de atualizações das maneiras mais eficientes e seguras. Essa abordagem dá aos usuários a confiança de que a versão mais recente do código está sendo usada no ambiente de produção, e as alterações feitas pelos programadores podem chegar aos clientes em questão de horas ou até minutos.
Vamos considerar o cenário mais comum para implementar CI / CD em um projeto:
- A equipe de desenvolvimento lança uma nova versão do produto (nova funcionalidade ou correções de bugs da versão anterior).
- O serviço de integração contínua (CI) valida o novo código com uma série de testes que incluem vários níveis de teste, como sintaxe, unidade e testes de regressão.
- , (CD).
- (, ) , (staging), , .
- stage- CI/CD , .
- .
Este cenário é o mais geral e cobre grande parte das necessidades das equipes de desenvolvimento e operações, mas ainda apresenta alguns problemas , por exemplo:
- Substituindo arquivos . Freqüentemente, você precisa atualizar ou substituir arquivos de configuração ou regenerar algum conteúdo estático. Nesse caso, os usuários podem receber erros até que o tráfego seja transferido da versão antiga do software para a nova. No caso de falha na implantação, existe o risco de incompatibilidade de arquivos.
- . , , . . , - , - .
- . . , , .. . , - , , .. .
É importante notar que os problemas listados acima podem surgir mesmo em um ambiente quase ideal, mas uma das principais dificuldades na implementação da metodologia DevOps é que não há uma imagem única de como deve ser a entrega contínua e o processo de implantação de produto. Muitas empresas de TI sabem muito pouco sobre DevOps, às vezes não entendem essa metodologia, enquanto outras já possuem soluções históricas sobre as quais precisam construir novos processos. Tendo em conta os elevados requisitos para as qualificações dos especialistas Devops e a sua escassez no mercado de trabalho, o empregador é frequentemente forçado a usar os recursos já à sua disposição e atribuir tarefas Devops a engenheiros novatos. Como resultado, existem ainda mais pontos fracos no sistema.
Ao usar CI / CD sem um entendimento correto da metodologia, sem uma abordagem analítica para construir infraestrutura e métodos para entrega de código, surgem os seguintes problemas:
1. Fator humano . O primeiro e mais significativo risco está associado a fatores humanos. Imagine uma situação em que você precise configurar vários outros servidores semelhantes aos existentes. Se o especialista que fez as instalações ou configurações anteriores não estiver disponível por qualquer motivo (doença, desligamento, etc.) e não tiver preparado instruções detalhadas, a situação se torna muito mais complicada. Nesse caso, cada novo especialista deve estudar todo o processo de configuração do servidor por completo, enquanto não tiver margem para erros. Além disso, é impossível estimar com precisão quanto tempo levará para ser instalado e garantir seu sucesso.
Isso também inclui os riscos associados ao fato de o autor do método cometer um erro, se esquecer de cobrir os processos com testes, ou simplesmente não levar em conta algo e seu sucessor não perceber.
Também deve ser lembrado que as empresas costumam desenvolver vários projetos, e o Departamento de Operações de TI geralmente é um, e um Engenheiro de Operações atende a vários projetos. Se não houver um único esquema e conceito, os processos em diferentes equipes serão construídos de maneiras diferentes, o que complicará significativamente o desenvolvimento subsequente de Devops na empresa e criará um alto limite para a entrada de um engenheiro de operações em outro projeto, onde já são usados processos diferentes daqueles com os quais ele trabalhou mais cedo.
2. Cenários não idempotentes... Idempotência é um atributo crítico de cenários de entrega contínua e implantação de código, especialmente em implantações de infraestrutura. O engenheiro deve estar confiante de que cada vez que os scripts são executados, o resultado será exclusivamente garantido, esperado e inalterado ao repetir o mesmo script. Freqüentemente, ao implementar Devops em uma empresa, os engenheiros estão tentando desenvolver uma solução de negócios e podem não levar em conta a idempotência ou simplesmente não saber sobre esse requisito. Nesse caso, a empresa recebe uma bomba-relógio. existe a possibilidade de que um código inesperado seja entregue às instalações de produção. Por exemplo, se alguém atualizou um módulo CMS para um projeto e, portanto, influenciou outros, onde isso não era esperado.
3. Armazenamento de dados sensíveis e organização de acesso. Um dos pontos mais importantes na abordagem Devops para armazenar dados secretos, restringir direitos, organizar a rede e o acesso do usuário. Até o momento, não há práticas e ferramentas uniformes aceitas para resolver esse problema, e os engenheiros devem realizar pesquisas a cada vez, dependendo da organização atual da infraestrutura e dos métodos de restrição de acesso adotados. Por este motivo, a implementação da metodologia Devops em uma empresa é complicada pelo fato de ser impossível encontrar de forma inequívoca uma solução para o seu caso particular, e o uso de práticas de outras pessoas nem sempre garante a segurança.
4. Modelo de orçamento definido , mais adequado para a metodologia em Cachoeira.
5. Requisitos de alta segurança.Consequentemente, é impossível colocar a infraestrutura de projetos nacionais de TI na área de responsabilidade de empresas comerciais estrangeiras, por exemplo, Amazon, Microsoft.
6. Grande quantidade de "código legado", "infraestrutura legada" que precisa ser mantida. A necessidade de integração com um grande número de sistemas legados.
Assim, o processo de construção de Devops em uma empresa pode ser acompanhado por uma série de problemas e nem sempre resolver os problemas para os quais foi criado.
A primeira etapa importante é abandonar o relacionamento com os servidores como um elemento de infraestrutura único e difícil de personalizar., transição da configuração manual do servidor para o gerenciamento automatizado e centralizado da infraestrutura. O processo de configuração de cada servidor deve ser descrito na forma de uma configuração que seja fácil de ler, alterável e pronta para reutilização segura múltipla, fornecendo um resultado garantido inequívoco. Exemplos de sistemas de orquestradores industriais são Chef ou Ansible. Esses sistemas permitem que você gerencie um grande número de servidores com custos mínimos.
A próxima etapa importante é aplicar testes automatizadospara cobrir o máximo possível a funcionalidade do código sendo desenvolvido (software e infraestrutura). Em outras palavras, tendo uma infraestrutura implantada, mas sem testes automatizados, o gargalo do processo de desenvolvimento será a verificação oportuna da funcionalidade. A automatização do processo de teste deve começar com a escrita real do código do software (teste de unidade), a aplicação de testes primários no servidor que é responsável por construir o software e um teste da configuração do servidor. Isso reduzirá a carga de trabalho da equipe de garantia de qualidade do software e reduzirá significativamente o tempo para o software passar pelo pipeline.
A etapa lógica final é a coleta e análise centralizada dos arquivos de log de todos os servidorespara notificação oportuna de todas as partes interessadas e monitoramento proativo do estado da infraestrutura como um todo.
As diretrizes acima o ajudarão a construir uma infraestrutura resiliente e escalonável que pode lidar com um intenso processo de desenvolvimento. A implementação do DevOps requer o envolvimento de todos no processo, desde teste e desenvolvimento até gerentes e operações. Em cada etapa, é necessária uma análise retrospectiva constante do processo, pois em decorrência de erros aleatórios ao alterar a configuração, os sistemas param de funcionar completamente. A telemetria precisa ser aprimorada para melhor detectar erros e recuperar, proteger o pipeline de implantação e atender às metas de mudança de gerenciamento. Isso permitirá que você receba o máximo apoio da liderança na implementação de iniciativas de DevOps, crie um ambiente de trabalho mais animado e amigável,para que qualquer participante possa aprender ao longo do tempo - isso não só ajudará cada executor a atingir os objetivos, mas também levará a organização ao sucesso.
Em 3 meses em nosso curso online "CI / CD", você desenvolverá uma compreensão da arquitetura de provedores de nuvem, aprenderá a automatizar a análise de código e procurar vulnerabilidades e aprenderá como personalizar os processos de construção, teste e instalação de um aplicativo dos três maiores provedores . O programa é destinado a especialistas com experiência em administração - um teste especial de admissão o ajudará a descobrir se você tem preparação suficiente para o treinamento.