Top Posts

Open Session View – Hibernate Solução

Continue lendo

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

Posted by camilolopes | Posted in Jenkins, Series | Posted on 07-07-2014

0

Olá Pessoal,

No post 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.

Lets go…

Cenário

Iai, 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 30min”. 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 media de 30min 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 post, mas agora vamos integrar o flyway 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 post 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.

Starting…

Passo 1

Crie um novo Job no Jenkins, dê um nome ao job 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 pre-step vamos executar um clean e compile e por final 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 apenas. 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, que fazer manualmente seria mais rápido, porém pode acreditar que 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 post.

Abraços, see ya!! 

Related Posts with Thumbnails

Write a comment