5. DevOps: desenvolvendo e orquestrando¶
5.1 - O que é DevOps¶
Aproximação da administração de sistemas (sysadmin) com o desenvolvimento.
Entregas constantes em ambientes de alta disponibilidade.
Foco na automação.
Imagens:
5.2 - Ambientes reprodutíveis¶
5.2 - Ambientes¶
Um software depende do seu ambiente para funcionar.
Se o ambiente muda, o software pode parar de operar corretamente.
O primeiro princípio DevOps é manter um ambiente de hospedagem reprodutível.
5.2 - Reprodutibilidade¶
Automação básica para criar um ambiente de hospedagem a partir de elementos básicos: máquinas virtuais, repositório do código, etc.
Provision (provisionamento): criação do ambiente de hospedagem.
Deploy (disponibilização): envio do software para o ambiente.
5.2 - Estágios¶
No caso de uma arquitetura de serviços, temos os seguintes ambientes:
Desenvolvimento: em geral na máquina do(a) desenvolvedor(a).
Testes e estágio (staging): onde versões do software são hospedadas antes de irem ao ar.
Produção: onde o software está realmente hospedado.
5.3 - Máquinas virtuais¶
5.3 - Paradigmas¶
Um computador é uma máquina de Turing, podendo simular qualquer máquina, inclusive uma máquina de Turing.
Uma máquina virtual é basicamente um software simulando o comportamento parcial ou integral de um computador.
5.3 - Implementações¶
Contêiners: chroot, Linux-VServer, OpenVZ, docker.
Paravirtualizadores: Xen.
Virtualizadores: KVM, VirtualBox.
Gestores de nuvem: OpenStack.
5.4 - Vagrant¶
Ferramenta para criação e gestão de ambientes de desenvolvimento.
Sua aplicação roda localmente, porém dentro de uma máquina virtual.
O simples comando vagrant up ergue a máquina virtual e realiza a configuração do ambiente.
A “receita” do ambiente de desenvolvimento pode ser compartilhada entre todos(as) desenvolvedores(as) do software.
O vagrant se soma ao nosso ambiente de trabalho e também serve como ambiente de testes.
Roteiro do screencast:
# Instalando o vagrant
sudo apt-get install vagrant
cd ~/projetos/blogatico
vagrant init
5.5 - Fazendo o deploy¶
Deploy: disponibilizar o código em ambiente de hospedagem (desenvolvimento, staging ou produção).
SSH: protocolo de comunicação criptografada e autenticada entre cliente e servidor.
Git, rsync e sftp: diversos, dentre inúmeros, meios de se transferir o código.
O deploy também pode ser automatizado usando scripts ou softwares especializados (ansible, capistrano, etc).
Roteiro do screencast:
SSH: entrando no servidor (fingerprints e senha).
SSH: autenticação por chave.
Bônus: github com chave pública.
Clonando o repositório em produção.
Atualizando o repositório.
Bônus: deploy automatizado com git-hooks.
5.6 - Testes e integração contínua¶
Erros de programação são muito comuns.
Apenas a atenção não é suficiente.
Testar manualmente o software é importante, porém é um trabalho repetitivo, cansativo e também sujeito a falhas.
Rotinas automatizadas de teste podem pegar muitos erros e serem feitas localmente ou através de serviços.
Roteiro do screencast:
Mostrar softwares e serviços de integração contínua.
Criar um protótipo local e simples de teste e integração contínua.
5.7 - Atividades¶
Crie um ambiente de desenvolvimento vagrant para o seu projeto.
Experimente o PuPHPet para gerar uma configuração mais complexa de ambiente virtual de desenvolvimento.
Crie uma rotina de testes simples para o seu projeto.