azure - 多级管道未按预期工作
问题描述
我在下面有一个相对简单的 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'
解决方案
不打算恢复/构建/测试/发布工件的阶段,所有这些步骤都应该在一个阶段,一个作业和多个步骤。
每个阶段都是一个新的代理,并且代理再次下载代码,这就是为什么它需要大量时间并且没有要发布的工件,每个阶段都不知道其他阶段(默认情况下)的原因。
所以当你想要一个新的阶段?例如,用于运行功能测试或部署您的应用程序。
推荐阅读
- azure - Azure Devops Pipeline 将一个存储库部署到多个 Azure 服务
- java - 使用 Gradle 从 jar 中排除文件
- format - 您如何使用数字和字母进行 tryCatch
- vue.js - 如何使用 Vue.js 保护管理路由?
- dialogflow-es - 未触发 dialogflow 默认回退意图
- c# - C# 检查文件夹避免阻塞 UI
- c# - Linq:IQueryable 扩展方法适用于 DBSet,但不适用于 ICollection
- laravel - 如何从网址中删除 /public/nova/?
- python - 如何在word文件(.docx)python中将两张图片放在同一级别
- javascript - 使用 NodeGit / LibGit2 将文件写入不在根目录的裸存储库