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.
Passo 2
Agora precisamos informar a url do repositório do projeto (no meu caso está no github).
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:
É 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):
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.
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!!