azure-devops - Azure 管道,多阶段 YAML 管道,在构建服务器上使用相同的工作目录。怎么不腐败
问题描述
澄清和更正:
- 使用一个自托管代理进行测试。
- 版本是指应用程序的版本。或任何新的提交。
- 当多个构建运行中仍有待处理的阶段(需要批准)时,相同的工作目录被用于不同提交的构建。
我们有 Azure 一个带有多阶段和批准者的天蓝色 devops YAML 管道。我注意到运行同一管道的不同构建版本在构建服务器上使用相同的工作目录。
这如何不会导致内容损坏,例如,如果管道同时针对不同的构建版本运行?
例如,如果较新的管道运行检查源代码,而另一个运行正在为其自己的版本构建和创建工件怎么办?我已经检查了两个并发构建的当前路径,它是相同的。
解决方案
如果你在同一个代理中运行两次提交会发生什么: 这是我的多阶段管道示例:
pool: Default
stages:
- stage: A
jobs:
- job: A
steps:
- task: PublishPipelineArtifact@1
inputs:
targetPath: '$(Build.SourcesDirectory)'
artifact: 'drop'
publishLocation: 'pipeline'
- stage: B
jobs:
- deployment: DeployWeb
displayName: deploy Web App
pool: Default
workspace:
clean: all
environment: 'env'
strategy:
runOnce:
deploy:
steps:
- checkout: self
- task: CopyFiles@2
inputs:
SourceFolder: '$(Build.SourcesDirectory)'
Contents: '**'
TargetFolder: '$(Build.ArtifactStagingDirectory)'
我在环境中添加了批准检查。我的运行顺序是stage A(commit1)->stage A(commit2)->stage B(commit1)->stage B(commit2)
。
- stage A(commit1):此作业将检查 commit1 的源代码并将文件发布到 commit1 的 Sources 目录中。
- stage A(commit2):该作业将检查 commit2 的源代码并在 commit2 的 Sources 目录中发布文件。
- stage B(commit1):这是一个部署作业,默认不会检出资源。
- 部署作业将按预期下载 commit1 的工件。
- 如果我不清理工作区,它将继续使用commit2的源代码。这可能会导致一些问题。
- 如果我在这个阶段添加一个结帐步骤。它将检查 commit1 的来源。
因此,您可以将签出步骤和清理工作区添加到部署作业中。非部署作业会自动检出源代码,它将使用正确的源代码。
推荐阅读
- sql-server - 基于公共字段比较两个不同查询的结果
- javascript - oj-select-one 显示未定义的所有选项
- bash - 如何通过 ssh 连接到服务器并获取 CPU 和内存详细信息?
- c++ - 如何知道函数何时抛出以及何时使用 noexcept
- tensorflow - strip_unused_nodes 的正确参数
- wordpress - 在 Woocommerce 产品和自定义帖子类型之间共享类别
- python - 使用 python win32com.client dispatch 或 dispatchex 读取 Outlook 消息时绕过安全框
- php - 将数据从表单推送到 MySQL 数据库
- php - 从函数 PHP OOP 创建一个 while 循环
- pandas - 在 pandas 多索引上添加自动增量列