1 of 39

Entrega Contínua - Dev

Denis Costa e Renzo Nuccitelli

2 of 39

Bio - Denis Costa

Técnologo em Banco em Dados - Fatec 2014

Programador

Contatos

email: deniscostadsc@gmail.com

Twitter: @deniscostadsc

3 of 39

Bio - Renzo Nuccitelli

Engenheiro de Computação - ITA 2008

Empreendedor

Professor da Fatec

Instrutor Python Pro (www.python.pro.br)

Contatos

email: renzo@python.pro.br

Twitter: @renzonuccitec

4 of 39

Roteiro

Controlador de Versão

Setup

Requisitos / Feature Branch

Modularização

Testes Automáticos

Build

Deploy

Ao vivo

Falácias

5 of 39

Roteiro

Jenkins

Instalação no servidor

6 of 39

7 of 39

8 of 39

Ubuntu

Ubuntu 12.04 Server

openssh-server

- sudo apt-get install -y openssh-server

9 of 39

Jenkins e Git

sudo apt-get install -y git jenkins

10 of 39

Git Plugin

Instalar plugin Jenkins Git Plugin (pooling)

11 of 39

Jenkins

localhost:8080

~ == /var/lib/jenkins

gerar chave ssh

clonar repo (para adicionar ao known_hosts)

12 of 39

Problema base

Salvar Nome de Usuário

13 of 39

Controlador de Versão

14 of 39

Fonte

Todo código está no github, separado em passos.

https://github.com/renzon/gae-continuous-delivery

15 of 39

Setup

16 of 39

Setup - Google App Engine

Criar conta appengine.google.com (cuidado celular Oi)

Criar Aplicação

Criar Bot no Google Accounts

Colocar Bot como developer da aplicação (ver próxima imagem)

17 of 39

Setup

18 of 39

Setup - virtualenv

Navegar até “raiz do projeto/pyenv”

rodar ./venv.sh

Verificar a pasta pyenv / Explicar link simbólico lib no src

Obs: pode ser executado toda vez que se alterar o requirements.txt, para atualizar dependências

19 of 39

Setup - Pycharm

Setar src e test como fonte de código

Adicionar servidor GAE

Indicar porta, padrão 8080

Indicar working directory como src

Editar src/app.yaml com id de sua App

Habilitar Suporte Google App Engine

Apertar play ou debug

UFA (ainda bem que só tem que fazer uma vez)

20 of 39

Requisitos e Feature Branch

21 of 39

Modularização

22 of 39

Modularização - Web Service

Comunicação via interface web (JSON ou XML)

Amazon: “Anyone who doesn’t do this will be fired. Thank you; have a nice day!” - http://apievangelist.com/2012/01/12/the-secret-to-amazons-success-internal-apis/

23 of 39

Modularização - Web Service

Prós: independência de tecnologia, coesão e desacoplamento

Contras: Exige maturidade e disciplina;

Latência

24 of 39

Modularização - pypi

Criar pacote no pypi

https://github.com/renzon/pswdclient - cliente para abstrair comunicação JSON

Prós: Diminui latência se não precisar acessar serviço externo; desacoplamento e coesão

Contras: Gestão de dependência pode ficar complexa

25 of 39

Modularização - Interna

26 of 39

Modularização - Interna

27 of 39

Modularização - Interna

Command: Unidade básica:

CommandList: Composite de Commands

Facade: Interface de um módulo expondo

Commands/CommandList

Web: Executa lógica de internet e negócio através de facades

28 of 39

Modularização - Interna

29 of 39

Modularização - Interna

Prós:

Baixa Latência

Menos burocracia que pypi

Contras:

Risco de equipe violar arquitetura

30 of 39

Modularização - Frontend

Fica pro Rupy ;D

31 of 39

Testes Automáticos

32 of 39

Testes Automáticos

Teste Unitário (Command)

Teste de Integração (CommandList ou Facade)

Teste de Aceitação (Handlers)

testloader.py

33 of 39

Build

34 of 39

Deploy

35 of 39

Falácias

Deploy com um click é impossível!

R: livro Continuous Delivery; o QMagico faz; Nesse Treinamento fizemos

Construir o deploy contínuo custa caro

R: Menor que o débito técnico

36 of 39

Falácias

Constrói quanto tiver tempo

R: Aumenta débito técnico, pressão do cliente

Não temos grana para ferramentas

R: Todas ferramentas são grátis ou até open source

Vai ser entregue sem qualidade

R: Teste automáticos, Homologação

37 of 39

Onde Aprender Mais

Continuous Delivery - Jez Humble - David Farley

Todos os links dessa apresentação

38 of 39

Onde Aprender Mais

Próximos Cursos:

Objetos Pythonicos - 29/10

Python para quem estudou Java - 18/11

Python para quem sabe Python - 19/11

39 of 39

Obrigado

renzo@python.pro.br

@renzonuccitec