多级管道无法正常工作

时间:2019-08-28 15:52:34

标签: azure azure-devops yaml azure-pipelines devops

我下面有一个相对简单的YAML管道,用于执行以下操作。

  • 还原所有依赖项

  • 构建任何项目

  • 运行任何测试

  • 发布结果

这分为具有多个作业的多个阶段。

enter image description here

问题是作业似乎不了解先前的作业。这使得步骤需要更长的时间才能完成和/或产生意外结果。例如,发布工件没有发布任何东西,因为它没有要发布的先前作业的工件。

我如何使阶段和工作与以前的操作相同,以便使管道按预期工作?

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'

1 个答案:

答案 0 :(得分:2)

并非旨在还原/构建/测试/发布工件的阶段,所有这些步骤都应处于一个阶段且一项工作和多个步骤相同的阶段。

每个阶段都是一个新的新代理,该代理会再次下载代码,这就是为什么要花费很多时间并且没有要发布的工件的原因,每个阶段都不知道其他阶段(默认情况下)。

那么,当您想要一个新阶段时?例如,用于运行功能测试或部署您的应用。