Our TeamCity configuration may not change often depending on the project, but when they do they could introduce a slew of headaches when “things don’t work no mo”. So to deal with our anxiety of updating our configuration in TeamCity when “things don’t work no mo” a week later and we forget who changed what, we need to have some mechanism of tracking our changes.
Storing our configuration in version control is ideally what we want to achieve on software projects. In “Continuous Delivery” by Jez Humble and David Farley, they advocate for keeping everything in version control, with the mindset that your configuration should be treated with just as much care as your code.
Since TeamCity 9, Jetbrains has provided developers Versioned Settings, the option to store the entire TeamCity snapshot as xml files in any target repo. This adds tremendous value to our CI pipeline because we now can keep track of all the changes made to our build configurations and rollback to a working state any time.
With Teamcity 10, Jetbrains is taking Versioned Settings a step further by making configuration programmatic with their hand rolled DSL called Kotlin, a concise java-esque programming language that runs on the JVM and builds out of Maven.