Jack
02/18/2025, 4:13 PMJack
02/18/2025, 4:36 PMyaml
stages:
- stage: Build
jobs:
- job:
steps:
# Set node version
- task: NodeTool@0
displayName: 'Use Node 20.10.0'
inputs:
versionSpec: 20.10.0
# Install npm packages
- task: Npm@1
displayName: 'npm install'
inputs:
workingDir: ${{ parameters.workingDir }}
verbose: false
# Install npm packages (ui)
- task: Npm@1
displayName: 'npm install (ui)'
inputs:
workingDir: ${{ parameters.uiFolder }}
verbose: false
# Caching NuGet packages
- task: Cache@2
inputs:
key: 'nuget | "$(Agent.OS)" | nuget.config,**/*.csproj'
restoreKeys: |
nuget | "$(Agent.OS)"
path: $(Pipeline.Workspace)/.nuget
# Authenticate with NuGet
- task: NuGetAuthenticate@1
# Restore project
- task: DotNetCoreCLI@2
displayName: Restore
inputs:
command: restore
projects: '${{ parameters.restoreBuildProjects }}'
feedsToUse: config
nugetConfigPath: 'nuget.config'
restoreDirectory: $(Pipeline.Workspace)/.nuget
# Build project
- task: DotNetCoreCLI@2
displayName: Build
inputs:
projects: '${{ parameters.restoreBuildProjects }}'
arguments: '--configuration ${{ parameters.buildConfiguration }} --no-restore'
verbosityRestore: Detailed
verbosityPack: Detailed
# Build project
- task: DotNetCoreCLI@2
displayName: Publish
inputs:
command: publish
publishWebProjects: false
zipAfterPublish: true
projects: '${{ parameters.restoreBuildProjects }}'
arguments: '--configuration ${{ parameters.buildConfiguration }} --output ${{ parameters.outputDirectory }} --no-restore --no-build'
Jack
02/18/2025, 4:37 PMyaml
- task: PublishBuildArtifacts@1
displayName: 'Publish Artifact: drop'
inputs:
PathtoPublish: '${{ parameters.outputDirectory }}'
ArtifactName: 'drop'
condition: succeeded()
Jack
02/18/2025, 4:39 PMyaml
stages:
- stage: Deploy
dependsOn:
- Build
jobs:
- job: Deploy
steps:
- checkout: none # This prevents the automatic checkout of the repository, it is not needed for this job
- download: current
artifact: drop
patterns: '**/*.zip'
- task: AzureRmWebAppDeployment@4
displayName: 'Deploy Azure App Service to staging slot'
inputs:
azureSubscription: '${{ parameters.azureServiceSubscription }}'
appType: 'webApp'
WebAppName: '${{ parameters.appServiceName }}'
packageForLinux: '${{ parameters.packageDir }}'
enableCustomDeployment: true
ExcludeFilesFromAppDataFlag: false
DeploymentType: 'webDeploy'
SlotName: staging
deployToSlotOrASE: true
ResourceGroupName: '${{ parameters.resourceGroupName }}'
RemoveAdditionalFilesFlag: true
- task: AzureAppServiceManage@0
displayName: 'Swap staging slot to production'
inputs:
azureSubscription: '${{ parameters.azureServiceSubscription }}'
WebAppName: '${{ parameters.appServiceName }}'
ResourceGroupName: '${{ parameters.resourceGroupName }}'
SourceSlot: staging
SwapWithProduction: true
Matthew Hart
02/19/2025, 3:25 PMMatthew Hart
02/19/2025, 3:27 PMJack
02/19/2025, 4:34 PMMatthew Hart
02/19/2025, 4:40 PMJack
02/19/2025, 4:40 PMMatthew Hart
02/19/2025, 4:43 PMMatthew Hart
02/19/2025, 4:44 PMJack
02/19/2025, 4:47 PMMatthew Hart
02/19/2025, 4:51 PMMatt Wise
02/19/2025, 4:55 PMJack
02/19/2025, 4:55 PMMatthew Hart
02/19/2025, 4:58 PMMatt Wise
02/19/2025, 5:00 PMMatthew Hart
02/19/2025, 5:04 PMMatthew Hart
02/19/2025, 5:05 PMJack
02/19/2025, 5:07 PMMatthew Hart
02/19/2025, 5:09 PMMatthew Hart
02/19/2025, 5:11 PMJack
02/19/2025, 5:12 PMMatthew Hart
02/19/2025, 5:15 PMJack
02/19/2025, 5:23 PMJack
02/19/2025, 5:24 PMMatt Wise
02/19/2025, 5:24 PMJack
02/19/2025, 5:28 PMJack
02/19/2025, 5:29 PMJack
02/19/2025, 5:37 PMJack
02/19/2025, 5:39 PMJack
02/19/2025, 5:40 PMJack
02/19/2025, 5:42 PMJack
02/19/2025, 5:44 PMMatt Wise
02/19/2025, 5:45 PMJack
02/19/2025, 5:52 PMJack
02/19/2025, 5:54 PMJack
02/19/2025, 5:57 PMMatt Wise
02/19/2025, 6:01 PMJack
02/20/2025, 10:28 AMJack
02/20/2025, 10:30 AMJack
02/20/2025, 10:36 AMJack
02/20/2025, 10:38 AMJack
02/20/2025, 10:49 AMMatt Wise
02/20/2025, 1:38 PMJack
02/20/2025, 3:18 PMMatt Wise
02/20/2025, 3:41 PMparameters:
appUrl: ''
steps:
- task: Bash@3
displayName: "Verify application URL has started"
inputs:
targetType: 'inline'
script: |
retry_count=0
max_retries=5
while [ $retry_count -lt $max_retries ]; do
if curl -f -s -o /dev/null "${{ parameters.appUrl }}"; then
echo "Application URL responded successfully."
exit 0
else
echo "Attempt $((retry_count + 1)) failed. Retrying in 5 seconds..."
retry_count=$((retry_count + 1))
sleep 5
fi
done
echo "Application URL did not respond successfully after $max_retries attempts."
exit 1
condition: succeeded()
Jack
02/20/2025, 3:48 PMMatt Wise
02/20/2025, 4:42 PMMatt Wise
02/20/2025, 4:42 PMMatthew Hart
02/21/2025, 9:40 AMJack
02/26/2025, 3:17 PMMatt Wise
02/26/2025, 3:18 PMJack
02/26/2025, 3:18 PMJack
02/26/2025, 3:34 PMJack
02/26/2025, 3:50 PMMatt Wise
02/26/2025, 4:15 PMMatt Wise
02/26/2025, 4:15 PMKevin Jump
02/26/2025, 4:35 PMJack
03/13/2025, 2:25 PMMatt Wise
03/13/2025, 4:22 PMSΓΈren Mastrup
03/14/2025, 8:06 AMLuuk Peters (ProudNerds)
03/14/2025, 2:51 PMJack
03/18/2025, 6:13 AMMatt Wise
03/18/2025, 9:11 AMLuuk Peters (ProudNerds)
03/18/2025, 9:27 AMMatt Wise
03/18/2025, 9:31 AMLuuk Peters (ProudNerds)
03/18/2025, 9:32 AMMatt Wise
03/18/2025, 9:33 AMLuuk Peters (ProudNerds)
03/18/2025, 10:00 AMMatt Wise
03/18/2025, 10:14 AMJack
03/21/2025, 6:54 AMJack
03/21/2025, 7:14 AMLuuk Peters (ProudNerds)
03/21/2025, 9:12 AMLuuk Peters (ProudNerds)
03/21/2025, 9:12 AMJack
03/21/2025, 9:16 AMJack
04/09/2025, 12:35 PMJack
04/09/2025, 1:32 PMLuuk Peters (ProudNerds)
04/09/2025, 1:35 PMJack
04/09/2025, 1:37 PMJack
04/09/2025, 1:43 PMkows
04/19/2025, 10:42 PMkows
04/19/2025, 10:43 PMUMBRACO__CMS__GLOBAL__MAINDOMKEYDISCRIMINATOR
Umbraco__CMS__Hosting__SiteName
kows
04/19/2025, 10:46 PMJack
04/28/2025, 6:07 AM