django jenkins
TRANSCRIPT
-
8/16/2019 Django Jenkins
1/14
blog.concretesolutions.com.br
Montando um serviço de integração
contínua para um projeto Django no
Jenkins
Written by Filipe Mondaini
Neste tutorial vamos fazer uma demonstração de como incluir um
projeto Django em Integração Contínua utilizando o Jenkins. Já
falamos bastante sobre integração contínua em Android, em iOS e
em .NET, além de alguns posts gerais sobre o assunto, mas hoje
vamos finalmente falar sobre integração contínua em Django.
Assumindo que já terminamos esse tutorial, vamos colocar o
Jenkins para efetuar os testes da nossa aplicação sempre que um
novo commit for enviado para o repositório.
Então, mãos à obra!
Montando um serviço de integração contínua pa... about:reader?url=http://blog.concretesolutions...
1 de 14 13-05-2016 14:29
-
8/16/2019 Django Jenkins
2/14
Para este tutorial, vamos utilizar como projeto o tutorial oficial do
site do Django para a versão 1.7, pois ele já tem uns testes
unitários para servir de exemplo.
Instalação do projeto
Para baixar o projeto, faça um git clone:
git clone https://bitbucket.org/suporte_concrete/cs-django-
jenkins.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 sabermais, visite esse site.
Instale os requirements do projeto:
pip install -r requirements.txt
Montando um serviço de integração contínua pa... about:reader?url=http://blog.concretesolutions...
2 de 14 13-05-2016 14:29
-
8/16/2019 Django Jenkins
3/14
Agora que já temos o nosso virtualenv com os pacotes
necessários, 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 máquina, execute:
python manage.py runserver
Importante: este comando deve ser usado somente em
ambiente de desenvolvimento local. Para rodar em produção
devem ser utilizados outros serviços, 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:
Montando um serviço de integração contínua pa... about:reader?url=http://blog.concretesolutions...
3 de 14 13-05-2016 14:29
-
8/16/2019 Django Jenkins
4/14
Todos os testes passando! =D
Agora que já sabemos como preparar o projeto e executar os
testes, vamos instalar o Jenkins na máquina de integração
contínua.
Instalação das dependências
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 máquina. Como estamos
utilizando no exemplo uma máquina Ubuntu, conseguimos
instalá-lo facilmente com o comando apt-get:
# Adicione a chave do repositório do Jenkins
Montando um serviço de integração contínua pa... about:reader?url=http://blog.concretesolutions...
4 de 14 13-05-2016 14:29
-
8/16/2019 Django Jenkins
5/14
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
Após a instalação, verifique se o serviço está rodando com o
comando:
sudo service jenkins status
Caso o serviço esteja rodando, o resultado será este:
Jenkins Continuous Integration Server is running with the pid XXX
Para iniciar o serviço execute:
sudo service jenkins start
Agora já podemos acessar o Jenkins na porta 8080 da máquina
que instalamos (nesse caso, na minha própria máquina). Vamos
acessar o endereço localhost:8080
Montando um serviço de integração contínua pa... about:reader?url=http://blog.concretesolutions...
5 de 14 13-05-2016 14:29
-
8/16/2019 Django Jenkins
6/14
Dependências
Por padrão, o Jenkins não permite acessar repositórios Git. Por
isso, vamos precisar instalar um plugin do Git no Jenkins. Acesse o
Jenkins na porta 8080, clique na opção “Manage Jenkins” e, na
página seguinte, escolha a opção “Manage Plugins”:
Na página de plugins, clique na aba “Available”, e filtre por “git
plugin”.
Montando um serviço de integração contínua pa... about:reader?url=http://blog.concretesolutions...
6 de 14 13-05-2016 14:29
-
8/16/2019 Django Jenkins
7/14
Selecione o plugin e clique no botão “Download now and install
after restart”.
O download do plugin será exibido como a seguir:
Montando um serviço de integração contínua pa... about:reader?url=http://blog.concretesolutions...
7 de 14 13-05-2016 14:29
-
8/16/2019 Django Jenkins
8/14
Nota: Caso a página não responda depois de um tempo, acesse a home
novamente, pois a instalação já pode ter sido concluída. :(
Agora que já temos no nosso servidor o Jenkins e o Git instalados,
precisamos configurar o job para que o Jenkins consulte nosso
repositório.
Configurações iniciais
Na página inicial, clique no link “New Item” para criar um novo Job.
Preencha o nome do job e selecione a opção “Freestyle project”:
Na página seguinte, selecione a opção “Discard Old Builds” para
que os builds mais antigos sejam apagados automaticamente.
Montando um serviço de integração contínua pa... about:reader?url=http://blog.concretesolutions...
8 de 14 13-05-2016 14:29
-
8/16/2019 Django Jenkins
9/14
Acesso ao repositório
Essa parte é vital. Nela, vamos selecionar o tipo de repositório,
endereço, qual branch buscar por padrão, etc. Como nosso projeto
está no bitbucket da Concrete, selecione a opção Git. Em seguida,
insira a URL para o repositório:
Montando um serviço de integração contínua pa... about:reader?url=http://blog.concretesolutions...
9 de 14 13-05-2016 14:29
-
8/16/2019 Django Jenkins
10/14
Importante: a URL no exemplo é pública, então não é necessária nenhuma
permissão especial para acessar. Em um projeto privado, é necessário
configurar uma chave ssh na máquina com permissão para que o Jenkins
consiga acessar o repositório.
Gatilho para o Build – Build Triggers
Aqui podemos configurar a periodicidade que o Jenkins deve
verificar alterações no servidor. No nosso caso, escolhi que ele
consulte o repositório a cada 15 minutos. Caso exista alguma
mudança, ele vai baixar a nova versão e testar.
Build
Depois de baixar a versão mais nova, só precisamos conseguir
rodar o código pra validar. Para isso, vamos inserir uma etapa na
parte de Build . Para configurar, vamos adicionar um shell script.
Montando um serviço de integração contínua pa... about:reader?url=http://blog.concretesolutions...
10 de 14 13-05-2016 14:29
-
8/16/2019 Django Jenkins
11/14
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 configuração.
Vamos forçar um novo build clicando no botão Build Now:
Podemos acompanhar andamento do build na barra lateral ou
clicar no link do número do build para ver o andamento com mais
detalhes:
Montando um serviço de integração contínua pa... about:reader?url=http://blog.concretesolutions...
11 de 14 13-05-2016 14:29
-
8/16/2019 Django Jenkins
12/14
Como podem ver, o Jenkins foi ao nosso repositório 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
Montando um serviço de integração contínua pa... about:reader?url=http://blog.concretesolutions...
12 de 14 13-05-2016 14:29
-
8/16/2019 Django Jenkins
13/14
do que um azul. Já o Chuck Norris, bem… quem melhor pra nos
convencer a não quebrar um build do que ele?
Com os plugins instalados, o resultado dos builds fica assim:
Build quebrado:
Build ok:
Montando um serviço de integração contínua pa... about:reader?url=http://blog.concretesolutions...
13 de 14 13-05-2016 14:29
-
8/16/2019 Django Jenkins
14/14
Bom, é isso! Espero que tenham curtido e caso tenham alguma
dúvida, postem nos comentários ou entrem em contato comigo
pelo twitter @filipecm.
Lembrando que o projeto utilizado no post está hospedado no
bitbucket da Concrete.
Até a próxima!
Montando um serviço de integração contínua pa... about:reader?url=http://blog.concretesolutions...
14 de 14 13-05-2016 14:29