Saiba como configurar o Drone, um serviço de integração contínua no Linux

Você está cansado de clonar, desenvolver, testar e implementar códigos de vez em quando? Se sim, mude para integração contínua. Integração contínua aka CI é uma prática muito comum na engenharia de software. A CI ajuda a integrar rapidamente novos códigos na base de código existente.

Se esse processo for automatizado, isso acelerará o processo de desenvolvimento, pois reduz o tempo gasto para o desenvolvedor criar e testar as coisas manualmente. Drone é um projeto de código aberto e gratuito que fornece um ambiente incrível de serviço de integração contínua e é lançado atualmente esta na versão 2.0 da licença Apache.

Integra-se com muitos repositório como Github, Bitbucket e Google Code e tem a capacidade de extrair códigos dos repositórios, o que permite desenvolver o código fonte escrito em vários linguagens, incluindo PHP, Node, Ruby, Go, Dart, Python, C/C++, JAVA e muito outras. Ele é feito em uma plataforma muito boa, porque ele usa contêineres e a famosa tecnologia Docker para cada compilação, fazendo com que os usuários tenham um controle total sobre seu ambiente de desenvolvimento com isolamento garantido.

1. Instalando o Docker

Em primeiro lugar, vamos instalar o Docker, pois ele é o elemento mais importante para o fluxo de trabalho completo do Drone. Drone faz utilização adequada do docker com a finalidade de um melhor desenvolvimento e claro, logo em seguida também permite testar a aplicação.

Esta tecnologia de contêiner acelera o desenvolvimento das aplicações. Para instalar o docker, precisamos executar os seguintes comandos de acordo com respectiva distribuição Linux. Neste tutorial, abordaremos as etapas com as distribuições Linux Ubuntu e CentOS.

Para o Ubuntu

Para instalar o Docker no Ubuntu, vamos executar poucos comandos:

apt-get update
apt-get install docker.io

Depois da instalação, é preciso que a gente reinicie o serviço docker, para isso execute o comando abaixo:

service docker restart

E para melhorar, vamos fazer com que o docker seja iniciado automaticamente em cada inicialização do sistema, para isso execute o comando abaixo, lembre-se usar o ROOT:

update-rc.d docker defaults

Você deve ver a seguinte saída no terminal:

Adding system startup for /etc/init.d/docker …
/etc/rc0.d/K20docker -> ../init.d/docker
/etc/rc1.d/K20docker -> ../init.d/docker
/etc/rc6.d/K20docker -> ../init.d/docker
/etc/rc2.d/S20docker -> ../init.d/docker
/etc/rc3.d/S20docker -> ../init.d/docker
/etc/rc4.d/S20docker -> ../init.d/docker
/etc/rc5.d/S20docker -> ../init.d/docker

No CentOS

Primeiro, vamos atualizar todos os pacotes instalados na nossa máquina Centos. Podemos fazer isso executando o seguinte comando.

sudo yum update

Para instalar docker no centos também é fácil, basta executar os seguintes comandos:

curl -sSL https://get.docker.com/ | sh

Depois que nosso docker for instalado em nossa máquina com o CentOS, vamos fazer a mesma coisa que nos outros exemplos, vamos iniciar o serviço, no entanto devemos comando systemd como systemd é o sistema init padrão no CentOS.

systemctl start docker

Então, vamos habilitar o docker para iniciar automaticamente em cada inicialização do sistema.

systemctl enable docker
ln -s '/usr/lib/systemd/system/docker.service' '/etc/systemd/system/multi-user.target.wants/docker.service'

2. Instalando o SQlite

Ele usa o servidor de banco de dados SQlite3 para armazenar seus dados e informações. Ele criará automaticamente um arquivo de banco de dados chamado drone.sqlite em /var/lib/drone/ que tratará a configuração e migração do esquema do banco de dados. Para configurar o SQlite3, precisaremos seguir as etapas abaixo, não pule nenhuma!

Para Ubuntu

Como o SQlite3 está disponível no repositório padrão do Ubuntu, então não vamos precisar de muita coisa, basta executar o seguinte comando:

apt-get install libsqlite3-dev

Para CentOS

Para instalá-lo na máquina com CentOS, precisamos executar o seguinte comando:

yum install sqlite-devel

3. Instalando o Drone

