You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Azure Pipelines所有Stage前执行Checkout并实现多Stage复用?

统一Checkout代码并跨Stage复用的实现方案

完全可以实现统一拉取代码并让所有Stage复用,具体分两种场景提供实现方式:

场景1:自托管代理(可保证作业在同一代理执行)

方案一:全局配置+共享工作区

在流水线顶层统一配置checkout和共享工作区,所有Job自动复用代码,无需重复拉取:

# 全局配置:仅执行一次checkout
checkout: self
# 配置共享工作区,保留已拉取的代码
workspace:
  clean: false
  name: shared_code_workspace

stages:
- stage: dev    
  jobs:
  - deployment: DeploySQLObjects
    displayName: "Deploy SQL objects" 
    environment: "Synapse_DEV"
    strategy:   
      runOnce:
        deploy:
          steps:   
          # 无需再次添加checkout步骤,直接使用共享代码

- stage: test
  jobs:
  - job: RunTests
    displayName: "Execute Test Cases"
    steps:
      # 直接使用共享代码执行测试

- stage: prod
  jobs:
  - deployment: DeployToProd
    displayName: "Deploy to Production"
    environment: "Synapse_PROD"
    strategy:
      runOnce:
        deploy:
          steps:
            # 直接使用共享代码部署

方案二:前置初始化Stage(更明确的流程控制)

创建专门的初始化Stage执行checkout,其他Stage依赖该Stage并继承工作区:

stages:
- stage: init
  jobs:
  - job: CheckoutRepository
    displayName: "Pull Source Code"
    steps:
      - checkout: self
        persistCredentials: true # 若后续需操作仓库可开启
    workspace:
      name: shared_code_workspace

- stage: dev    
  dependsOn: init # 依赖初始化Stage
  jobs:
  - deployment: DeploySQLObjects
    displayName: "Deploy SQL objects" 
    environment: "Synapse_DEV"
    workspace:
      inherit: true # 继承初始化Stage的工作区
    strategy:   
      runOnce:
        deploy:
          steps:   
          # 无需重复checkout

- stage: test
  dependsOn: init
  jobs:
  - job: RunTests
    displayName: "Execute Test Cases"
    workspace:
      inherit: true
    steps:
      # 使用共享代码

- stage: prod
  dependsOn: init
  jobs:
  - deployment: DeployToProd
    displayName: "Deploy to Production"
    environment: "Synapse_PROD"
    workspace:
      inherit: true
    strategy:
      runOnce:
        deploy:
          steps:
            # 使用共享代码

场景2:微软托管代理(代理为临时虚拟机)

微软托管代理每次作业可能分配到不同虚拟机,无法直接共享工作区,需通过工件传递代码:

stages:
- stage: init
  jobs:
  - job: CheckoutAndPublish
    displayName: "Pull Code & Publish as Artifact"
    steps:
      - checkout: self
      # 将代码打包为流水线工件
      - task: PublishBuildArtifacts@1
        inputs:
          PathtoPublish: '$(Build.SourcesDirectory)'
          ArtifactName: 'source_code'
          publishLocation: 'Container'

- stage: dev    
  dependsOn: init
  jobs:
  - deployment: DeploySQLObjects
    displayName: "Deploy SQL objects" 
    environment: "Synapse_DEV"
    strategy:   
      runOnce:
        deploy:
          steps:   
          # 下载工件到当前作业目录
          - task: DownloadBuildArtifacts@0
            inputs:
              artifactName: 'source_code'
              downloadPath: '$(Build.SourcesDirectory)'
          # 后续步骤使用下载的代码

- stage: test
  dependsOn: init
  jobs:
  - job: RunTests
    displayName: "Execute Test Cases"
    steps:
      - task: DownloadBuildArtifacts@0
        inputs:
          artifactName: 'source_code'
          downloadPath: '$(Build.SourcesDirectory)'
      # 执行测试

- stage: prod
  dependsOn: init
  jobs:
  - deployment: DeployToProd
    displayName: "Deploy to Production"
    environment: "Synapse_PROD"
    strategy:
      runOnce:
        deploy:
          steps:
            - task: DownloadBuildArtifacts@0
              inputs:
                artifactName: 'source_code'
                downloadPath: '$(Build.SourcesDirectory)'
            # 部署代码

注意事项

  • 自托管代理场景下,需确保代理未被其他流水线占用,否则可能导致工作区被污染;
  • 微软托管代理场景下,工件传递是唯一可靠的跨Stage代码复用方式,虽多了打包/下载步骤,但能保证代码一致性。

内容的提问来源于stack exchange,提问作者SqlKindaGuy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 08:05:38