首页 > 解决方案 > 在 YAML 中具有多个放置文件夹的 Azure Pipeline

问题描述

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

标签: azure-devopsazure-pipelinesazure-pipelines-release-pipeline

解决方案


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

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

使用此任务下载文件共享工件

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

推荐阅读