首页 > 解决方案 > 多级管道未按预期工作

问题描述

我在下面有一个相对简单的 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'

标签: azureazure-devopsyamlazure-pipelinesdevops

解决方案


不打算恢复/构建/测试/发布工件的阶段,所有这些步骤都应该在一个阶段,一个作业和多个步骤。

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

所以当你想要一个新的阶段?例如,用于运行功能测试或部署您的应用程序。


推荐阅读