TeamCity 2023.11: Matrix Build, Build Cache, and More
In TeamCity 2023.11, we’re introducing numerous highly anticipated features that make configuring builds easier. These include Matrix Build and Build Cache.
We’ve also enhanced integrations with Git hosting platforms, including GitHub, GitLab, Bitbucket, and Azure DevOps.
Furthermore, the improved TeamCity UI makes working with agent terminals even easier. The Favorite Agent Pool and Agent Parameter tabs provide a concise way of accessing important agent-related information. The completely reworked UI for the Amazon EC2 and S3 plugins simplifies working with these Amazon services.
Read on to learn more about what’s new.
TeamCity is happy to introduce a long-awaited feature: Matrix Build. Matrix builds are dynamically created separate builds with various configuration parameters.
The Matrix Build feature in TeamCity allows you to define a combination of parameters and corresponding values to create a matrix of build configurations. Each combination of parameter values generates a unique build configuration. The matrix build is then made up by several multiple builds that run separately.
For example, suppose you have two sets of parameters: one for the operating system (Windows, Linux, or macOS) and one for the browser (Chrome, Firefox, or Safari). You can now define a matrix of builds with a complete set of these parameter combinations. This will result in a total of nine build configurations (three operating systems multiplied by three browsers).
Matrix builds are useful when testing software across different configurations, such as operating systems or browser versions. By defining a matrix of build configurations, you can run the same set of tests across multiple parameter combinations within one build configuration, making it easier to review results and fix compatibility issues.
Learn more about how to set up matrix builds in our documentation.
In version 2023.11, we’re also introducing build caches to the list of build features in TeamCity. This feature provides the ability to store files and share them between builds.
In CI/CD, using single-use build agents is considered best practice. However, this approach imposes certain problems. With single-use build agents, heavy libraries need to be downloaded every time the build is run, slowing down the build time and causing delays. It also wastes resources by using unnecessary traffic from external locations such as Maven Central or the npm Registry.
Caches help you optimize your CI/CD runtime by downloading the files that your project depends on and then reusing them again within the project. After an initial build run, subsequent builds will run faster as you won’t have to download the same files again. This way, the build can start more quickly and will consume less traffic.
Caches are helpful in the following use cases:
- Speeding up dependencies that resolve in both generic and most used package managers, including Maven, npm, and .NET.
- Caching heavy computations, such as compilation cache.
- Asset caching.
With dependencies restored from cache, the system will only need to download new or updated dependencies as opposed to downloading everything from scratch every time the build runs. Customers who use short-lived cloud agents will also benefit from this new feature.
Learn more about build caches in our documentation.
Manually scheduling builds in custom run dialogs
TeamCity now gives users the ability to manually schedule a build to run on a specific day and time. As opposed to scheduling the build to run on a regular basis, any user who has the permissions to start a build can set the trigger to run it at a specific time.
This unique feature gives users more flexibility in deciding when exactly they want to run the build. This will help users avoid spending unnecessary time waiting to start the build.
Learn more about build scheduling in our documentation.
Using snapshot dependencies stored in VCS
There used to be a significant limitation when using settings from the VCS. Changes in snapshot dependencies were ignored, and TeamCity would continue using the snapshot dependencies from the previously applied settings.
Starting from this version, TeamCity can load custom snapshot dependencies, VCS roots, and checkout rules from settings stored in a version control system. You now have even more flexibility to edit versioned settings and create custom branches with settings that significantly differ from those in default or stable branches.
Read more about this new feature in our documentation.
Integrations with Git hosting platforms
TeamCity offers seamless integrations with Git hosting platforms, including GitHub, GitLab, and Bitbucket (both Cloud and Data Center).
Let’s take a closer look at what’s new.
Simplified GitHub App creation via manifest
In version 2023.05, we introduced a new type of connection to GitHub. Instead of utilizing the traditional OAuth-based access to repositories, you could use GitHub Apps.
Starting from version 2023.11, you can establish these connections more efficiently, eliminating the need for manual configuration and new app registration in GitHub.
To do this, go to Add Connection and select Automatic from the dropdown menu in the Creation Mode field. Add your GitHub server URL or organization’s name and let TeamCity do the rest.
Learn more about GitHub Apps from our documentation.
You can now issue refreshable access tokens for GitHub App connections using the Commit Status Publisher and Pull Requests build features, as well as on the GitHub Issue Tracker settings pages.
With this release, we’re enhancing Bitbucket authentication in several ways.
Now, in addition to app passwords and VCS root credential authentication types, TeamCity also supports refreshable and permanent access tokens as an authentication method for the Pull Requests build feature for Bitbucket Cloud.
Learn more in our documentation.
Bitbucket Server and Bitbucket Data Center
The Pull Requests feature can now use refreshable OAuth tokens to access repositories on Bitbucket Server or Bitbucket Data Center.
Learn more from our documentation.
Ignoring draft merge requests
A merge request in GitLab can be marked as a draft, which is the same as the draft status of pull requests in GitHub and Azure DevOps.
In version 2023.11, we added the functionality to ignore draft merge requests in the Pull Requests build feature.
Refreshable tokens for authentication
The Commit Status Publisher and Pull Requests features that target GitLab repositories can now also use refreshable application tokens to pass authentication.
Azure DevOps users can now also choose refreshable tokens from configured TeamCity connections.
Amazon EC2 updates
We introduced several Amazon EC2 features in TeamCity Cloud 2023.07. With this release, we’re also adding them to TeamCity On-Premises.
Specifying multiple subnets and instance types for EC2 cloud images
Previously, when setting up an EC2 cloud image in TeamCity, you could only select a single subnet for your virtual private cloud.
In most cases, however, users didn’t want to be restricted to just one subnet. Running an instance in a specific region instead of a particular subnet would make more sense, as this way, TeamCity can choose the most appropriate subnet in terms of available resources.
A combination of running instances in the scope of a region and using a few instance types gives you more reliable instance usage. TeamCity can now take the first option from the available combination and run an instance. If the selected subnet or instance type runs out of capacity, TeamCity will automatically switch to the second available option, and so on.
This update also simplifies the setup of cloud profiles. You no longer need to set up multiple cloud images just to achieve a regional scale and instance type diversity.
In addition, you can also select several instance types and security groups in TeamCity.
Share your feedback on the feature in this YouTrack issue.
Configuring agent image to launch an instance from the last created AMI with a given tag value
In TeamCity 2023.11, we’re also introducing the ability to configure the build agent to launch an instance from the last created AMI with a given tag value.
A custom image to run your build agents can be referenced by a unique AMI ID and reused by multiple build configurations.
Previously, all of these cloud images would have to be updated manually if this custom image were updated, as the AMI ID would also change. If there were many cloud profiles that used the same image, and you updated it, you’d have to go and manually update the ID in each of those cloud profiles.
You can now reference the most recently created AMI with a given tag value or combination. This means that, if you update the image, it will automatically be used by all compatible project and build configurations, saving a significant amount of time on maintenance.
Support for EC2 Mac instances
If you use EC2 Mac instances, you have to run builds on a specific bare metal machine. TeamCity now uses tags to find a dedicated Mac host suitable for running instances.
Thanks to this feature, your builds will run uninterrupted as long as there are available machines within the indicated tags.
Have a question or comment? Feel free to leave your feedback in this YouTrack issue.
Running AWS EC2 Spot Instance build agents using a Spot placement score
TeamCity has long supported Amazon EC2 Spot Instances, allowing you to place your bid on unused EC2 capacity and use it as long as your suggested price exceeds the current Spot price.
With the 2023.11 release, TeamCity now supports AWS Spot placement score. This feature will help users who use AWS EC2 to spin up build agents in a more stable and predictable manner.
Spot placement score comes in handy when you need to:
- Scale and relocate Spot Instance compute capacity in a different region.
- Identify the most optimal availability zone.
- Find an optimal combination of instance types to meet your Spot Instance capacity needs.
New UI for the EC2 plugin
With the 2023.11 release, we’re rethinking our approach to setting cloud profiles and images.
The credential configuration section was always visible on top of the page. This obstructed the view and made it cumbersome to make changes.
Given how often cloud images are updated, we’ve redesigned the Cloud Profile interface to make it easier to create new profiles and edit existing ones.
S3 plugin update
With version 2023.11, we’re introducing the following enhancements to the Amazon S3 plugin:
- Intuitive and streamlined UI designed with both Amazon S3 buckets and S3-compatible storages (such as MinIO, Backblaze B2, and others) in mind.
- Support for buckets with enabled Transfer Acceleration.
- Hassle-free setup with a reduced number of settings. All connection-related properties are now retrieved from a selected AWS connection. The AWS region is automatically obtained from the selected bucket.
- The ability to disable integrity verification that TeamCity carries out by default for all custom S3 storages.
Learn more about Amazon S3 and S3-compatible storages in TeamCity.
Favorite agent pools
We now provide users with the ability to mark certain agent pools as favorites and access them from a unified place. This comes in handy when a user needs to access the agent pools that they are responsible for.
To add an agent to the Favorite Agent Pools list, simply hover over the agent pool and click the star sign. Users can mark only those agent pools they have access to as favorites.
Reworked agent terminal UI
Agent terminals are a unique TeamCity feature that provides a convenient and quick way to get direct access to an agent machine by opening a remote terminal directly from the TeamCity UI. It is supported on Linux, Windows (with PowerShell), and macOS.
With the help of the agent terminal, you can investigate what exactly is happening on the agent.
Starting from version 2023.11, you don’t have to switch tabs in order to open agent terminals. They now open on the same page in the TeamCity UI.
You can also open the terminal for several agents at the same time. They will be conveniently displayed as tabs.
Revamped Agent Parameters tab in Sakura UI
Ever since Sakura became the default UI for TeamCity, our goal has been to reach full feature parity between the classic and Sakura UIs.
In TeamCity Cloud 2023.07, we introduced the revamped Agent Parameters tab for TeamCity Cloud users. Now, the updated UI is available for On-Premises users as well!
Build agents with bundled JDKs
TeamCity agents require a Java environment to start. Previously, when you installed a build agent, you’d also need to install a particular Java version required by that agent.
Starting from version 2023.11, it’s possible to create distributions of TeamCity agents that come with customized JDKs. These distributions provide the convenience of installing both an agent and its necessary JDK in a single operation.
To create a custom agent distribution, navigate to Administration | Agent JDKs and add a new JDK option. You’ll need to specify the platform, the architecture, and a link for TeamCity to download this specific JDK.
When a new option is added, TeamCity will start building your custom agent distribution. You can download custom agent and JDK bundles by clicking Install agent | Full distributions on the Agents | Overview page.
Thanks to this new feature, you can customize the Java version used on a specific agent, thus customizing the agent environment. This simplifies the complex build agent installation process and brings us one step closer to shipping the Build agent image builder feature that we’re actively working on.
Learn more about installing TeamCity agents here.
Prioritizing cloud images
TeamCity can work with multiple cloud images to start compatible agents. Public cloud providers charge for virtual machines differently, depending on the region of allocation. Different regions also provide different capacities.
As a result, agents in certain regions might become exhausted, while others might still have capacity but are more expensive.
TeamCity now allows prioritizing some cloud images over others. You can set up TeamCity to always run agents in the cheapest regions with a fallback option to more expensive ones.
This can help your team significantly save financial resources while still getting the best result from your agents.
Enhanced integration with Perforce Helix Swarm
Starting from version 2023.11, the TeamCity Perforce Helix Swarm publisher for the Commit Status Publisher build feature can be integrated with custom workflows that already exist in your Swarm setup. In addition, the feature no longer requires the credentials of users with administrator access.
It’s now possible to set up the integration without using Swarm administration-level credentials in TeamCity. The updated integration also allows including gates based on TeamCity checks into custom workflows.
Learn more in our documentation.
Other Perforce integration improvements
You can now reuse a prepared volume with Perforce sources checked out during a build at a known revision according to a client mapping or stream.
It is now also possible to specify a custom Perforce workspace name to be used by TeamCity during the agent-side checkout. To do this, set the configuration parameter
vcsroot.<VCSRootExternalID>.p4client. This parameter can also be set during a bootstrap step via the setParameter service message after the start of the build.
For the full list of new features, please check out our documentation.
Over to you
Have a question or comment regarding the new features? We’d love to hear from you!
Feel free to share your feedback in the comment section below.
Subscribe to Blog updates
Configuration as Code for TeamCity Using Terraform
We're introducing Terraform Provider for TeamCity, an new way for configuring your CI/CD infrastructure as code.
Critical Security Issue Affecting TeamCity On-Premises (CVE-2024-23917) – Update to 2023.11.3 Now
Summary A critical security vulnerability was identified in TeamCity On-Premises (initially discovered and reported by an external security researcher on January 19, 2024). This critical security vulnerability has been assigned the CVE identifier CVE-2024-23917 and presents the weakness CWE-2…