Roadmap DevOps¶
Dentro de uma equipe de desenvolvimento de software, o DevOps é responsável por automatizar a cadeia de processos que leva o código feito pelo desenvolvedor até o usuário. A integração do membro com a equipe é fundamental para que os interesses dos stakeholders sejam sempre respeitados e apoiados pelos processos definidos pelo time.
Como sugestão de caminho a ser trilhado pelo membro DevOps, temos as seguintes etapas:
1. Desenhar pipeline de produção + integração + deploy¶
Após definir-se a estrutura básica da arquitetura do projeto, é fundamental que se defina todas as etapas que levam o trabalho do programador ao ambiente de produção. Aqui, deve-se levar em consideração a opinião dos stakeholders para responder a questões como:
- Com qual frequência o ambiente de produção/homologação será atualizado?
- Para quem estará disponível o ambiente de homologação?
- Haverá um ambiente de desenvolvimento, fechado para os membros da equipe?
- Como os desenvolvedores vão realizar a entrega dos artefatos criados?
- De quantos serviços estamos falando?
- Pode haver o surgimento de mais serviços?
- Como está previsto o funcionamento da arquitetura do nosso produto de software?
- ...
As seguintes issues podem ajudar a ter um bom rendimento nesta etapa: 1. Definir arquitetura inicial - Selecionar Tecnologias, definir comunicação entre elas, etc. 2. Definir política de branches, commits e pull requests - O que, onde e quando as coisas devem estar 3. Esquematizar versão inicial do pipeline de desenvolvimento - Diagramar o "caminho" do código desde a concepção da ideia até a sua entrega ao usuário 4. ...
2. Implementação¶
Com uma versão inicial da cadeia de processos de desenvolvimento, pode-se realizar o levantamento de possíveis tarefas e as suas priorizações de acordo com os riscos apresentados por cada uma delas. Aqui, pode ser útil classificar as tarefas/etapas necessárias para se construir a cadeia de processos nas seguintes categorias:
- Essencial para garantir a entrega
- Problemática
- Máxima prioridade
- Não existem muitas implementações possíveis
- Poucas pessoas chegaram a implementar tal tarefa/etapa dentro ou fora da disciplina
- Não problemática
- Alta prioridade
- Existem implementações conhecidas de processos similares
- Comumente implementadas dentro e fora da disciplina
- Facilitadora de entrega, opcional
- Problemática
- Menor prioridade
- Facilita processos mas exige grandes esforços da equipe para implementar
- Não problemática
- Baixa prioridade
- Facilita processos e não exige grandes esforços da equipe para implementar
Lembrando que a implementação de pipelines de integração e deploy contínuos não necessariamente aumenta, de forma direta, a produtividade da equipe. Portanto, focar em implementações complicadas e desnecessárias é arriscado e imprudente do ponto de vista de gestão. Qualquer método de priorização pode ser utilizado, desde que apresente resultados adequados.
Como resultado desta etapa, é importante ter definidas as issues relacionadas à implementação da cadeia de processos. Para isso, definir as tecnologias a serem utilizadas e iniciar o desenvolvimento do produto é fundamental. Por exemplo:
- Configurar Integração Contínua no TravisCI
- Configurar triggers do TravisCI específicos para cada branch
- Configurar verificação de build no TravisCI
- Implementar testes na integração contínua
- Configurar verificação dos testes na integração contínua
- Instalar o Rancher na VM da Digital Ocean
- Instalar e configurar os environments do Rancher na VM da Digital Ocean
- Implementar deploy contínuo no Rancher
- Inserir, nos scripts de integração contínua, os triggers de deploy no Rancher
- ...
3. Evolução e monitoramento do pipeline¶
Com a possível instabilidade do pipeline de produção, pode-se pensar nas evoluções que o tornarão mais confiável e confortável de ser utilizado. Aqui, começa-se a pensar naquelas tarefas que foram tratadas como de baixa prioridade na etapa anterior. Temos as seguintes issues como bons exemplos:
- Melhorar o log dos testes no TravisCI
- Inserir script em Python para formatar a leitura do arquivo de log dos testes
- Criar cron job para verificar a estabilidade dos serviços em operação
- Criar cron job que verifica a disponibilidade dos serviços e notifica a equipe caso haja algum problema
- Criar API de monitoramento e armazenamento de dados das builds no TravisCI
- Criar API que recebe dados relacionados às builds no TravisCI como:
- Tempo médio de build
- Número de builds finalizadas com sucesso
- Número de builds finalizadas sem sucesso
- ...
As issues listadas neste documento são apenas sugestões para facilitar o processo de entendimento do trabalho do membro DevOps. A leitura e aceitação das sugestões apresentadas não substituem estudo aprofundado e adequado das soluções mais adequadas ao contexto de cada equipe.