Você está na página 1de 14

Montando um servio de integrao contnua pa...

about:reader?url=http://blog.concretesolutions...

blog.concretesolutions.com.br

Montando um servio de integrao


contnua para um projeto Django no
Jenkins
Written by Filipe Mondaini

Neste tutorial vamos fazer uma demonstrao de como incluir um


projeto Django em Integrao Contnua utilizando o Jenkins. J
falamos bastante sobre integrao contnua em Android, em iOS e
em .NET, alm de alguns posts gerais sobre o assunto, mas hoje
vamos finalmente falar sobre integrao contnua em Django.
Assumindo que j terminamos esse tutorial, vamos colocar o
Jenkins para efetuar os testes da nossa aplicao sempre que um
novo commit for enviado para o repositrio.
Ento, mos obra!

1 de 14

13-05-2016 14:29

Montando um servio de integrao contnua pa...

about:reader?url=http://blog.concretesolutions...

Para este tutorial, vamos utilizar como projeto o tutorial oficial do


site do Django para a verso 1.7, pois ele j tem uns testes
unitrios para servir de exemplo.
Instalao do projeto
Para baixar o projeto, faa um git clone:
git clone https://bitbucket.org/suporte_concrete/cs-djangojenkins.git
Em seguida, crie um virtualenv* para o projeto:
virtualenv ~/projetos/virtualenvs/blog
Ative o virtualenv:
source ~/projetos/virtualenvs/blog/bin/activate
* O que Virtualenv
Ferramenta utilizada para criar ambientes isolados. Assim, voc
pode instalar os pacotes do seu projeto sem interferir nos pacotes
instalados no escopo global do sistema operacional. Para saber
mais, visite esse site.
Instale os requirements do projeto:
pip install -r requirements.txt

2 de 14

13-05-2016 14:29

Montando um servio de integrao contnua pa...

about:reader?url=http://blog.concretesolutions...

Agora que j temos o nosso virtualenv com os pacotes


necessrios, vamos rodar um comando que ir efetuar as
migrations:
python manage.py migrate
Feito isso, agora podemos rodar nosso projeto.
Rodando o projeto localmente
Para rodar o projeto na mquina, execute:
python manage.py runserver
Importante: este comando deve ser usado somente em
ambiente de desenvolvimento local. Para rodar em produo
devem ser utilizados outros servios, como apache +
modwsgi, gunicorn + nginx, entre outros.
Rodando os testes
Para rodar os testes, execute:
python manage.py test
O resultado dever ser o seguinte:

3 de 14

13-05-2016 14:29

Montando um servio de integrao contnua pa...

about:reader?url=http://blog.concretesolutions...

Todos os testes passando! =D

Agora que j sabemos como preparar o projeto e executar os


testes, vamos instalar o Jenkins na mquina de integrao
contnua.
Instalao das dependncias
Precisamos instalar alguns pacotes para que o Jenkins consiga
montar o ambiente e fazer os builds. Instale os seguintes pacotes
com o apt-get:
sudo apt-get install -y git python-pip python-virtualenv
Instalando o Jenkins
O primeiro passo instalar o Jenkins na mquina. Como estamos
utilizando no exemplo uma mquina Ubuntu, conseguimos
instal-lo facilmente com o comando apt-get:
# Adicione a chave do repositrio do Jenkins

4 de 14

13-05-2016 14:29

Montando um servio de integrao contnua pa...

about:reader?url=http://blog.concretesolutions...

wget -q -O https://jenkins-ci.org/debian/jenkins-ci.org.key | sudo


apt-key add
sudo sh -c echo deb http://pkg.jenkins-ci.org/debian binary/ >
/etc/apt/sources.list.d/jenkins.list
sudo apt-get update
sudo apt-get install jenkins
Aps a instalao, verifique se o servio est rodando com o
comando:
sudo service jenkins status
Caso o servio esteja rodando, o resultado ser este:
Jenkins Continuous Integration Server is running with the pid XXX
Para iniciar o servio execute:
sudo service jenkins start
Agora j podemos acessar o Jenkins na porta 8080 da mquina
que instalamos (nesse caso, na minha prpria mquina). Vamos
acessar o endereo localhost:8080

5 de 14

13-05-2016 14:29

Montando um servio de integrao contnua pa...

about:reader?url=http://blog.concretesolutions...

