【发布时间】:2021-11-04 04:24:42
【问题描述】:
我的 Azure DevOps 中有一个简单的管道,它在我的应用服务器上使用私有代理。因此,当我想部署应用程序时,只需将构建工件复制到正确的目录即可。
管道分为三个步骤:
- 构建
- 部署到暂存
- 部署到产品
第二步总是在构建过程之后直接执行。然而,第三步(部署到 prod)会在几天后执行,因为此阶段需要批准。
我的问题:如果我将第一步中的构建工件留在 $(System.DefaultWorkingDirectory) 目录中的某个位置,可以吗?
实际上它现在正在工作。但我有点害怕有一天我会弄得一团糟。下一次管道运行在最后一次完成之前触发,或者我的私人代理从另一个任务中获得新工作。
这是我的简化 yaml:
stages:
- stage: Build
displayName: Build stage
jobs:
- job: Build_Frontend
displayName: Build-Frontend
pool:
name: $(poolName)
vmImage: $(vmImageName)
steps:
- task: NodeTool@0
inputs:
versionSpec: '14.x'
displayName: 'Install Node.js'
- script: |
npm install
displayName: 'npm install'
workingDirectory: "smprod/"
- script: |
npm run "build Prod"
displayName: 'npm build'
workingDirectory: "smprod/"
- stage: Staging
displayName: Staging-Stage
dependsOn: Build
condition: succeeded()
jobs:
- deployment: Deploy
displayName: Deploy-Staging
environment: 'smprod-Staging'
pool:
name: $(poolName)
strategy:
runOnce:
deploy:
steps:
- task: CopyFilesOverSSH@0
displayName: 'Copy frontend build to staging target directory'
inputs:
sshEndpoint: 'smprod-prod'
sourceFolder: '$(System.DefaultWorkingDirectory)/smprod/dist/prod'
contents: '**'
targetFolder: '/smprod/staging/'
readyTimeout: '20000'
cleanTargetFolder: false
overwrite: true
- stage: Prod
displayName: Prod-Stage
dependsOn: Staging
condition: succeeded()
jobs:
- deployment: Deploy
displayName: Deploy-Prod
environment: 'smprod-Prod'
pool:
name: $(poolName)
strategy:
runOnce:
deploy:
steps:
- task: CopyFilesOverSSH@0
displayName: 'Copy frontend build to prod target directory'
inputs:
sshEndpoint: 'smprod-prod'
sourceFolder: '$(System.DefaultWorkingDirectory)/smprod/dist/prod'
contents: '**'
targetFolder: '/smprod/prod/'
readyTimeout: '20000'
cleanTargetFolder: false
overwrite: true
【问题讨论】:
-
你为什么不用Publish Artifact Task?
-
@JSONDerulo 是的,这将是一个想法......但问题是,如果真的有必要做这个额外的步骤。
标签: azure-devops azure-pipelines