Azure Pipelines - 发布工件的目的是什么?

Azure Pipelines - what is the purpose of publishing artifacts?

我是 Azure Pipelines 的新手,我想知道发布工件的目的是什么。例如我有下面的代码:

    - task: ArchiveFiles@2
  inputs:
   rootFolderOrFile: '$(Build.SourcesDirectory)'
   includeRootFolder: false
   archiveType: 'zip'
   archiveFile: '$(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip'  
   replaceExistingArchive: true
   displayName: Archive files

- task: PublishBuildArtifacts@1
  inputs:
   pathToPublish: '$(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip' 
   artifactName: 'drop' 
     
- task: AzureFunctionApp@1
  inputs:
   azureSubscription: $(azureSubscription)
   appType: 'functionAppLinux'
   appName: $(appName)
   package: '$(System.ArtifactsDirectory)/**/*.zip'
   displayName: Deploy Azure Function

可以通过跳过 PublishBuildArtifacts 来替换:

- task: ArchiveFiles@2
  inputs:
   rootFolderOrFile: '$(Build.SourcesDirectory)'
   includeRootFolder: false
   archiveType: 'zip'
   archiveFile: $(System.ArtifactsDirectory)/build$(Build.BuildId).zip  
   replaceExistingArchive: true
   displayName: Archive files

- task: AzureFunctionApp@1
  inputs:
   azureSubscription: $(azureSubscription)
   appType: 'functionAppLinux'
   appName: $(appName)
   package: '$(System.ArtifactsDirectory)/build$(Build.BuildId).zip'
   displayName: Deploy Azure Function

哪个更好,为什么?

好吧,如果您将所有工作都投入到一项工作中,除了您始终可以在本地下载和检查您的工件之外,发布工件没有任何意义。但是,当您将构建、测试和发布工件拆分为一个作业并将部署拆分为第二个作业时,它更有意义。为什么?

  • 因为当您的部署失败时,您可以重试部署而无需再次构建包
  • 您可能希望将包部署到多个应用程序中,然后您可以将部署并行拆分为多个作业来执行此操作
  • 您可以仅用于部署一个特殊作业 (deployment job),它具有对部署过程非常有用的特性(批准、独占锁等)- 当然您也可以将此作业用于构建,但是这项专门的工作有一些限制,例如只能进行一次结帐(因此,如果您有更多结帐,则不能使用它)。默认情况下,它会下载所有可用的工件以简化工作。