Finalmente, depois de ter instalado essas dependências com sucesso, agora vamos seguindo em frente, eu sei que o tutorial é imenso, mas vale a pena. Para a instalação do Drone em nossa máquina. Nesta etapa, simplesmente baixaremos o pacote binário do link de download oficial, em seguida, vamos instalar usando o gerenciador de pacotes padrão.

No Ubuntu

Usaremos o wget para baixar o pacote Debian do drone que também vai servir para o Ubuntu, será usado o do site oficial do arquivo Debian, execute o comando abaixo para fazer o download, você vai baixar um pouco mais de 7MB.

wget downloads.drone.io/master/drone.deb

Após o download, vamos instalá-lo com o gerenciador de pacotes dpkg.

dpkg -i drone.deb

Instalando o Drone no CentOS

Na máquina que executa o CentOS, baixaremos o pacote RPM através do link de download oficial para RPM, vamos usar o comando wget como mostrado abaixo:

wget downloads.drone.io/master/drone.rpm

Então, vamos instalar o pacote rpm do download usando o gerenciador de pacotes yum.

yum localinstall drone.rpm

4. Configuração da porta

Para executar Drone, devemos configurar pelo menos um ponto de integração entre GitHub, GitHub Enterprise, Gitlab, Gogs, Bitbucket. Neste tutorial, só integraremos o github, mas se quisermos integrar outros podemos fazer isso a partir do arquivo de configuração. Para integrar o github, precisamos criar um novo aplicativo nas suas configurações do github, ou seja, https://github.com/settings/developers .

Para criar, precisamos clicar em Registrar um novo aplicativo, em seguida, preencha o formulário conforme mostrado na imagem a seguir:

Devemos ter certeza de que o URL de retorno de chamada da Autoridade se parece com http://drone.sempreupdate.com.br/api/auth/github.com  na configuração do aplicativo. Então, clicaremos em Registrar aplicação. Depois de concluído, anotaremos a identificação do cliente e a chave Cliente secreto, pois precisaremos configurá-la em nossa configuração de drone.

Nota: Essa chave é apenas um exemplo!

Depois disso, precisamos editar nossa configuração do Drone usando um editor de texto, execute o seguinte comando.

nano /etc/drone/drone.toml

Então, encontraremos a seção [github] e vamos inserir na seção a configuração acima indicada como mostrado abaixo.

[github] client="3dd44b969709c518603c"
 secret="4ee261abdb431bdc5e96b19cc3c498403853632a"
 # orgs=[] # open=false

Veja como ficou:

6. Configurando o servidor SMTP

Se quisermos permitir que o Drone envie notificações via e-mails, então precisamos especificar a configuração SMTP do nosso servidor SMTP. Se já possuímos um servidor SMTP, podemos usar sua configuração, mas como não temos um servidor SMTP, precisaremos instalar um MTA, ou seja, Postfix e depois especificar a configuração SMTP na configuração do Drone.

No Ubuntu

Podemos instalar o postfix no ubuntu executando o seguinte comando, use o ROOT:

apt-get install postfix

No CentOS

Podemos instalar postfix no CentOS executando o seguinte comando:

yum install postfix

Após a instalação, precisamos editar a configuração dp postfix usando um editor de texto.

nano /etc/postfix/main.cf

Então, precisamos substituir o valor do parâmetro myhostname em nosso FQDN, ou seja, drone.sempreupdate.com.br

myhostname = drone.sempreupdate.com.br

Agora, vamos finalmente configurar a seção SMTP do nosso arquivo de configuração do Drone.

nano /etc/drone/drone.toml

Então, encontraremos a seção [stmp] e então precisaremos acrescentar algumas informações a configuração da seguinte maneira:

[smtp] host = "drone.sempreupdate.com.br"
 port = "587"
 from = "root@drone.sempreupdate.com.br"
 user = "root"
 pass = "senha"

Nota: Os parâmetros de usuário e de senha são só exemplos, nunca use usuários ou senhas fáceis demais.

7. Configurações finais

Como sabemos que o drone utiliza o docker para sua tarefa de desenvolvimento e teste, precisaremos configurar o docker exatamente como o drone precisa, se não nada vai funcionar. Para fazer isso, precisamos editar a seção [worker] no arquivo de configuração do drone.

nano /etc/drone/drone.toml

Então, vamos descomentar as seguintes linhas e anexar como mostrado abaixo.

[worker] nodes=[
 "unix:///var/run/docker.sock",
 "unix:///var/run/docker.sock"
 ]

