Reputation: 47
My pipeline build several projects in specific order.
I have to include some folders with files created when publishing the first project to artifacts in the second project. I tried to CopyFiles task and include files in SourcesDirectory, before Second project is published, but unfortunately copied folder is not tracked by Second project, so it's not included in Published artifact. I was thinking to copy it directly to second.zip, but don't know if it's possible. How can I get this done? Can I specify folders to include when publishing Second project?
- task: DotNetCoreCLI@2
displayName: 'Build First project'
inputs:
command: 'publish'
publishWebProjects: false
projects: '**/First.sln'
arguments: '--configuration $(BuildConfiguration) --output $(build.artifactstagingdirectory)\first'
zipAfterPublish: false
- task: PublishBuildArtifacts@1
inputs:
PathtoPublish: '$(Build.ArtifactStagingDirectory)\first'
ArtifactName: 'first'
publishLocation: 'Container'
- task: CopyFiles@2
inputs:
SourceFolder: '$(Build.ArtifactStagingDirectory)\first\wwwroot\_folderToCopy'
Contents: '*'
TargetFolder: '$(Build.SourcesDirectory)\second\TargetFolder\_folderToCopy'
- task: VSBuild@1
displayName: Second
inputs:
solution: '**\Second.sln'
vsVersion: '17.0'
msbuildArgs: '/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:PackageLocation="$(build.artifactStagingDirectory)\second"'
platform: '$(buildPlatform)'
configuration: '$(buildConfiguration)'
- task: PublishPipelineArtifact@1
inputs:
targetPath: '$(Build.ArtifactStagingDirectory)\second'
artifact: 'Second'
publishLocation: 'pipeline'
Upvotes: 0
Views: 1550
Reputation: 35109
From your YAML sample, when you build the second project and set the argument to package the output files, it will zip the output of second project instead of all files in the source folder.
To meet your requirement, you can extract the zip package created by VSBuild task and then you can copy the files(created by dotnet publish task) to the folder of the extracted file. Finally, you can create a new Zip package contains all related files.
Here is an example:
steps:
- task: DotNetCoreCLI@2
displayName: 'Build First project'
inputs:
command: 'publish'
publishWebProjects: false
projects: '**/First.sln'
arguments: '--configuration $(BuildConfiguration) --output $(build.artifactstagingdirectory)\first'
zipAfterPublish: false
- task: PublishBuildArtifacts@1
inputs:
PathtoPublish: '$(Build.ArtifactStagingDirectory)\first'
ArtifactName: 'first'
publishLocation: 'Container'
- task: VSBuild@1
displayName: Second
inputs:
solution: '**\Second.sln'
vsVersion: '17.0'
msbuildArgs: '/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:PackageLocation="$(build.artifactStagingDirectory)\second"'
platform: '$(buildPlatform)'
configuration: '$(buildConfiguration)'
- task: ExtractFiles@1
inputs:
archiveFilePatterns: '$(build.artifactStagingDirectory)/second/*.zip'
destinationFolder: '$(build.artifactStagingDirectory)/second-1'
cleanDestinationFolder: true
overwriteExistingFiles: false
- task: CopyFiles@2
inputs:
SourceFolder: '$(Build.ArtifactStagingDirectory)\first\wwwroot\_folderToCopy'
Contents: '*'
TargetFolder: '$(build.artifactStagingDirectory)\second-1\TargetFolder\_folderToCopy'
- task: ArchiveFiles@2
inputs:
rootFolderOrFile: '$(build.artifactStagingDirectory)\second-1'
includeRootFolder: true
archiveType: 'zip'
archiveFile: '$(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip'
replaceExistingArchive: true
- task: PublishPipelineArtifact@1
inputs:
targetPath: '$(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip'
artifact: 'Second'
publishLocation: 'pipeline'
Upvotes: 1