Skip to content

Commit

Permalink
Merged PR 11: PD-41: Initial stab at service versioning.
Browse files Browse the repository at this point in the history
PD-41: Initial stab at versioning.  This allows us to have services versioned major.minor.patch, with the major.minor portion controlled by a repo file (version.txt, so we can change it on branches etc) and the patch an automatic counter in Azure DevOps.

Some history of me trying to do this before (without yaml) on the last project:
microsoft/azure-pipelines-agent#1802

This is achieved with two jobs in the pipeline:
- one to read the file, exporting the majorMinor version as a variable
- the next job uses the majorMinor variable within a counter expression (so if the major minor version changes, the counter starts from zero again).  This job then has a step to set the build number.
  • Loading branch information
Simon Ness authored and Daniel May committed Dec 7, 2018
2 parents eed2adb + d2363ef commit 9036fd8
Show file tree
Hide file tree
Showing 5 changed files with 61 additions and 31 deletions.
1 change: 1 addition & 0 deletions src/Theta.Platform.UI.Instruments.API/version.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
0.0
1 change: 1 addition & 0 deletions src/Theta.Platform.UI.Orders.API/version.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
0.0
1 change: 1 addition & 0 deletions src/Theta.Platform.UI.Pricing.Streaming/version.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
0.0
87 changes: 56 additions & 31 deletions src/azure-pipelines.yml
Original file line number Diff line number Diff line change
@@ -1,7 +1,3 @@
pool:
vmImage: 'Ubuntu 16.04'


variables:
registryServerName: '$(registryName).azurecr.io'
imageName: '$(projectName)'
Expand All @@ -20,37 +16,66 @@ trigger:
# (see issue https://github.com/MicrosoftDocs/vsts-docs/issues/2691 raised on doc https://docs.microsoft.com/en-us/azure/devops/pipelines/build/triggers?view=vsts&tabs=yaml)
# for now follow steps in docs/Azure-DevOps-Pipelines.md

steps:
- task: DotNetCoreCLI@2
displayName: 'run unit tests'
inputs:
command: test
projects: '**/$(projectNamePath).Tests/*.csproj'
jobs:
- job: versioning
pool:
vmImage: 'vs2017-win2016'
steps:
- powershell: $(system.defaultWorkingDirectory)/src/get-major-minor-version.ps1
name: setMajorMinorStep
displayName: 'read major minor'
workingDirectory: $(system.defaultWorkingDirectory)/src/$(projectNamePath)
- script: echo "The Major Minor Version is $(setvarStep.majorMinor)"
name: echoMajorMinorStep
displayName: 'echo major minor'

- job: build
dependsOn: versioning

pool:
vmImage: 'Ubuntu 16.04'

variables:
majorMinor: $[dependencies.versioning.outputs['setMajorMinorStep.majorMinor']]
patch: $[counter(dependencies.versioning.outputs['setMajorMinorStep.majorMinor'])]

steps:
- bash: echo "The patch is $(patch)"
displayName: 'echo patch'

- bash: echo "##vso[build.updatebuildnumber]$(majorMinor).$(patch)"
displayName: 'update build number to major.minor.patch'

- task: DotNetCoreCLI@2
displayName: 'run unit tests'
inputs:
command: test
projects: '**/$(projectNamePath).Tests/*.csproj'

- script: docker build -f $(projectNamePath)/Dockerfile -t $(registryServerName)/$(imageName):$(build.buildId) .
displayName: 'docker build'
workingDirectory: 'src'
- script: docker build -f $(projectNamePath)/Dockerfile -t $(registryServerName)/$(imageName):$(build.buildNumber) .
displayName: 'docker build'
workingDirectory: 'src'

- bash: docker login $(registryServerName) -u $(registryLogin) -p $(registryPassword)
displayName: 'docker login'
- bash: docker login $(registryServerName) -u $(registryLogin) -p $(registryPassword)
displayName: 'docker login'

- bash: |
docker push $(registryServerName)/$(imageName):$(build.buildId)
displayName: 'docker push'
condition: succeeded()
- bash: |
docker push $(registryServerName)/$(imageName):$(build.buildNumber)
displayName: 'docker push'
condition: succeeded()
- task: HelmInstaller@0
displayName: 'Install Helm 2.11.0'
inputs:
helmVersion: 2.11.0
- task: HelmInstaller@0
displayName: 'Install Helm 2.11.0'
inputs:
helmVersion: 2.11.0

- bash: helm init --client-only --wait
displayName: 'helm init'
- bash: helm init --client-only --wait
displayName: 'helm init'

- bash: helm package --version $(build.buildId) --destination $(build.artifactStagingDirectory) $(projectNamePath)/charts/$(projectName)
displayName: 'helm package'
workingDirectory: 'src'
- bash: helm package --version $(build.buildNumber) --destination $(build.artifactStagingDirectory) $(projectNamePath)/charts/$(projectName)
displayName: 'helm package'
workingDirectory: 'src'

- bash: az acr helm push -n $(registryName) -u $(registryLogin) -p $(registryPassword) $(build.artifactStagingDirectory)/$(projectName)-$(build.buildId).tgz
displayName: 'az acr helm push'
condition: succeeded()
- bash: az acr helm push -n $(registryName) -u $(registryLogin) -p $(registryPassword) $(build.artifactStagingDirectory)/$(projectName)-$(build.buildNumber).tgz
displayName: 'az acr helm push'
condition: succeeded()
2 changes: 2 additions & 0 deletions src/get-major-minor-version.ps1
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
$line = Get-Content -Path "version.txt" -TotalCount 1
echo "##vso[task.setvariable variable=majorMinor;isOutput=true]$line"

0 comments on commit 9036fd8

Please sign in to comment.