首页 > 解决方案 > Azure 管道,多阶段 YAML 管道,在构建服务器上使用相同的工作目录。怎么不腐败

问题描述

澄清和更正:

我们有 Azure 一个带有多阶段和批准者的天蓝色 devops YAML 管道。我注意到运行同一管道的不同构建版本在构建服务器上使用相同的工作目录。

这如何不会导致内容损坏,例如,如果管道同时针对不同的构建版本运行?

例如,如果较新的管道运行检查源代码,而另一个运行正在为其自己的版本构建和创建工件怎么办?我已经检查了两个并发构建的当前路径,它是相同的。

标签: azure-devopsazure-devops-pipelines

解决方案


如果你在同一个代理中运行两次提交会发生什么: 这是我的多阶段管道示例:

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)

  1. stage A(commit1):此作业将检查 commit1 的源代码并将文件发布到 commit1 的 Sources 目录中。
  2. stage A(commit2):该作业将检查 commit2 的源代码并在 commit2 的 Sources 目录中发布文件。
  3. stage B(commit1):这是一个部署作业,默认不会检出资源。
    • 部署作业将按预期下载 commit1 的工件。
    • 如果我不清理工作区,它将继续使用commit2的源代码。这可能会导致一些问题。
    • 如果我在这个阶段添加一个结帐步骤。它将检查 commit1 的来源。

因此,您可以将签出步骤和清理工作区添加到部署作业中。非部署作业会自动检出源代码,它将使用正确的源代码。


推荐阅读