Azure 管道,多阶段 YAML 管道在构建服务器上使用相同的工作目录。怎样才不会腐败
Azure pipeline, muti stage YAML pipeline using same work directory on build server. How does it not corrupt
澄清和更正:
- 正在使用一个自托管代理进行测试。
- 我所说的版本是指应用程序的版本。或者任何新的提交。
- 当多个构建 运行s 中仍有未决阶段(需要批准)时,同一工作目录用于不同提交的构建。
我们有 Azure,一个具有多阶段和审批者的 azure devops YAML 管道。我注意到 运行 同一管道的不同构建版本在构建服务器上使用相同的工作目录。
这如何不导致内容损坏,例如,如果管道 运行s 同时用于不同的构建版本?
例如,如果较新的管道 运行 签出源代码,而另一个 运行 正在为其自己的版本构建和创建工件怎么办?我已经检查了两个并发构建的当前路径,它是相同的。
如果你运行在同一个代理中两次提交会发生什么:
这是我的多级管道示例:
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)'
我在环境中添加了批准检查。我的 运行ning 订单是 stage A(commit1)->stage A(commit2)->stage B(commit1)->stage B(commit2)
.
- A 阶段(提交 1):
此作业将检出 commit1 的源代码并在 commit1 的 Sources 目录中发布文件。
- A 阶段(提交 2):
此作业将检查 commit2 的源代码并在 commit2 的源目录中发布文件。
- 阶段 B(提交 1):
这是一个部署作业,默认情况下不会检出资源。
- 部署作业将按预期下载 commit1 的工件。
- 如果我不清理工作空间,它会继续使用commit2的源代码。这可能会导致一些问题。
- 如果我在这个阶段添加结帐步骤。它将检查 commit1 的来源。
因此您可以将结帐步骤和清理工作区添加到部署作业中。非部署作业会自动检出源代码,它将使用正确的源代码。
澄清和更正:
- 正在使用一个自托管代理进行测试。
- 我所说的版本是指应用程序的版本。或者任何新的提交。
- 当多个构建 运行s 中仍有未决阶段(需要批准)时,同一工作目录用于不同提交的构建。
我们有 Azure,一个具有多阶段和审批者的 azure devops YAML 管道。我注意到 运行 同一管道的不同构建版本在构建服务器上使用相同的工作目录。
这如何不导致内容损坏,例如,如果管道 运行s 同时用于不同的构建版本?
例如,如果较新的管道 运行 签出源代码,而另一个 运行 正在为其自己的版本构建和创建工件怎么办?我已经检查了两个并发构建的当前路径,它是相同的。
如果你运行在同一个代理中两次提交会发生什么: 这是我的多级管道示例:
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)'
我在环境中添加了批准检查。我的 运行ning 订单是 stage A(commit1)->stage A(commit2)->stage B(commit1)->stage B(commit2)
.
- A 阶段(提交 1): 此作业将检出 commit1 的源代码并在 commit1 的 Sources 目录中发布文件。
- A 阶段(提交 2): 此作业将检查 commit2 的源代码并在 commit2 的源目录中发布文件。
- 阶段 B(提交 1):
这是一个部署作业,默认情况下不会检出资源。
- 部署作业将按预期下载 commit1 的工件。
- 如果我不清理工作空间,它会继续使用commit2的源代码。这可能会导致一些问题。
- 如果我在这个阶段添加结帐步骤。它将检查 commit1 的来源。
因此您可以将结帐步骤和清理工作区添加到部署作业中。非部署作业会自动检出源代码,它将使用正确的源代码。