我是否必须在 Azure DevOps 管道中显式下载工件?
Do I have to explicitly download an artefact in an Azure DevOps pipeline?
我正在使用 Azure DevOps 创建一个管道,该管道将有一个阶段来构建和发布函数应用程序作为工件,然后在后续阶段通过所需的生命周期部署函数应用程序。
我不确定是否需要在后续部署阶段显式下载构建和发布阶段创建的工件?有很多关于此的文档,但它有点模棱两可,我看不到对这个特定问题的提及。
- YAML schema reference
- Publish and download artifacts
Artifacts are associated with the run they were produced in and remain available after the run has completed.
这是我的管道示例。 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:
- ...
为了发布包含我的函数应用程序的工件,我在 Publish
阶段的最后一个作业中使用了 publish
步骤。
- publish: $(System.DefaultWorkingDirectory)
artifact: FunctionApp
我的问题是,我是否需要在 Dev
、Staging
和 Production
部署阶段使用相应的 download
步骤?在 $(Pipeline.Workspace)
有空吗?请记住,我不会立即完成部署阶段。
- download: current
artifact: FunctionApp
是的,您需要在每个阶段添加下载工件步骤,除非您指定作业是 deployment
作业:
- stage: Dev
displayName: Deploy Dev
jobs:
- deployment: Staging
environment: 'Dev'
strategy:
runOnce:
deploy:
steps:
- powershell: Write-Host "Test"
您可以找到有关部署作业的更多信息 here。
如果您使用 Microsoft 托管的代理。 yaml 管道中定义的每个作业都将 运行 在全新的虚拟机上。虚拟机用完就丢弃
因此在部署阶段的部署作业的代理计算机上不存在构建阶段的生成作业的构建工件。这就是为什么您需要在后续部署阶段显式下载在 Publish 阶段构建和发布的工件。
当您使用下载任务时,工件会下载到 $(Pipeline.Workspace)/{artifact},其中 artifact 是工件的名称。始终保留工件的文件夹结构。参见 here。
如果你使用deployment job in the subsequent deployment stages as Shayki mentioned. Then you donot need to explicitly use download task. For Download artifact task will be auto injected only in the deploy hook for deployment jobs. See here.
工件将下载到部署作业代理计算机上的文件夹 $(Pipeline.Workspace)/{previousStageName.jobName}。请参阅我的测试管道的以下屏幕截图。
我正在使用 Azure DevOps 创建一个管道,该管道将有一个阶段来构建和发布函数应用程序作为工件,然后在后续阶段通过所需的生命周期部署函数应用程序。
我不确定是否需要在后续部署阶段显式下载构建和发布阶段创建的工件?有很多关于此的文档,但它有点模棱两可,我看不到对这个特定问题的提及。
- YAML schema reference
- Publish and download artifacts
Artifacts are associated with the run they were produced in and remain available after the run has completed.
这是我的管道示例。 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:
- ...
为了发布包含我的函数应用程序的工件,我在 Publish
阶段的最后一个作业中使用了 publish
步骤。
- publish: $(System.DefaultWorkingDirectory)
artifact: FunctionApp
我的问题是,我是否需要在 Dev
、Staging
和 Production
部署阶段使用相应的 download
步骤?在 $(Pipeline.Workspace)
有空吗?请记住,我不会立即完成部署阶段。
- download: current
artifact: FunctionApp
是的,您需要在每个阶段添加下载工件步骤,除非您指定作业是 deployment
作业:
- stage: Dev
displayName: Deploy Dev
jobs:
- deployment: Staging
environment: 'Dev'
strategy:
runOnce:
deploy:
steps:
- powershell: Write-Host "Test"
您可以找到有关部署作业的更多信息 here。
如果您使用 Microsoft 托管的代理。 yaml 管道中定义的每个作业都将 运行 在全新的虚拟机上。虚拟机用完就丢弃
因此在部署阶段的部署作业的代理计算机上不存在构建阶段的生成作业的构建工件。这就是为什么您需要在后续部署阶段显式下载在 Publish 阶段构建和发布的工件。
当您使用下载任务时,工件会下载到 $(Pipeline.Workspace)/{artifact},其中 artifact 是工件的名称。始终保留工件的文件夹结构。参见 here。
如果你使用deployment job in the subsequent deployment stages as Shayki mentioned. Then you donot need to explicitly use download task. For Download artifact task will be auto injected only in the deploy hook for deployment jobs. See here.
工件将下载到部署作业代理计算机上的文件夹 $(Pipeline.Workspace)/{previousStageName.jobName}。请参阅我的测试管道的以下屏幕截图。