在YAML中具有多个放置文件夹的Azure管道

问题描述

我已经为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