Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
#Trigger builds only on the master branch
#Add additional options for more branches to target
trigger:
- master
#Run build for all Pull Requests targetting master branch
#Add additional options for more branches to target
pr:
- master
#Create a unique name for the build based on your project requirements
#BuildID is the unique ID for the build
name: $(Year:yy).$(Month).$(DayOfMonth).$(BuildID)-$(SourceBranchName)
variables:
AgentImage: "windows-latest" #See available agent images: https://docs.microsoft.com/en-us/azure/devops/pipelines/agents/hosted?view=azure-devops#use-a-microsoft-hosted-agent
system.debug: true #Setting debug to true will add extra output to the logs but can be useful while trying to determine full reason for failures
BuildConfiguration: 'Release'
stages:
- stage: 'Build_Stage' #Stage name cannot have spaces
displayName: 'Build' #Name displayed when viewing in Azure DevOps
jobs:
- job: 'Build_Job' #Job name cannot have spaces
displayName: 'Application Build' #Name displayed when viewing in Azure DevOps
pool:
vmImage: $(AgentImage) #See available agent images: https://docs.microsoft.com/en-us/azure/devops/pipelines/agents/hosted?view=azure-devops#use-a-microsoft-hosted-agent
steps:
- task: DotNetCoreInstaller@1
displayName: 'Use DotNet Core SDK'
inputs:
version: 3.x
- task: DotNetCoreCLI@2
displayName: Publish App
inputs:
command: publish #The publish command does a restore, build and creates a zip file so no need to add extra steps
publishWebProjects: true
zipAfterPublish: false
projects: '**/BasicCoreApp/*.csproj'
arguments: '--configuration $(BuildConfiguration) --output $(build.artifactstagingdirectory)/application'
- task: DotNetCoreCLI@2
displayName: Test
inputs:
command: test #Don't forget to test!
projects: '**/*.Tests.csproj'
arguments: '--configuration $(BuildConfiguration)'
- task: ArchiveFiles@2
displayName: 'Archive build'
inputs:
rootFolderOrFile: '$(build.artifactstagingdirectory)/application'
includeRootFolder: false
archiveFile: '$(build.artifactstagingdirectory)/app/application.zip'
- task: PublishBuildArtifacts@1
displayName: 'Publish Artifact'
inputs:
pathtoPublish: '$(build.artifactstagingdirectory)\app\application.zip' #Publish (different from the command used above) allows the artifact to be used in later jobs
artifactName: 'app'
- stage: 'Staging' #Stage name cannot have spaces
displayName: 'Staging' #Name displayed when viewing in Azure DevOps
dependsOn: ['Build_Stage'] #List of previous stages that must complete before this stage runs
variables:
- group: 'PipelineIntro_Staging' #The name of a Variable group in Azure DevOps
jobs:
- deployment: Deploy_Staging #No spaces
displayName: Staging Deployment #Name displayed in UI
pool:
vmImage: $(AgentImage) #variable that was defined previously (not shown in this snippet)
environment: Staging
strategy:
runOnce:
deploy:
steps:
- download: current
artifact: 'app'
- script: |
echo You can read this variable: $(Readme)
echo You cannot read this secret variable: $(Secret)
- task: ExtractFiles@1
displayName: 'Extract files'
inputs:
archiveFilePatterns: "$(Pipeline.Workspace)/app/application.zip"
destinationFolder: "$(Pipeline.Workspace)/files"
- task: AzureRmWebAppDeployment@4
displayName: 'Azure App Service Deploy'
inputs:
ConnectionType: 'AzureRM' #This is the default Value
WebAppKind: 'webApp' #This is the default value
azureSubscription: 'PipelineApp Azure Connection' #Name of the Service Connection previously created
WebAppName: 'stg-MWKS-PipelineApp' #Name of the App Service to be deployed to
Package: '$(Pipeline.Workspace)/files/BasicCoreApp' #Application files to be deployed
enableCustomDeployment: true #These two properties override the default of having
DeploymentType: 'webDeploy' #the pipeline deciding for us what it thinks the best deployment option should be
- stage: 'Production' #Stage name cannot have spaces
displayName: 'Production' #Name displayed when viewing in Azure DevOps
dependsOn: ['Build_Stage', 'Staging'] #List of previous stages that must complete before this stage runs
variables:
- group: 'PipelineIntro_Production' #The name of a Variable group in Azure DevOps
jobs:
- deployment: Deploy_Production #No spaces
displayName: Production Deployment #Name displayed in UI
pool:
vmImage: $(AgentImage) #variable that was defined previously (not shown in this snippet)
environment: Production
strategy:
runOnce:
deploy:
steps:
- download: current
artifact: 'app'
- script: |
echo You can read this variable: $(Readme)
echo You cannot read this secret variable: $(Secret)
- task: ExtractFiles@1
displayName: 'Extract files'
inputs:
archiveFilePatterns: "$(Pipeline.Workspace)/app/application.zip"
destinationFolder: "$(Pipeline.Workspace)/files"
- task: AzureRmWebAppDeployment@4
displayName: 'Azure App Service Deploy'
inputs:
ConnectionType: 'AzureRM' #This is the default Value
WebAppKind: 'webApp' #This is the default value
azureSubscription: 'PipelineApp Azure Connection' #Name of the Service Connection previously created
WebAppName: 'prod-MWKS-PipelineApp' #Name of the App Service to be deployed to
Package: '$(Pipeline.Workspace)/files/BasicCoreApp' #Application files to be deployed
enableCustomDeployment: true #These two properties override the default of having
DeploymentType: 'webDeploy' #the pipeline deciding for us what it thinks the best deployment option should be
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment