Azure 多级管道未按预期工作

Azure 多级管道未按预期工作,azure,azure-devops,yaml,azure-pipelines,devops,Azure,Azure Devops,Yaml,Azure Pipelines,Devops,下面我有一个相对简单的YAML管道,用于执行以下操作 恢复任何依赖项 建立任何项目 运行任何测试 公布结果 这是在具有多个作业的多个阶段中分割的 问题是这些工作似乎没有意识到以前的工作。这使得这些步骤需要更长的时间才能完成和/或产生意外的结果。例如,发布工件不发布任何内容,因为它没有要发布的前一个作业中的工件 如何使阶段和作业与之前的操作一致,以便管道按预期工作 trigger: - master stages: - stage: RestoreDependancies jobs:

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

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

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


那么你什么时候想要一个新的舞台?例如,对于运行功能测试或部署应用程序。

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

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


那么你什么时候想要一个新的舞台?例如,用于运行功能测试或部署应用程序。

谢谢您的回答。我很感激。您说过
“每个阶段都不知道其他阶段(默认情况下)”
。我如何让每个阶段意识到前一个阶段。例如,如果我想运行功能测试或部署我的应用程序,我如何从上一阶段获得结果来实现这一点?Hi@Dan,为此,您需要在构建阶段结束时使用发布管道工件任务发布工件,并在第二阶段使用下载管道工件任务下载文件。感谢您的回答。我很感激。您说过
“每个阶段都不知道其他阶段(默认情况下)”
。我如何让每个阶段意识到前一个阶段。例如,如果我想运行功能测试或部署我的应用程序,我如何从上一阶段获得结果来实现这一点?Hi@Dan,为此,您需要在构建阶段结束时使用发布管道工件任务发布工件,在第二阶段使用下载管道工件任务下载文件。