Arquivo

Posts Tagged ‘Vagrant’

Versionamento de banco de dados com Gradle + Flyway

Olá pessoal,

atualmente estou trabalhando em um sistema onde nossa base de dados é bem estável, ou costumava ser… pois bem, agora andei precisando fazer várias alterações e com isso achei melhor usar uma ferramenta para controle de versão da base. Há um bom tempo atrás eu usei o Liquibase e, na época, achei bem legal. Mas como isso já tem um bom tempo, achei que talvez houvesse uma boa alternativa (algo mais simples inclusive). Foi ai que me deparei com o Flyway. Super simples e com diversos plugins para as mais diversas ferramentas. Resolvi testá-lo e é claro, acabei encontrando alguns problemas (quem nunca não é??).

Para esse post, me focarei em chamar o Flyway usando o Gradle mas fazendo que ele ignore o arquivo de configuração e aceite os parâmetros via linha de comando. Pode parecer besta, mas vai por mim, isso pode ser uma mão na roda quando você tem várias máquinas distintas (ambientes de desenvolvimento, teste e produção por exemplo) com várias outras configurações distintas.

O meu aquivo build.gradle está +/- assim:

flyway {
url = ‘jdbc:postgresql://33.33.33.10:5432/my_db’
user = ‘myuser’
password = ‘mypassword’
schemas = [‘public’]
}

Então, todo vez que eu digitava “gradle fC fM”, o gradle chamava o plugin do Flyway, executava o clean e o migrate na minha maquina virtual (quem observou o ip deve ter notado que eu estou usando o vagrant). Minha configuração default é para o meu ambiente de desenvolvimento. Agora e quando eu vou executar em outro ambiente? Uma opção (a mais burra eu diria) seria simplesmente alterar o arquivo build.gradle e colocar a configuração da maquina que eu quero acessar. Nada prático né?

Que tal então passar os parâmetros que eu quero que o gradle ignore por linha de comando?

gradle flywayInfo -Pflyway.user=otheruser -Pflyway.url=jdbc:postgresql://other_url:5432/my_other_db

Dessa forma, eu simplesmente chamei o mesmo script (para fazer apenas o info da base) com outro usuário e em outra máquina/base, assumindo que os passwords são iguais. Legal né?

Bom, é isso pessoal!

[]’s