Added: CI and CD stages

This commit is contained in:
James Flynn 2021-03-02 15:58:26 +00:00
parent 817287ce04
commit 5ef90348d4

View file

@ -21,87 +21,98 @@ variables:
# see: https://docs.microsoft.com/en-us/azure/devops/pipelines/process/run-number?view=azure-devops&tabs=yaml # see: https://docs.microsoft.com/en-us/azure/devops/pipelines/process/run-number?view=azure-devops&tabs=yaml
name: $(Build.DefinitionName).$(SourceBranchName).$(Date:yyyyMMdd)$(Rev:.r) name: $(Build.DefinitionName).$(SourceBranchName).$(Date:yyyyMMdd)$(Rev:.r)
jobs: stages:
- job: BuildTestDeploy - stage: CI
displayName: Build Test and Deploy spring-petclinic Java Web App displayName: 'Continuous Integration'
steps: dependsOn: []
- script: echo $(SonarExtraProperties) jobs:
- job: BuildTestDeploy
displayName: Build Test and Deploy spring-petclinic Java Web App
steps:
# Azure DevOps extension for configuring SonarCloud properties # Azure DevOps extension for configuring SonarCloud properties
# see: https://marketplace.visualstudio.com/items?itemName=SonarSource.sonarcloud # see: https://marketplace.visualstudio.com/items?itemName=SonarSource.sonarcloud
- task: SonarCloudPrepare@1 - task: SonarCloudPrepare@1
displayName: 'Prepare SonarCloud Code Analysis Scan' displayName: 'Prepare SonarCloud Code Analysis Scan'
inputs: inputs:
# Azure DevOps Service Connection is used in place of secureSonar Token value within repo. # Azure DevOps Service Connection is used in place of secureSonar Token value within repo.
# For configuring, see: https://docs.microsoft.com/en-us/azure/devops/pipelines/library/service-endpoints?view=azure-devops&tabs=yaml # For configuring, see: https://docs.microsoft.com/en-us/azure/devops/pipelines/library/service-endpoints?view=azure-devops&tabs=yaml
SonarCloud: 'sonarcloud-svc-connection' SonarCloud: 'sonarcloud-svc-connection'
organization: 'james-flynn-ie' organization: 'james-flynn-ie'
scannerMode: 'Other' scannerMode: 'Other'
ProjectKey: 'james-flynn-ie_spring-petclinic' ProjectKey: 'james-flynn-ie_spring-petclinic'
ProjectName: 'spring-petclinic' ProjectName: 'spring-petclinic'
extraProperties: $(SonarExtraProperties) extraProperties: '$(SonarExtraProperties)'
# https://docs.microsoft.com/en-us/azure/devops/pipelines/tasks/build/maven?view=azure-devops # https://docs.microsoft.com/en-us/azure/devops/pipelines/tasks/build/maven?view=azure-devops
- task: Maven@3 - task: Maven@3
displayName: 'Maven Build, Test and Package' displayName: 'Maven Build, Test and Package'
inputs: inputs:
mavenPomFile: 'pom.xml' mavenPomFile: 'pom.xml'
# 'clean install sonar:sonar' is required to run the Sonarcloud scan ('package' creates the JAR). # 'clean install sonar:sonar' is required to run the Sonarcloud scan ('package' creates the JAR).
# see: https://www.coachdevops.com/2020/04/how-to-integrate-sonarqube-in-azure.html # see: https://www.coachdevops.com/2020/04/how-to-integrate-sonarqube-in-azure.html
goals: 'clean install sonar:sonar package' goals: 'clean install sonar:sonar package'
publishJUnitResults: true publishJUnitResults: true
testResultsFiles: '**/TEST-*.xml' testResultsFiles: '**/TEST-*.xml'
testRunTitle: '$(Build.BuildNumber)' testRunTitle: '$(Build.BuildNumber)'
javaHomeOption: 'JDKVersion' javaHomeOption: 'JDKVersion'
jdkVersionOption: '1.11' jdkVersionOption: '1.11'
mavenVersionOption: 'Default' mavenVersionOption: 'Default'
mavenOptions: '-Xmx3072m' mavenOptions: '-Xmx3072m'
mavenAuthenticateFeed: false mavenAuthenticateFeed: false
effectivePomSkip: false effectivePomSkip: false
sonarQubeRunAnalysis: true sonarQubeRunAnalysis: true
sqMavenPluginVersionChoice: 'latest' sqMavenPluginVersionChoice: 'latest'
# Adds results and link to sonarcloud.io reports under 'Extensions' tab on pipeline run report. # Adds results and link to sonarcloud.io reports under 'Extensions' tab on pipeline run report.
# see: https://marketplace.visualstudio.com/items?itemName=SonarSource.sonarcloud # see: https://marketplace.visualstudio.com/items?itemName=SonarSource.sonarcloud
- task: SonarCloudPublish@1 - task: SonarCloudPublish@1
displayName: 'Publish Quality Gate Result on SonarCloud' displayName: 'Publish Quality Gate Result on SonarCloud'
inputs: inputs:
pollingTimeoutSec: '300' pollingTimeoutSec: '300'
# https://docs.microsoft.com/en-us/azure/devops/pipelines/tasks/utility/copy-files?view=azure-devops&tabs=yaml # https://docs.microsoft.com/en-us/azure/devops/pipelines/tasks/utility/copy-files?view=azure-devops&tabs=yaml
- task: CopyFiles@2 - task: CopyFiles@2
displayName: 'Copy Files to artifact staging directory' displayName: 'Copy Files to artifact staging directory'
inputs: inputs:
SourceFolder: '$(System.DefaultWorkingDirectory)' SourceFolder: '$(System.DefaultWorkingDirectory)'
Contents: '**/target/*.?(war|jar)' Contents: '**/target/*.?(war|jar)'
TargetFolder: $(Build.ArtifactStagingDirectory) TargetFolder: $(Build.ArtifactStagingDirectory)
preserveTimestamp: true preserveTimestamp: true
# Publish build artifacts to Azure Pipelines (Continuous Delivery). # Publish build artifacts to Azure Pipelines (Continuous Delivery).
# Build artifacts are retained and can be downloaded for local use, or used in other stages or pipeline runs for deployments. # Build artifacts are retained and can be downloaded for local use, or used in other stages or pipeline runs for deployments.
# https://docs.microsoft.com/en-us/azure/devops/pipelines/tasks/utility/publish-build-artifacts?view=azure-devops # https://docs.microsoft.com/en-us/azure/devops/pipelines/tasks/utility/publish-build-artifacts?view=azure-devops
- task: PublishBuildArtifacts@1 - task: PublishBuildArtifacts@1
inputs: inputs:
pathToPublish: '$(Build.ArtifactStagingDirectory)/target' pathToPublish: '$(Build.ArtifactStagingDirectory)/target'
artifactName: 'jar-artifact' artifactName: 'jar-artifact'
publishLocation: 'Container' # Publishes inside Azure Pipelines artifact folder. publishLocation: 'Container' # Publishes inside Azure Pipelines artifact folder.
parallel: true # Increased speed through multi-threaded copying. parallel: true # Increased speed through multi-threaded copying.
parallelCount: 8 # Dependent upon CPU capabilities. parallelCount: 8 # Dependent upon CPU capabilities.
# Deploy JAR into Azure Web App Service https://docs.microsoft.com/en-us/azure/app-service/overview - stage: CI
# Azure App Service offers a Web application hosting Platform-as-a-Service, offering: displayName: 'Continuous Deployment'
# - Security dependsOn: [CI]
# - Load balancing condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/main'))
# - High Availability and autoscaling (based on policies) jobs:
# For pipeline configuration, see: https://docs.microsoft.com/en-us/azure/devops/pipelines/tasks/deploy/azure-rm-web-app?view=azure-devops - job: DeployWebApp
- task: AzureWebApp@1 displayName: Build Test and Deploy spring-petclinic Java Web App
displayName: Deploy spring-petclinic to Azure Web App service steps:
inputs: # Deploy JAR into Azure Web App Service https://docs.microsoft.com/en-us/azure/app-service/overview
# For configuring Service Connection, see: https://docs.microsoft.com/en-us/azure/devops/pipelines/library/service-endpoints?view=azure-devops&tabs=yaml # Azure App Service offers a Web application hosting Platform-as-a-Service, offering:
azureSubscription: 'azure-svc-connection' # - Security
appType: webAppLinux # - Load balancing
appName: 'james-pet-clinic' # - High Availability and autoscaling (based on policies)
package: '$(System.DefaultWorkingDirectory)/**/*.jar' # For pipeline configuration, see: https://docs.microsoft.com/en-us/azure/devops/pipelines/tasks/deploy/azure-rm-web-app?view=azure-devops
# Only deploy web app from main branch (for release purposes) - task: AzureWebApp@1
condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/main')) displayName: Deploy spring-petclinic to Azure Web App service
inputs:
# For configuring Service Connection, see: https://docs.microsoft.com/en-us/azure/devops/pipelines/library/service-endpoints?view=azure-devops&tabs=yaml
azureSubscription: 'azure-svc-connection'
appType: webAppLinux
appName: 'james-pet-clinic'
package: '$(System.DefaultWorkingDirectory)/**/*.jar'
# Only deploy web app from main branch (for release purposes)
condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/main'))
... ...