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:

  1. Configurar Integração Contínua no TravisCI
  2. Configurar triggers do TravisCI específicos para cada branch
  3. Configurar verificação de build no TravisCI
  4. Implementar testes na integração contínua
  5. Configurar verificação dos testes na integração contínua
  6. Instalar o Rancher na VM da Digital Ocean
  7. Instalar e configurar os environments do Rancher na VM da Digital Ocean
  8. Implementar deploy contínuo no Rancher
  9. Inserir, nos scripts de integração contínua, os triggers de deploy no Rancher
  10. ...

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:

  1. Melhorar o log dos testes no TravisCI
  2. Inserir script em Python para formatar a leitura do arquivo de log dos testes
  3. Criar cron job para verificar a estabilidade dos serviços em operação
  4. Criar cron job que verifica a disponibilidade dos serviços e notifica a equipe caso haja algum problema
  5. Criar API de monitoramento e armazenamento de dados das builds no TravisCI
  6. 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
  7. ...

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.