Dependncias
Por padro, o Jenkins no permite acessar repositrios Git. Por
isso, vamos precisar instalar um plugin do Git no Jenkins. Acesse o
Jenkins na porta 8080, clique na opo Manage Jenkins e, na
pgina seguinte, escolha a opo Manage Plugins:

Na pgina de plugins, clique na aba Available, e filtre por git


plugin.

6 de 14

13-05-2016 14:29

Montando um servio de integrao contnua pa...

about:reader?url=http://blog.concretesolutions...

Selecione o plugin e clique no boto Download now and install


after restart.
O download do plugin ser exibido como a seguir:

7 de 14

13-05-2016 14:29

Montando um servio de integrao contnua pa...

about:reader?url=http://blog.concretesolutions...

Nota: Caso a pgina no responda depois de um tempo, acesse a home


novamente, pois a instalao j pode ter sido concluda. :(

Agora que j temos no nosso servidor o Jenkins e o Git instalados,


precisamos configurar o job para que o Jenkins consulte nosso
repositrio.
Configuraes iniciais
Na pgina inicial, clique no link New Item para criar um novo Job.
Preencha o nome do job e selecione a opo Freestyle project:

Na pgina seguinte, selecione a opo Discard Old Builds para


que os builds mais antigos sejam apagados automaticamente.
8 de 14

13-05-2016 14:29

Montando um servio de integrao contnua pa...

about:reader?url=http://blog.concretesolutions...

Acesso ao repositrio
Essa parte vital. Nela, vamos selecionar o tipo de repositrio,
endereo, qual branch buscar por padro, etc. Como nosso projeto
est no bitbucket da Concrete, selecione a opo Git. Em seguida,
insira a URL para o repositrio:

9 de 14

13-05-2016 14:29

Montando um servio de integrao contnua pa...

about:reader?url=http://blog.concretesolutions...

Importante: a URL no exemplo pblica, ento no necessria nenhuma


permisso especial para acessar. Em um projeto privado, necessrio
configurar uma chave ssh na mquina com permisso para que o Jenkins
consiga acessar o repositrio.

Gatilho para o Build Build Triggers


Aqui podemos configurar a periodicidade que o Jenkins deve
verificar alteraes no servidor. No nosso caso, escolhi que ele
consulte o repositrio a cada 15 minutos. Caso exista alguma
mudana, ele vai baixar a nova verso e testar.

Build
Depois de baixar a verso mais nova, s precisamos conseguir
rodar o cdigo pra validar. Para isso, vamos inserir uma etapa na
parte de Build. Para configurar, vamos adicionar um shell script.

10 de 14

13-05-2016 14:29

Montando um servio de integrao contnua pa...

about:reader?url=http://blog.concretesolutions...

Depois de escrito, nosso script ficou assim:


#!/bin/bash
export WORKSPACE=pwd
# Create/Activate virtualenv
virtualenv venv
source venv/bin/activate
# Install Requirements
pip install -r requirements.txt
# Run tests
python manage.py test
Para concluir, salve a configurao.
Vamos forar um novo build clicando no boto Build Now:

Podemos acompanhar andamento do build na barra lateral ou


clicar no link do nmero do build para ver o andamento com mais
detalhes:

11 de 14

13-05-2016 14:29

Montando um servio de integrao contnua pa...

about:reader?url=http://blog.concretesolutions...

Como podem ver, o Jenkins foi ao nosso repositrio do Bitbucket,


baixou o projeto e rodou os testes:

Vamos instalar estes plugins: Green Balls e ChuckNorris Plugin,


porque um indicador verde muito melhor para indicar um sucesso

12 de 14

13-05-2016 14:29

Montando um servio de integrao contnua pa...

about:reader?url=http://blog.concretesolutions...

do que um azul. J o Chuck Norris, bem quem melhor pra nos


convencer a no quebrar um build do que ele?

Com os plugins instalados, o resultado dos builds fica assim:


Build quebrado:

Build ok:

13 de 14

13-05-2016 14:29

Montando um servio de integrao contnua pa...

about:reader?url=http://blog.concretesolutions...

Bom, isso! Espero que tenham curtido e caso tenham alguma


dvida, postem nos comentrios ou entrem em contato comigo
pelo twitter @filipecm.
Lembrando que o projeto utilizado no post est hospedado no
bitbucket da Concrete.
At a prxima!

14 de 14

13-05-2016 14:29