When you create coverage reports for your .NET projects you have the ability to use the native logger mechanism in order to export a trx report with your results.
An example of this native functionality can be found below as the logger parameter is used along with dotnet test.
dotnet test keyvault.sln --logger "trx;logfilename=mytests.trx"
However if you try to upload this trx file in a sonarqube in order to get your coverage report result, this will fail with the below error message.
WARN: Could not import coverage report ‘.\Keyvault_MI_Pod\Tests\TestProject1\TestResults\mytests.trx’ because ‘Only dotCover HTML reports which start with “” are supported.’. Troubleshooting guide: https://community.sonarsource.com/t/37151
Using the below sonarqube documentation page you will find all the available methods that are supported for the coverage reporting. When you need to upload your coverage results in sonarqube you will need to use a tool from the list and upload the file that this tool generates.
.NET test coverage (sonarsource.com)
In my case I will use dotCover and create the relevant report file.
In the teamcity task (begin analysis) you will need to add in the additional parameters where you export your report.
Then in the pipeline you will need to add the dotnet test task as shown from the documentation.
dotnet dotcover test --dcReportType-HTML
In the finish task you will see the coverage report type is now compatible and can be parsed from sonarqube.
Finally you will have your coverage report inside sonarqube.
Sonarqube is a self-managed, automatic code review tool that systematically helps you deliver clean code. SonarQube integrates into your existing workflow and detects issues in your code to help you perform continuous code inspections of your projects. In this article we will examine how to integrate it with Teamcity in order to scan our workflows during build.
First you will need to install the sonar runner for your teamcity installation. You should go in the administration tab
and then plugins
Then browse plugin directory and install the sonar runner.
After that you should go in root project and integrate sonar tool with teamcity.
Press add a new server and provide Name, URL and the Token. Token can be retrieved from your sonar installation. Under Administration select security and create a new token with an expiry date.
Finally you can create a new build definition and use the sonar scanner plugin.
When you try to build a .NET6 solution using .NET7 as the latest installed version of SDK you may notice the below issue.
C:\Program Files\dotnet\sdk\7.0.302\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.Sdk.FrameworkReferenceResolution.targets(376,5): error NETSDK1127: The targeting pack Microsoft.NETCore.App is not installed. Please restore and try again.
This issue is related to some variables that are not set properly and the right location for the tools cannot be determined although they are installed inside the operating system.
The task is using the default .NET runner of Teamcity and the default MSbuild version is set to Cross-platform MSBuild.
Switch to another version of MSBuild will most probably resolve the issue. For example in the setup I was working switching to MSBuild Tools 2022 removed the issue and build could be performed successfully.
Teamcity can be integrated with Grafana in order to gather statistics about builds and agents activity. In order to gather those teamcity metrics you will need a prometheus installation and then a configuration for the teamcity source.
When you connect teamcity as a target on prometheus you have two options regarding an https secure communication. Either you trust the not verified certificate and place that in the configuration file, or you should enable tls communication with certificates between teamcity and prometheus.
If you do not set one of the two options on prometheus you might end up with the issue:
Get /app/metrics remote error: tls handshake failure
The first option as discussed would be to trust the insecure certificate using https.
The second option would be to communicate through certificates. First create a new folder inside your Prometheus installation and store the certificates for the teamcity server. Then you will need to point the files in the configuration.
The detailed options for tls_config in prometheus can be found below.
Configuration | Prometheus