我是否必须在Azure DevOps管道中明确下载人工制品?

时间:2020-06-13 11:58:47

标签: azure-devops azure-pipelines artifact

我正在使用Azure DevOps创建管道,该管道将具有一个阶段来构建和发布作为伪像的Function App,然后在随后的阶段中通过所需的生命周期部署Function App。

我不确定的是,是否需要在随后的部署阶段中明确下载由构建和发布阶段创建的工件?有很多关于此的文档,但是它有点模棱两可,我看不到对此特定问题的提及。

这是我的管道示例。 DevStagingProduction阶段采用了部署策略,并且在许多情况下,这些阶段的部署之间会有延迟(可能几天)。

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

我的问题是,我是否需要在downloadDevStaging部署阶段中使用相应的Production步骤,还是可以在以下时间获得人工制品? $(Pipeline.Workspace)?请记住,我不会立即完成部署阶段。

- download: current
  artifact: FunctionApp

2 个答案:

答案 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}中。请参阅以下来自我的测试管道的屏幕截图。

enter image description here