我下面有一个相对简单的YAML管道,用于执行以下操作。
还原所有依赖项
构建任何项目
运行任何测试
发布结果
这分为具有多个作业的多个阶段。
问题是作业似乎不了解先前的作业。这使得步骤需要更长的时间才能完成和/或产生意外结果。例如,发布工件没有发布任何东西,因为它没有要发布的先前作业的工件。
我如何使阶段和工作与以前的操作相同,以便使管道按预期工作?
trigger:
- master
stages:
- stage: RestoreDependancies
jobs:
- job: RestoreNuGetPackages
pool:
vmImage: 'windows-latest'
steps:
- task: NuGetToolInstaller@1
displayName: 'Install NuGet'
inputs:
versionSpec:
checkLatest: true
- task: NuGetCommand@2
displayName: 'Restore NuGet'
inputs:
command: 'restore'
restoreSolution: '**/*.sln'
feedsToUse: 'select'
- stage: Build
dependsOn: RestoreDependancies
jobs:
- job: BuildVisualStudioProjects
pool:
vmImage: 'windows-latest'
steps:
- task: DotNetCoreCLI@2
displayName: 'Build Projects'
inputs:
command: 'build'
projects: '**/*.csproj'
arguments: '--configuration "Release"'
- stage: Test
dependsOn: Build
jobs:
- job: TestVisualStudioProjects
pool:
vmImage: 'windows-latest'
steps:
- task: DotNetCoreCLI@2
displayName: 'Run all Unit Tests'
inputs:
command: 'test'
projects: '**/*Tests/*.csproj'
arguments: '--configuration "Release" --collect "Code coverage"'
- stage: Publish
dependsOn:
- Build
- Test
jobs:
- job: PublishTestResults
pool:
vmImage: 'windows-latest'
steps:
- task: PublishTestResults@2
displayName: 'Publish Test Results'
inputs:
testResultsFormat: 'XUnit'
testResultsFiles: '**/TEST-*.xml'
failTaskOnFailedTests: true
buildConfiguration: 'Release'
- job: PublishArtifacts
pool:
vmImage: 'windows-latest'
steps:
- task: CopyFiles@2
displayName: 'Copy Artifacts'
inputs:
SourceFolder: '$(system.defaultworkingdirectory)'
Contents: '**\bin\**' # Contents: '**\bin\Release\**'
TargetFolder: '$(build.artifactstagingdirectory)'
- task: PublishBuildArtifacts@1
displayName: 'Publish Artifacts'
inputs:
PathtoPublish: '$(Build.ArtifactStagingDirectory)'
ArtifactName: 'drop'
publishLocation: 'Container'
答案 0 :(得分:2)
并非旨在还原/构建/测试/发布工件的阶段,所有这些步骤都应处于一个阶段且一项工作和多个步骤相同的阶段。
每个阶段都是一个新的新代理,该代理会再次下载代码,这就是为什么要花费很多时间并且没有要发布的工件的原因,每个阶段都不知道其他阶段(默认情况下)。
那么,当您想要一个新阶段时?例如,用于运行功能测试或部署您的应用。