Today, I was working on a new challenge. Setting up TeamCity with official JetBrains docker images.
TeamCity is a perfect tool if you need Continuous Integration solution. One day I hope I will write an article explaining why TeamCity is so great. Today I will concentrate on the technical steps only.
Official documentation is can be found here:
It was missing explanation how to set up PostgreSQL, so I will cover it here.
Step 1: Download docker images
First of all, you need to fetch JetBrains docker images and image for PostgreSQL. Run the following commands in the shell:
docker pull jetbrains/teamcity-server
docker pull jetbrains/teamcity-agent
docker pull postgres
Step 2: Setup PostgreSQL database
You need to start PostgreSQL service and then create an empty database used for TeamCity.
docker run --name postgres1 -e POSTGRES_PASSWORD=YOURPWD -d postgres
shell#: psql -U postgres -h postgres1_ip
Password for user postgres:
psql (9.5.7, server 9.6.3)
WARNING: psql major version 9.5, server major version 9.6.
Some psql features might not work.
Type "help" for help.
postgres=# CREATE ROLE teamcityuser with password 'NEWPWD' login;
postgres=# create database teamcitydb with owner teamcityuser;
postgres=# grant all on database teamcitydb to teamcityuser;
You need to change postgres1_ip with the real IP address used by docker. Check out this article how to determined what IP address of it.
Step 3: Check that db is ok
Make sure that you can continue to the new database. You can run the following command:
psql -U teamcityuser -h postgres1_ip teamcitydb
Step 4: Create dirs used to TeamCity
In my case I used the following commands:
Step 5: Start TeamCity docker image
docker run -d --name teamcity-server1 \
-v /opt/teamcity-server1/data:/data/teamcity_server/datadir \
-v /opt/teamcity-server1/logs:/opt/teamcity/logs \
-p 8111:8111 \
Step 6: Open your browser
Open your browser to continue installation from that point. You need to connect to port 8111 on your server – a default port used by TeamCity.
In my case I got the following screen:
Step 7: Install Java PostgreSQL library
TeamCity comes with no JDBC driver library to connect to PostgreSQL. You need to install it. During TeamCity installation, if you chose PostgreSQL you will get the following message:
The PostgreSQL JDBC driver is not found in the /data/teamcity_server/datadir/lib/jdbc directory. Download the JDBC42 driver from jdbc.postgresql.org and place it to this directory.
As of the time of writing the latest version is 42.1.3. So I use the following command to fetch the library and copy it inside the running Docker container:
docker cp postgresql-42.1.3.jar teamcity-server1:/data/teamcity_server/datadir/lib/jdbc
Step 8: Configure PostrgreSQL connection settings
During the setup, you will need to select PostgreSQL (as 1 below):
2 You might need to click on Refresh, to load PostgreSQL JDBC driver. As for 3, you need to enter IP address of the PostgreSQL docker container as above.
After that, the installation will ask you to confirm the application license and you are done.
Step 9: Start TeamCity agent
TeamCity used agents to do actual code building and tests and deployment. I am running TeamCity agents as docker containers too. To start the agent you can use the following command:
docker run -d --name teamcity-agent1 \
-e SERVER_URL="TEAMCITY_DOCKER-IP:8111" \
-e AGENT_NAME="agent1" \
-v /opt/teamcity-agent1:/data/teamcity_agent/conf \
-v /var/run/docker.sock:/var/run/docker.sock \
You can use similar commands to start agent2 and agent3.
Step 10: Approving agents and you are done!
Go to Agents -> Unauthorized. Select agent1 and approve it as shown below:
I hope you find this tutorial helpful in your journey to install the TeamCity 🙂
About the author
For the past 15 years I’ve been leading the evolution of startups and enterprises to achieve the highest level of security and compliance. Throughout my career I’ve been a Cyber Security expert and advanced solutions architect with many years of hands on experience both on offensive and defensive side. Knowledgeable at the highest level in application development, networking, data and databases, web applications, large scale Software as a Service solutions, cloud security and blockchain technologies.
I’ve been working with CISO’s of international enterprises, helping them set Information Security strategy, and overseeing the implementation of these recommendations. As part of these projects, I’ve been assisting companies to achieve compliance in GDPR, PCI, HIPAA and SOX.
Among my credits, I was a founder of a database security company GreenSQL/Hexatier which was acquired by Huawei and I’ve co-founded Kesem.io, Secure multi-signature Crypto wallet.
Specialties: Software and cloud architecture, Compliance (GDPR, HIPAA, PCI, SOX), blockchain technologies, software development, secure architectures, project management and low level research.