问题描述
我已经为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