Devops + CI/CD-part 5
WebAPI2CLI
This is a part of the series where about how I made the WebAPI2CLI - Execute ASP.NET Core WebAPI from Command LineSource code on https://github.com/ignatandrei/webAPI2CLI/
What I need for the devops:
1. Building the solution
2. Running tests
3. Deploying packages to Nuget
Being part of the Microsoft stack, it is normal that I have choose for CI / CD the Azure Devops.
You can see the AzureDevops at https://dev.azure.com/ignatandrei0674/WebAPI2CLI/_build?definitionId=7&_a=summary and how it is done by reading https://github.com/ignatandrei/WebAPI2CLI/blob/master/azure-pipelines.yml
Seeing code coverage in AzureDevops
I need not only to know that tests have runned with success, but also to see the code coverage
For this I use the .NET local tools, coverlet and report generator
dotnet coverlet bin\$(buildConfiguration)\netcoreapp3.1\CLITests.dll –target “dotnet” –targetargs “test –no-build –configuration $(buildConfiguration)” –exclude ‘[*Test*]*’ –format opencover –output $(Build.ArtifactStagingDirectory)\testResults\coverlet.xml
dotnet reportgenerator “-reports:$(Build.ArtifactStagingDirectory)\testResults\coverlet.xml” “-targetdir:$(Build.ArtifactStagingDirectory)\testResults” “-reporttypes:Cobertura;HtmlSummary;Badges;HtmlInline_AzurePipelines”
– task: PublishTestResults@2
inputs:
testResultsFormat: ‘VSTest’
testResultsFiles: ‘**/*.trx’
searchFolder: ‘$(Build.ArtifactStagingDirectory)\trx’
displayName: publish tests
– task: PublishCodeCoverageResults@1
displayName: ‘Publish code coverage’
inputs:
codeCoverageTool: Cobertura
summaryFileLocation: ‘$(Build.ArtifactStagingDirectory)\testResults\Cobertura.xml’
reportDirectory: ‘$(Build.ArtifactStagingDirectory)\testResults’
In this way , you can see the
Modify version
For a good CD I need also a way to modify the version automatically.
The .Net local Tools provides a way to install some tools on the local system to be run within dotnet.
So I install pwsh -and run a setversion.ps1
$TimeNow = Get-Date
$d = $TimeNow.ToUniversalTime()
$year = $TimeNow.Year
$startOfYear = Get-Date -Year $year -Month 1 -Day 1 -Hour 0 -Minute 0 -Second 0 -Millisecond 0
$diff = NEW-TIMESPAN -Start $startOfYear -End $TimeNow
#$diff.TotalSeconds -as [int]
$assemblyVersion=$d.ToString(“1.yyyy.1MMdd.1HHmm”)
dotnet-property “**/*.csproj” AssemblyVersion:”$assemblyVersion”
dotnet dotnet-property “**/*.csproj” AssemblyVersion:”$assemblyVersion”
$version=$d.ToString(“1.0.yyyy.”) + ($diff.TotalSeconds -as [int]).ToString()
dotnet-property “**/*.csproj” Version:”$version”
dotnet dotnet-property “**/*.csproj” Version:”$version”
$releaseNotes = “BuildNumber $env:BUILD_BUILDNUMBER”
$releaseNotes += “;author $env:BUILD_SOURCEVERSIONAUTHOR”
$releaseNotes += “;message $env:BUILD_SOURCEVERSIONMESSAGE”
$releaseNotes +=”;source for this release github.com/ignatandrei/webAPI2CLI/commit/$env:BUILD_SOURCEVERSION”
$releaseNotes
dotnet-property “**/*.csproj” PackageReleaseNotes:”$releaseNotes”
dotnet dotnet-property “**/*.csproj” PackageReleaseNotes:”$releaseNotes”
I think that it is self explanatory.
Be a good nuget citizen –do not deploy every time a modification is made
For this I use devops variable : deployNuget: ‘0’
– task: NuGetCommand@2
condition: and(succeeded(), eq(variables[‘deployNuget’], ‘1’))
inputs:
command: push
nuGetFeedType: external
packagesToPush: ‘$(Build.ArtifactStagingDirectory)/**/*.symbols.nupkg’
publishFeedCredentials: ‘nugetAndrei’
displayName: ‘dotnet nuget push’
Be a good AzureDevops citizen – do not run automation every time
I have some documentation on .md files – no need to rebuild everything when just the documentation is done
This is done in AzureDevOps by the trigger:
trigger:
branches:
include:
– master
paths:
exclude:
– docs/*
– README.md
Test your application
I also can test in AzureDevops what I have done by runnning
TestWebAPISite.exe –CLI_ENABLED=1 –CLI_Commands=”GetMathId_Http,MathPOST”
It is just nice – maybe I can find a way to do something practical …
Leave a Reply