Given you have installed TeamCity and have been using the internal data store
HSQLDB in TeamCity and now want to follow JetBrains recommendations of NOT using
HSQLDBfor production use, you need an external database. This is what this little recipe is about.
Offical JetBrain docs
Of course there are good documentation about this, but I write for my self, so… Anyway, you can consult the following:
Careful if you MIGRATE!!!
I’m not covering any steps to keep any data you have in your current database, e.g.
HSQLDB. Please ensure that you have your back covered if you migrate and need to keep any data. Consult the documentation for this.
First, ensure that you can access the SQL-Server from your server where you have installed TeamCity. If this is not the same server, you can consolidate my previous writings “Recipe – Allow remote connections to SQL-Server Express 2014 on Windows 2012R2”.
My TeamCity installation runs under a specific account:
TeamCity; and I want to use
integrated securityfor connecting to my database. So lets get a database and login for use with
- Create an empty database, e.g.
- Create a new login, using
Windows authenticationin SQL-Server and
map the login to the database created previously.
The log can be your friend
Before continuing with TeamCity configuration. If anything fails when trying to restart TeamCity after you have reconfigured it, check the
teamcity-server.log located in your installation. E.g.:
JAVA, JAVA, JAVA…
Download the JDBC package from Microsoft’s download center. I downloaded the
Unzip and take the
Microsoft JDBC Driver 4.2 for SQL Serversqljdbc_4.2enusqljdbc4.jar file and place it under your TeamCity installation, e.g.
Since integrated security is going to be used, we apparently also need to pick a
dll for this. From the unzipped files, copy the
C:\TempMicrosoft JDBC Driver 4.2 for SQL Serversqljdbc_4.2enuauth[x86|x64]sqljdbc_auth.dll file. NOTE! You need to pick the one matching your JAVA environment, for me it was
x86, but I picked the wrong one first but the
teamcity-server.log was kind enough to tell me that I picked the wrong one.
sqljdbc_auth.dll can according to docs be placed in various locations. I just swinged it and put the
Edit the file:
C:\TeamCityDataBuildServerconfigdatabase.properties, and define a connection string mapping to your environment. For me, it was:
Again, if you want to keep any existing data, ensure to consolidate the docs. If you are good to go, just restart the
TeamCity Server service and hope for the best. When restarted, you should be able to access the webUI. If it fails. Check the log. For me, it took some tries to pick correct version of the
sqljdbc_auth.dll and place it in a working directory.
When it succeeds in connecting to your database, it will complain about an empty database. If the UI requires a token to continue, you will find that in the mentioned
teamcity-server.log. There will be a line stating something like:
[2015-09-17 22:05:00,494] INFO - jetbrains.buildServer.STARTUP - Administrator can login from web UI using authentication token: 11111...
That’s it. Hope you made it and found a use for this recipe.