I managed to get Erik's approach working which is great.
I then wondered if I could simplify it so instead of deleting the content how about put each artifact in a sub folder of the $(Build.ArtifactStagingDirectory) So by just appending /Api or /App I could create specific publish folders that I could then push onto the azure pipeline.
You can then have as many artifacts as you need :)
The important parts to take from this are that publishWebProjects needs to be set to false or it defaults to true and then ignores the projects line below, and the output path puts the content in a sub folder.
# This need to be false in order for the specific project to be published
publishWebProjects: False
projects: '**/DevOpsApp.csproj'
arguments: '--configuration $(BuildConfiguration) --output $(Build.ArtifactStagingDirectory)/App'
and pathtoPublish need to then point to the sub folder
pathtoPublish: '$(Build.ArtifactStagingDirectory)/App'
Full example file below
# ASP.NET Core
# Build and test ASP.NET Core projects targeting .NET Core.
# Add steps that run tests, create a NuGet package, deploy, and more:
# https://docs.microsoft.com/azure/devops/pipelines/languages/dotnet-core
trigger:
- develop
pool:
vmImage: 'ubuntu-latest'
variables:
buildConfiguration: 'Release'
versionNumber: 1.0.0
name: $(versionNumber)-wip-$(Rev:r)
#----------------------------------------------------------
# Web API Build and Artifact
#----------------------------------------------------------
steps:
- task: DotNetCoreCLI@2
displayName: 'Build'
inputs:
command: 'build'
projects: '**/DevOpsApi.csproj'
arguments: '--configuration $(buildConfiguration)'
- task: DotNetCoreCLI@2
inputs:
command: 'test'
projects: '**/*Tests.csproj'
arguments: '--configuration $(buildConfiguration)'
testRunTitle: 'Unit Tests'
# Publish the artifact
- task: DotNetCoreCLI@2
inputs:
command: 'publish'
# This need to be false in order for the specific project to be published
publishWebProjects: False
projects: '**/DevOpsApi.csproj'
arguments: '--configuration $(BuildConfiguration) --output $(Build.ArtifactStagingDirectory)/Api'
zipAfterPublish: True
# Publish the artifact for the pipelines to use
- task: PublishBuildArtifacts@1
displayName: 'Publishing WebAPI Artifact'
inputs:
pathtoPublish: '$(Build.ArtifactStagingDirectory)/Api'
artifactName: 'TestWebApi-Wip'
#----------------------------------------------------------
# Web APP Build and Artifact
#----------------------------------------------------------
- task: DotNetCoreCLI@2
displayName: 'Build'
inputs:
command: 'build'
projects: '**/DevOpsApp.csproj'
arguments: '--configuration $(buildConfiguration)'
# Publish the artifact
- task: DotNetCoreCLI@2
inputs:
command: 'publish'
# This need to be false in order for the specific project to be published
publishWebProjects: False
projects: '**/DevOpsApp.csproj'
arguments: '--configuration $(BuildConfiguration) --output $(Build.ArtifactStagingDirectory)/App'
zipAfterPublish: True
# Publish the artifact for the pipelines to use
- task: PublishBuildArtifacts@1
displayName: 'Publishing WebAPP Artifact'
inputs:
pathtoPublish: '$(Build.ArtifactStagingDirectory)/App'
artifactName: 'TestWebApp-Wip'