I recently moved a build-job for our front-end library over to Azure Pipelines. This build-job builds multiple TypeScript projects where each one produces its own NPM package using the Lerna mono-repo toolkit.
We manage the version of the packages using the Lerna CLI. Lerna updates all the projects package.json as well as a file called
lerna.json in the root of the repo.
The goal for our release build-job was to update the
BuildNumber of the job instance from within the running build-job to the version configured in
lerna.json and suffix it with the original build-number (which is a increasing integer number). The build-job should be listed as
22.214.171.1248 instead of
I created a little PowerShell script which I checked into the repo and added it as one of the first build steps to the build-job.
$lernaPath = "$Env:BUILD_SOURCESDIRECTORY\lerna.json" $json = Get-Content "$lernaPath" | Out-String | ConvertFrom-Json $version = $json.version $buildNumber = $Env:BUILD_BUILDNUMBER; Write-Host "##vso[build.updatebuildnumber]$version.$buildNumber"
The first line gets the path of the
lerna.json. The second line reads the file content and converts its JSON content into a PowerShell object. The fourth line gets the version number out of that object. The fifth line gets the original build-number from Azure Pipelines using the environment variable.
The most important line ist the last one. It writes a special text to the console which gets interpreted by Azure Pipelines. The
##vso[... is the trigger for Azure Pipelines. The function
build.updatebuildnumber is the Azure Pipeline function that should be called. Finally the
$version is the variable assigned in line three and
$buildNumber the variable from line four. The both variables get concat with a