Prática DevOps com Docker para Machine Learning
  • Prática de DevOps com Docker para Machine Learning
  • Autores e Agradecimentos
  • Uso do Livro
  • Contribua com o Livro
  • Licença
  • Organização do Livro
  • 1. Introdução
    • 1.1 Máquinas Virtuais e Contêineres
    • 1.2 DevOps e Docker
    • 1.3 Configuração do Ambiente - Python
    • 1.4 Configuração do Ambiente - Docker
    • 1.5 Dockerfile, Imagem e Contêiner Docker
    • 1.6 Docker Hub e Comandos Adicionais
  • 2. Desenvolvimento
    • 2.1 Do notebook para aplicação - parte 1
    • 2.2 Do notebook para aplicação - parte 2
    • 2.3 Do notebook para aplicação - parte 3
  • 3. Produção
    • 3.1 Desenvolvimento vs Produção: o fim ou o início?
    • 3.2 Ambiente de Produção - parte 1
    • 3.3 Ambiente de Produção - parte 2
    • 3.4 Ambiente de Produção - parte 3
  • 4. Monitoramento
    • 4.1 Introdução
    • 4.2 Configurando o Servidor de Monitoramento
    • 4.3 Monitorando Servidores do Ambiente de Produção
    • 4.4 Comandos de Verificação do Nagios
    • 4.5 Criando Verificações Mais Específicas
    • 4.6 Criando Alertas
    • 4.7 Recuperando de Problemas
    • 4.8 Verificação de Contêineres via NRPE
  • 5. Infraestrutura como Código e Orquestração
    • 5.1 Introdução
    • 5.2 Orquestração com Docker Compose
    • 5.3 Orquestração com Kubernetes
  • 6. Integração Contínua
    • 6.1 Introdução
    • 6.2 Controle de Versão
    • 6.3 Configurando um repositório no GitLab
    • 6.4 Branch e merge
    • 6.5 Pipeline de Integração Contínua com GitLab CI/CD
  • 7. Entrega Contínua
    • 7.1 Introdução
    • 7.2 Implantação automática no Docker Hub
    • 7.3 Implantação automática no Heroku
    • 7.4 Implantação automática no Google Kubernetes Engine (GKE)
    • 7.5 Testando tudo junto
  • 8. Model serving
    • 8.1 Introdução
    • 8.2 Model serving com mlserver
    • 8.3 CI/CD com GitLab e mlserver
    • 8.4 Testando tudo junto
  • 9. Model serving batch
    • 9.1 Introdução
    • 9.2 Spark
    • 9.3 Airflow
    • 9.4 Testando tudo junto
  • 10. MLOps com mlflow
    • 10.1 Introdução
    • 10.2 Visão geral do MLflow
    • 10.3 Configuração do MLflow
    • 10.4 Testando MLflow
  • 11. MLOps com Kubeflow
    • 11.1 Visão geral do Kubeflow
    • 11.2 Configuracão
    • 11.3 Kubeflow Pipeline
    • 11.4 Kserve
    • 11.5 Testando tudo junto
  • 12. Conclusão
    • Conclusão
Powered by GitBook
On this page
  1. 6. Integração Contínua

6.2 Controle de Versão

Previous6.1 IntroduçãoNext6.3 Configurando um repositório no GitLab

Last updated 3 years ago

O primeiro passo para se trabalhar com a Integração Contínua diz respeito ao uso e um sistema de controle de versão (Version Control System - VCS), responsável por gerenciar as mudanças realizadas no código fonte do produto ou da infra estrutura.

O uso do VCS facilita imensamente o gerenciamento e recuperação de versões específicas do nosso produto, além da manutenção do histórico das alterações realizadas ao longo do tempo.

Toda mudança realizada no código passa a valer após passarem por um commit (confirmação). O commit agrupa o conjunto de arquivos alterados e permite a inclusão de uma mensagem referente as alterações realizadas e/ou o que demandou tais alterações.

O VCS permite depois que se navegue pelos diferentes commits realizados, sabendo-se o que foi alterado, quem fez a alteração, e em que momento a alteração foi feita, dentre outras informações. Além disso, alterações concorrentes num mesmo arquivo podem gerar algum conflito que o VCS é capaz de detectar e tentar resolver de forma automática ou solicitando a intervenção humana para tal.

