django jenkins

Upload: walter-angolar-da-silva

Post on 05-Jul-2018

214 views

Category:

Documents


0 download

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