Banco de Dados

4 dez, 2014

Série Continuous Integration: Automatizando banco de dados com Flyway plugin

Publicidade

Olá, pessoal!

No artigo de hoje vamos ver como automatizar a criação do banco de dados usando o Jenkins + o plugin Flyway via Maven. Aqui na ITS usamos Continuous Integration e Continuous Delivery em todos os projetos; respiramos isso. Não apenas por ser algo “bacana tecnicamente”, mas pelo valor que é entregue aos projetos e para empresa também.

Cenário

E aí, quantas vezes você já teve que falar: “ah, agora vai para o ambiente de dev e tenho que gerar toda base de dados, e vou levar pelo menos 30 minutos”. Pois é, aqui já tivemos esse cenário enquanto estávamos validando qual ferramenta íamos usar e, para não sair usando qualquer coisa, o ideal era fazer manualmente, mesmo consumindo média de 30 minutos para ter todo banco pronto antes de fazer o deploy da aplicação no ambiente de DEV. E se uma tabela sofre alteração? E se preciso replicar a mesma tabela em outro ambiente? Quanto tempo levaria?  Acho que já percebeu o problema aqui, certo?

Pensando em resolver esse débito técnico, conhecemos o Flyway. Na verdade já falei dele em outro artigo, mas agora vamos integrá-lo com o Jenkins, que nos permite ter um job que vai executar apenas a criação das tabelas.

Vou me limitar apenas em configurar o Flyway no Jenkins e eu assumi que você já tem ele configurado no pom.xml do seu projeto. Caso não tenha feito isso, confira o artigo que falei em específico sobre como usar o plugin.

Requisito

Antes de mais nada, crie um arquivo .sql  que crie uma simples tabela no banco de dados, e nas configurações do pom.xml garanta que o usuário tem as devidas permissões. O arquivo .sql deve estar na estrutura esperada pelo Flyway.

Passo 1

Crie um novo job no Jenkins, dê um nome a ele e escolha Build a maven2/3 project:

jenkinsdbscript

Passo 2

Agora precisamos informar a URL do repositório do projeto (no meu caso, está no github):

jenkinsflywayconfig

Informamos a branch, que pode ser deixado em branco e será considerado a master.

Não é requerido que seu projeto use o Git. Pode ser SVN ou qualquer outro controlador de versão, desde que você informe o repositório do projeto.

Passo 3

Em pré-step, vamos executar um clean e compile e por fim, vamos exibir o status de execução do Flyway, ou seja, saber qual script será executado. Lembre que o compile é requerido pelo Flyway.

Passo 4

Agora em build deixe assim:

jenkinsflwyaybuild

É, esse cara que faz a mágica de criar as tabelas, ou seja, ele vai executar o(s) arquivo(s) .sql.

Passo 5

É isso! Agora vamos buildar o projeto e esperar que a tabela seja criada (acompanhe pelo console). Outro ponto importante é garantir que o banco de dados está rodando. Parece óbvio, mas nada impede de esquecermos de iniciar o DB. Salve as alterações e clique em build now.

Resultado

Olhando o console, vamos ver o seguinte (claro que será diferente do seu):

jenkinsbuildinfosuccess

No meu caso, já tinha outros .sql executados, mas na última linha observe que está marcado como future, ou seja, que será executado. Esse é o resultado do comando que colocamos no pré-step, e como deu tudo certo aqui, vamos ver o resultado do build.

jenkinsflywaybuildok

Agora, acesse seu banco de dados e o esperado é que a tabela tenha sido criada. Analise o tempo que levou para execução do script. Quando trabalhamos com projetos pequenos parece que ter esse trabalho de configurar e criar uma build para esse fim é como se fosse inútil; afinal, manualmente seria mais rápido, porém, pode acreditar o investimento feito no tempo de setup e configuração é muito menor que os problemas que passamos quando fazemos criação de base de dados manualmente.

Simples, não? Espero que tenham gostado do artigo.

Abraços!