Desse modo, fazer uso de um VCS é obrigatório nos dias atuais e existem inúmeras opções disponíveis sendo uma das mais conhecidas o Git (). O Git é um VCS distribuído e que não exige a existência de um único repositório central para todos os commits de um projeto. Cada desenvolvedor pode ter sua instância local do Git e diferentes Gits podem compartilhar os históricos de mudanças locais para outra instância de Git executando localmente em outra máquina. Desse modo, a opção por um servidor central é uma mera conveniência mas é possível utilizar o Git de forma distribuída sem a existência de um repositório central.

Práticas de DevOps como a Integração Contínua e a Entrega Contínua demandam extrema cooperação e disciplina dos envolvidos e o VCS facilita imensamente o controle dessa cooperação. Além disso, o que dispara a integração ou a entrega contínuas são os commits. Qualquer alteração que precise chegar até o ambiente de produção irá sempre iniciar com o commit das alterações demandadas.

Hoje existem diferentes ambientes que utilizam-se do Git para fornecer ferramentas de cooperação para o desenvolvimento de software e o processo de Integração Contínua (CI) e Entrega Contínua (CD). Dois exemplos bastante conhecidos são o GitHub () e o GitLab (). Ambos permitem a criação de contas gratuitas, a criação de projetos, e a definição de pipelines de CI/CD.

O GitHub é bastante popular na comunidade open source. Muitos dos principais projetos abertos disponíveis atualmente tem seu controle feito no GitHub. O GitHub oferece ainda inúmeras ferramentas para a cooperação, relato de defeitos, solicitação de novas funcionalidades, e mais recentemente o chamado , que viabiliza a criação de fluxos DevOps dentro do GitHub, permitindo processos de CI/CD, dentre outras.

Outro sistema de colaboração baseado em Git bastante popular é o GitLab. Basicamente ele oferece as mesmas funcionalidades do GitHub e pode até mesmo ser integrado a este. É possível criar projetos no GitLab importando projeto do GitHub e, posteriormente, manter a sincronia entre os mesmos. Além disso, o que já é mais madura que o e é a que utilizaremos nas seções a seguir para exemplificar a criação de um fluxo DevOps de Integração Contínua e Entrega Contínua.

Como em ambos os casos, o VCS que executa por baixo do GitHub ou do GitLab é o Git, a execução do Git via linha de comando é idêntica. Por exemplo, para verificar o log de commits no clone local de um repositório em minha máquina, basta executar o comando git log dentro do repositório, conforme demonstrado a seguir.

cd ~/temp/loja-virtual-devops
$ git log
commit 4a64972460fdb478f9219c9ca0f188c5c004746d (HEAD -> master, origin/master, origin/HEAD)
Author: Auri Vincenzi <aurimrv@yahoo.com.br>
Date:   Fri Oct 23 02:48:26 2020 +0000

    Update .gitlab-ci.yml

commit b76f569ae5ac30953b4aa26938f8051e2b5f8c48
Author: Auri Vincenzi <aurimrv@yahoo.com.br>
Date:   Thu Oct 22 18:26:17 2020 +0000

    Update .gitlab-ci.yml

...

Como pode ser observado acima, a cada alteração confirmada no repositório, o Git registra as informações e guarda o seu histórico. Sendo um repositório distribuído, para identificar unicamente cada uma das confirmações recebidas, ele calcula um código hash, ou SHA. No exemplo acima observam-se dois commits, um iniciando por b76f569a e o outro, mais recente, iniciando por 4a649724. Caso seja necessário reverter o código para algum desses, a chave hash funciona como um identificador único (chave primária) para referenciar o respectivo commit.

Entretanto, essa não é a única forma de referenciarmos alterações em nossos códigos Git, é possível também atribuir tags a determinadas configurações de nosso repositório e utilizar essas tags como referências para se obter ou restaurar o código a determinado momento do tempo. Para mais informações sobre Git recomenda-se a leitura da documentação oficial disponível em , ou busca na Internet pois existem inúmeros documentos sobre o seu uso.

https://git-scm.com/
https://github.com/
https://gitlab.com
GitHub Actions
GitLab oferece também uma ferramenta para a criação de fluxos CI/CD
GitHub Actions
https://git-scm.com/doc