Na configuração acima, indica que a configuração é capaz de executar apenas duas compilações por vez. Para aumentar isso basta aumentar só mais uma linha, é muito simples.

[worker] nodes=[
 "unix:///var/run/docker.sock",
 "unix:///var/run/docker.sock",
 "unix:///var/run/docker.sock",
 "unix:///var/run/docker.sock"
 ]

Na configuração acima, o drone está configurado para processar quatro compilações de cada vez, usando o daemon docker.

8. Reiniciar o drone

Finalmente, depois que tudo for feito em relação à instalação e configuração, agora vamos iniciar o nosso servidor drone em nossa máquina linux.

Para Ubuntu

Para iniciar o drone em uma máquina com o Ubuntu 14.04, vamos executar o comando abaixo:

service drone restart

Então, permitiremos que o drone seja automaticamente iniciado em cada inicialização do sistema.

update-rc.d drone defaults

Para o CentOS

Para iniciar o drone na máquina com CentOS, simplesmente executaremos o comando systemd para isso execute o comando abaixo:

systemctl restart drone

Então, permitiremos que o drone seja automaticamente iniciado em cada inicialização do sistema.

systemctl enable drone

9. Configurando o Firewall

Como sabemos, o drone utiliza a porta 80 por padrão e não precisa mudar a porta, vamos configurar nossos programas de firewall para permitir a porta 80 (http) esteja acessível a partir de outras máquinas na rede.

No Ubuntu 14.04

Iptables é um popular programa de firewall que está instalado nas distribuições do ubuntu por padrão. Vamos fazer o iptables expor a porta 80 para que possamos tornar a nossa interface web drone acessível na rede

iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
/etc/init.d/iptables save

No CentOS 7

Como o CentOS 7 vem com um firewall por padrão chamado de firewalld, você pode ter problemas com ele, então é bom garantir a liberação da porta. Para liberar a porta 80 (serviço http) no firewalld, precisamos executar os seguintes comandos.

firewall-cmd --permanent --add-service=http
firewall-cmd --reload

10. Acessando a interface Web do Drone

Agora, iremos abrir a interface web do drone usando o nosso navegador favorito. Para fazer isso, precisaremos apontar o nosso navegador para a nossa máquina executando o drone nele. Como a porta padrão do drone é a 80 e também definimos 80 neste tutorial, simplesmente direcionaremos nosso navegador para http://endereço-do-ip/ ou http://drone.sempreupdate.com.br de acordo com a sua configuração.

Depois de termos feito isso corretamente, veremos a primeira página com opções para entrar no nosso painel de controle.

Como configuramos o Github anteriormente, simplesmente selecionaremos o github e passaremos pelo processo de autenticação do aplicativo e, depois de concluído, seremos encaminhados para o nosso Painel de controle.

O que fizemos agora, sincronizará todo nosso repositório de github e nos pedirá para ativar o repo que queremos construir com o drone.

Após a sua ativação, ele nos pedirá que adicionemos um novo arquivo chamado .drone.yml em nosso repositório e defina o processo de compilação e a configuração nesse arquivo.

Precisamos configurar o nosso .drone.yml como mostrado abaixo.

image: python
 script:
 - python helloworld.py
 - echo "Build has been completed."

Após isso, poderemos construir nossa aplicação usando o arquivo YAML da configuração .drone.yml em nossa aplicação do drone. Tudo o que for feito no repositório será sincronizado em tempo real. Ele sincroniza automaticamente o commit e as alterações feitas no repositório. Uma vez que o commit é feito no repositório, a compilação é iniciada automaticamente em nosso aplicativo do drone.

Após a conclusão da compilação, poderemos ver a saída da compilação com o console de saída.

Neste artigo, aprendemos a configurar completamente uma plataforma de integração contínua com Drone. Se quisermos, podemos começar com os serviços prestados pelo projeto Drone.io oficial. Esta disponível o serviço gratuito ou serviço pago de acordo com nossos requisitos.

De fato mudou o mundo da integração contínua com sua bela interface web e poderosos recursos. Pois possui a capacidade de se integrar com muitas aplicações de terceiros e plataformas de implantação.

Share This Article
Follow:
Fundador do SempreUPdate. Acredita no poder do trabalho colaborativo, no GNU/Linux, Software livre e código aberto. É possível tornar tudo mais simples quando trabalhamos juntos, e tudo mais difícil quando nos separamos.
Sair da versão mobile