如何在Azure Pipeline中的作业之间共享文件?

问题描述 投票:0回答:3

我想在天蓝色管道中的作业之间共享文件。我知道执行此操作的一种方法是使用 PublishPipelineArtifact Task。还有其他方法可以达到同样的效果吗?

我正在使用 Azure DevOps 服务并使用 Linux 计算机作为自托管代理。

提前致谢!

azure azure-devops azure-pipelines share publish
3个回答
0
投票

替代方案是 PublishBuildArtifacts 任务

参考 link 查看 PublishPipelineArtifact 上的差异 & 发布BuildArtifact


0
投票
  1. 使用 PublishPipelineArtifact 任务(或 PublishBuildArtifacts 任务)将文件发布为命名工件是一个不错的选择。然后在其他作业/管道中使用 DownloadPipelineArtifact 任务(或 DownloadBuildArtifacts 任务)使用文件。您能告诉我为什么您想使用其他方法吗?

  2. 如果您想存储和共享大文件,可以使用存储帐户。在 Azure CLI 任务 中运行 az storage blob upload 将文件上传到存储 blob。运行 az storage blob download 从存储帐户下载文件。

  3. 如果您在 same 管道中运行不同的作业并使用 same 自托管代理,则可以在管道中定义共享路径变量并将文件存储在其中。此方法有局限性,不推荐。从这张票查看更多信息。

    例如,

    variables: 
      sharepath: $(Agent.BuildDirectory)\sharefolder
    

    通过一项作业将目标文件复制到共享文件夹中。以 file1.zip 为例。将

    TargetFolder
    设置为
    $(sharepath)

    - task: CopyFiles@2
      inputs:
        SourceFolder: '$(Build.SourcesDirectory)'
        Contents: 'file1.zip'
        TargetFolder: '$(sharepath)'
    

    将共享文件夹中的文件复制到当前工作目录中进行使用。将

    SourceFolder
    设置为
    $(sharepath)

     - task: CopyFiles@2
       inputs:
         SourceFolder: '$(sharepath)'
         Contents: '**'
         TargetFolder: '$(Build.ArtifactStagingDirectory)\CopiedFiles'
    
  4. 您还可以使用repo来存储文件并使用checkout来消费。

可能还有其他共享文件的方法。您需要根据自己的实际需求来选择。


0
投票

具有类似功能的另一种方法是使用缓存任务

从初衷来看,Cache任务和PublishPipelineArtifact任务(或旧的PublishBuildArtifacts任务)是针对不同的场景而设计的。

  • 当您需要获取一项作业中生成的特定文件并将其与其他作业共享时,请使用管道工件(如果没有它们,这些其他作业可能会失败)。

  • 当您想通过重用以前运行的文件来缩短构建时间时,请使用管道缓存(并且没有这些文件不会影响作业的运行能力)。

当然,在某些情况下,您可以根据实际用例使用这些任务中的任何一个在作业之间传递文件。

有关Cache的更多详细信息,可以参考“管道缓存”。

© www.soinside.com 2019 - 2024. All rights reserved.