YAML 中具有多个放置文件夹的 Azure Pipeline
Azure Pipeline with multiple drop folders in YAML
我已经为 Azure 部署创建了一个 YAML 管道。有很多模板,但我只展示主管道来说明我的问题。
基本上
- 第一阶段是从存储库源构建。
- 下一阶段是预部署,然后是部署
构建将输出文件放到放置文件夹中。在部署前,其中一些文件会经过一些转换(根据目标环境用值替换标记)。
问题是目前只有一个放置文件夹,所以你可以看到问题来了....如果我部署到 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
我已经为 Azure 部署创建了一个 YAML 管道。有很多模板,但我只展示主管道来说明我的问题。
基本上
- 第一阶段是从存储库源构建。
- 下一阶段是预部署,然后是部署
构建将输出文件放到放置文件夹中。在部署前,其中一些文件会经过一些转换(根据目标环境用值替换标记)。
问题是目前只有一个放置文件夹,所以你可以看到问题来了....如果我部署到 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