The Liquibase Database Change Log file or as we refer to it, the “driver” file, is the root of all changesets. This is the file that is passed to Liquibase during execution as the changeLogFile parameter which lists all changesets that needs to be executed in order. And because we love Visual Studio, we’d like to execute the driver file right from the IDE.
First step is to create a batch file with the following contents. Place this file in a folder that you can easily remember (c:\Dev\Liquibase\LBUpdateSQL.bat
):
C:\Dev\liquibase-3.3.3-bin\liquibase ^ --classpath="C:\Dev\liquibase-3.3.3-bin\lib\sqljdbc41.jar" ^ --driver="com.microsoft.sqlserver.jdbc.SQLServerDriver" ^ --url=jdbc:"sqlserver://127.0.0.1;databaseName=TARGET_DB" ^ --defaultSchemaName=dbo ^ --username=******** ^ --password=******** ^ --changeLogFile=%1 ^ --logLevel=info ^ --logFile="C:\Dev\LiquiBase\logs\output.log" ^ update
Don’t forget to change the values for TARGET_DB
, username and password. Also make sure that the paths are valid and appropriate (lines 1, 2 and 10).
Next step is to open Visual Studio and click on TOOLS > External Tools… and click the Add button. Fill-out all the fields as in below and make sure Close on exit is not checked:
Now this part is important. Make sure that the Initial directory points to the location of the driver file (in this case its C:\Dev\git-repos\DatabaseScripts\(project_name)\updates
). This will ensure that the filename field in the DATABASECHANGELOG
table only contains the filename of the changeset and not the full path. To understand why this is important, read more here.
Click on Ok to close the External Tools window.
Lastly,open the driver file in Visual Studio and click on TOOLS > Liquibase (this is what you placed in the Title field in the screenshot above).
There should be a command window that pops up that shows if the execution has failed or succeeded. The equivalent of all of this is like executing the batch file via command window while on the folder that contains the driver file with the driver file as an argument.