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),它具有对部署过程非常有用的特性(批准、独占锁等)- 当然您也可以将此作业用于构建,但是这项专门的工作有一些限制,例如只能进行一次结帐(因此,如果您有更多结帐,则不能使用它)。默认情况下,它会下载所有可用的工件以简化工作。
我是 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),它具有对部署过程非常有用的特性(批准、独占锁等)- 当然您也可以将此作业用于构建,但是这项专门的工作有一些限制,例如只能进行一次结帐(因此,如果您有更多结帐,则不能使用它)。默认情况下,它会下载所有可用的工件以简化工作。