Deploy de Aplicações Python
Marcos Cardoso
Grupy-SP
Marcos CardosoBacharel em Ciência da
Computação - UFRJ
Desenvolvedor Pleno @ Globosat
Entusiasta de Backend, Mobile
facebook.com/vrcmarcos
github.com/vrcmarcos
linkedin.com/vrcmarcos
slideshare.net/vrcmarcos
Preparando o projeto para o deploy1.O código deve estar versionado
2.O código deve possuir testes
3.Os testes não podem falhar
4.As dependências devem estar isoladas
O pipeline de deploy1.Pegar o código do repositório (Github, Bitbucket, Gitlab, …)
2.Atualizar dependências
3.Rodar as possíveis migrates de banco
4.Executar os testes
5.Taggear o código
6.Acessar a máquina de produção e pegar a tag criada anteriormente
7.Atualizar dependências na máquina de produção
8.Rodar as possíveis migrates de banco em produção
9.Reiniciar a aplicação em produção
Mas como? Continuous Integration!Usaremos Jenkins para automatizar nossas tarefas
Hands on!
Preparação do ambiente1.Fork do repositório de teste:
https://github.com/vrcmarcos/python-jenkins
2.Em produção:a. Dependências: python, git, pip, virtualenv e virtualenvwrapper
b. Criar as pastas /www/python e /www/venvs
3. Baixar o Jenkins (http://jenkins.io)i. Instalar os plugins: Github plugin, promoted builds plugin, SSH Plugin,
ShiningPanda Plugin
ii. Entrar em Manage Jenkins > Configure System:
1. Adicionar o servidor na área SSH remote hosts. Caso sua máquina utiliza OpenSSH >= 6.7, baixar o JAR https://mvnrepository.com/artifact/com.jcraft/jsch/0.1.54 e trocar na pasta /var/lib/jenkins/plugins/ssh/WEB-INF/lib/ (https://issues.jenkins-ci.org/browse/JENKINS-25258)
Criando o primeiro Job1. Clicar em New Item no Jenkins
2.Configurações:a. Source Code Management
i. Additional Behaviours: Shallow clone depth = 1, Do not fetch tags = true
b. Build
i. Virtualenv Builder
1. pip install -r requirements.txt2. python manage.py migrate3. python manage.py test
c. Post-build Actionsi. Git publisher
1. Push Only If Builds Succeeds = true2. Tags: Tag to push = ${BUILD_NUMBER}, Create new tag = true, Target
remote name = origin
Promovendo o build1.Nas configurações do Job:
a. General:
i. Promote builds when…
1. Promotion process: Name = PROD
2. Criteria: Promote immediatly once the build is complete
3. Actions: Execute shell script on remote host using ssh = https://gist.github.com/vrcmarcos/2a16bf0ad7a701f0f7fc3040779cc6bb
Duvidas?
Obrigado!facebook.com/vrcmarcos
github.com/vrcmarcos
linkedin.com/vrcmarcos
slideshare.net/vrcmarcos