Azure DevOps, GitHub and many other sources provide this as a service and once you've converted to using it you'll never go back. We use Azure DevOps for our code and CI/CD capabilities so it was pretty easy to upgrade.
Most of our libraries were written a while ago and used the "classic" build tool, which had a GUI interface and helped you create the build pipeline. However, it was really tedious to use on lots of projects, as you had to manually re-create the same process over and over for each one.
The newest hotness is the Azure Pipelines YAML support - you can now add a build file to source control and then configure a build pipeline to use this. The build pipeline is now part of the source control process and you can edit/upgrade/copy these more easily.
As most of my libraries follow a standard format I re-used the same .YML file in each project, just editing a single line to specify which project I wanted to package into a Nuget library.
Once I'd pushed the repository up to Azure DevOps, I just created a new pipeline and pointed it at the YML file in the repo.
# dotnet standard library build-test-pack-nugetpush
# This build is triggered if changes are pushed to the master branch
trigger:
- master
# Use the 'Default' agent pool (our own hosted agents)
# if you want to use Azure DevOps built-in agents, change to
# vmImage: 'ubuntu-latest'
# or
# vmImage: 'windows-latest'
# since this is proejct .NET Std and .NET Core either will work
# if it still has .NET Framework, use the windows version
pool:
name: Default
variables:
solution: '**/*.sln'
buildPlatform: 'Any CPU'
buildConfiguration: 'Release'
project: '[project-folder]/[project-name].csproj'
# this is used to signal which project is to be packaged into a Nuget package
steps:
# ensure the latest 3.1.x SDK is loaded for the build
- task: UseDotNet@2
displayName: 'Load SDK using 3.1.x'
inputs:
version: 3.1.x
# restore packages, and include any in our internal feed
- task: DotNetCoreCLI@2
displayName: 'restore packages'
inputs:
command: restore
vstsFeed: '[internal-feed-ID]'
- task: DotNetCoreCLI@2
displayName: Build solution
inputs:
projects: '$(solution)'
arguments: '--configuration $(BuildConfiguration)'
- task: DotNetCoreCLI@2
displayName: Run Unit tests
inputs:
command: test
projects: '$(solution)'
arguments: '--configuration $(BuildConfiguration)'
# this is a VSTS task I created to set environment variables from the project
# version and append the build number (it's in the marketplace)
#
# the old NUGET PACK used to allow wildcards e.g. 1.2.* but "dotnet pack" does not.
# e.g. if the project is version 1.2.3 this sets VERSION_BUILD to 1.2.3.[buildNo]
# Note: this uses PowerShell so won't work for ubuntu agents
#
- task: conficient.VersionReaderTask.version-reader-build-task.VersionReaderTask@1
displayName: 'Generate build variables '
inputs:
searchPattern: '$(project)'
buildPrefix: '.'
# package the project and version using the environment variable
- task: DotNetCoreCLI@2
displayName: Pack
inputs:
command: pack
packagesToPack: '$(project)'
versioningScheme: byEnvVar
versionEnvVar: 'VERSION_BUILD'
# push the .nupkg packages to our internal Nuget feed
- task: DotNetCoreCLI@2
displayName: 'Push'
inputs:
command: 'push'
packagesToPush: '$(Build.ArtifactStagingDirectory)/*.nupkg'
nuGetFeedType: 'internal'
publishVstsFeed: '[internal-feed-ID]' # change this to your feed
# I've commented the pipeline to help you understand what each part does
No comments:
Post a Comment