YAML 中具有多个放置文件夹的 Azure Pipeline

Azure Pipeline with multiple drop folders in YAML

我已经为 Azure 部署创建了一个 YAML 管道。有很多模板,但我只展示主管道来说明我的问题。

基本上

  1. 第一阶段是从存储库源构建。
  2. 下一阶段是预部署,然后是部署

构建将输出文件放到放置文件夹中。在部署前,其中一些文件会经过一些转换(根据目标环境用值替换标记)。

问题是目前只有一个放置文件夹,所以你可以看到问题来了....如果我部署到 DEV,文件会使用 DEV 值进行转换。但是如果我部署到 INT,文件已经转换,我最终部署到具有 DEV 值的 INT 文件。

如果同时部署 DEV 和 INT 运行,情况会变得更糟...

那么我如何为每个环境使用单独的放置文件夹?在预部署中,我是否应该在转换之前将放置文件夹复制到另一个位置。在这种情况下,如何在部署阶段指定新位置?

这里是供参考的主管道:

trigger:
- master

pool:
  name: Default
  demands:
  - npm
  - msbuild
  - visualstudio

stages:

  - stage: build
    displayName: 'Build & Test stage'
    jobs: 
    - template: templates/pipeline-build/master.yml
      parameters:
        buildConfiguration: 'Release'
        dropFolder: '\srvbuild\DROP'


  - stage: deployDev
    displayName: 'Deploy Dev Stage'
    dependsOn: build
    condition: succeeded()
    jobs:
    - deployment: deploymentjob
      displayName: deployment job
      environment: dev  
      variables:         
        - template: variables/dev.yml
      strategy:
        runOnce:
          preDeploy:
            steps:             
            - template: templates/pipeline-predeploy/master.yml
          deploy:
            steps:
            - template: templates/pipeline-deploy/master.yml 

  - stage: deployInt
    displayName: 'Deploy Int Stage'
    dependsOn: build
    condition: succeeded()
    jobs:
    - deployment: deploymentjob
      displayName: deployment job
      environment: int  
      variables:         
        - template: variables/int.yml
      strategy:
        runOnce:
          preDeploy:
            steps:             
            - template: templates/pipeline-predeploy/master.yml
          deploy:
            steps:
            - template: templates/pipeline-deploy/master.yml 

作为解决方法,您可以将构建工件发布到 A file share,然后通过每个阶段的 Download Fileshare Artifacts 任务下载构建工件进行转换 分开。

- task: PublishPipelineArtifact@1
  displayName: 'Publish Pipeline Artifact'
  inputs:
    artifact: drop
    publishLocation: filepath
    fileSharePath: '***'

使用此任务 download fileshare artifacts:

- task: DownloadFileshareArtifacts@1
  inputs:
    filesharePath: 
    artifactName: 
    #itemPattern: '**' # Optional
    #downloadPath: '$(System.ArtifactsDirectory)' 
    #parallelizationLimit: '8' # Optional