我正在使用Azure DevOps创建管道,该管道将具有一个阶段来构建和发布作为伪像的Function App,然后在随后的阶段中通过所需的生命周期部署Function App。
我不确定的是,是否需要在随后的部署阶段中明确下载由构建和发布阶段创建的工件?有很多关于此的文档,但是它有点模棱两可,我看不到对此特定问题的提及。
工件与它们产生的运行相关联,并且在运行完成后仍然可用。
这是我的管道示例。 Dev
,Staging
和Production
阶段采用了部署策略,并且在许多情况下,这些阶段的部署之间会有延迟(可能几天)。
stages:
- stage: Publish
displayName: Publish Function App
jobs:
- ...
- stage: Dev
displayName: Deploy Dev
jobs:
- ...
- stage: Staging
displayName: Deploy Staging
jobs:
- ...
- stage: Production
displayName: Deploy Production
jobs:
- ...
要发布包含我的Function App的人工制品,我正在publish
阶段的最后一个工作中使用Publish
步骤。
- publish: $(System.DefaultWorkingDirectory)
artifact: FunctionApp
我的问题是,我是否需要在download
,Dev
和Staging
部署阶段中使用相应的Production
步骤,还是可以在以下时间获得人工制品? $(Pipeline.Workspace)
?请记住,我不会立即完成部署阶段。
- download: current
artifact: FunctionApp
答案 0 :(得分:1)
是的,除非您指定作业为deployment
作业,否则您需要在每个阶段中添加下载工件步骤:
- stage: Dev
displayName: Deploy Dev
jobs:
- deployment: Staging
environment: 'Dev'
strategy:
runOnce:
deploy:
steps:
- powershell: Write-Host "Test"
有关部署作业的更多信息,您可以找到here。
答案 1 :(得分:1)
如果使用Microsoft托管的代理。 yaml管道中定义的每个作业都将在全新的虚拟机上运行。使用一次后,虚拟机将被丢弃。
因此,在Deploy阶段的Deploy作业的代理计算机上不存在Build阶段的Build作业的构建工件。这就是为什么您需要在后续部署阶段中明确下载在“发布”阶段构建和发布的工件的原因。
使用下载任务时,工件会下载到$(Pipeline.Workspace)/ {artifact},其中工件是工件的名称。工件的文件夹结构始终保留。参见here。
如果您在随后的部署阶段中使用deployment job,如Shayki所述。然后,您无需显式使用下载任务。对于“下载工件”任务,将仅将其自动注入到部署作业的部署挂钩中。参见here。
工件将下载到部署作业代理计算机上的文件夹$(Pipeline.Workspace)/ {previousStageName.jobName}中。请参阅以下来自我的测试管道的屏幕截图。