Skip to content

Automated CI/CD for Multiple Projects Using TeamCity Kotlin DSL

Automated CI/CD for Multiple Projects Using TeamCity Kotlin DSL

TeamCity Kotlin DSL

I described a way to organize low-delay products into multiple codebases, which are tied to the Maven Bill of Materials (BOM). Understandably, this requires continuous integration and deployment of a large number of similar projects. Manual maintenance of such a system, when faced with change, will take a lot of effort to ensure its stability.

In this article, I will describe how the team at Chronicle Software overcame these issues in different projects by writing code that does this for us in the Gatlin DSL format for TeamCity.

This guide will show you how to create identical CI / CD builds for multiple maven project repositories in a single setup, following the DRY (Don’t Repeat Yourself) policy.

Following it will require a basic knowledge of git, Maven, and TeamCity, but knowledge of the Kotlin language is not required as the code displayed is all self-explanatory.

Once you have configured the version settings for the TeamCity project, it will push a skeleton into the repository for selecting the Maven configuration project, with which we will work.

Configuration as code

First, we introduce our own product management code into configuration scripts by adding dependencies to teamcity/pom.xml. If you need a specific pro system file to be used during a bias judgment, such as referring to credentials for internal maven repositories, please upload them to TeamCity <Root project>’s Maven Settings tab under the name mavenSettingsDsl.xml.


The proven approach not only keeps our TeamCity configuration version audited, but also allows us to dramatically reduce the line number of configuration scripts because we redesign our products and define multiple build configurations for a product without repeating specifications, At the same time ensure that all buildings adhere to the same construction conditions and conditions. It makes sense to disable any manual configuration for the project and rely only on explicit, thoughtful configuration code changes.



Leave a Reply

Your email address will not be published. Required fields are marked *