如何在作业之间共享文件

How to share files between jobs

两个作业是否可以在多阶段管道构建中共享文件? Publish 阶段有 dotnet publish 个作业(单个任务)和 publish artifacts 个作业(单个任务)。但是,dotnet publish 的输出似乎不适用于 publish artifacts

如果两个作业中的每一个都有一个任务,并且第二个任务消耗第一个任务的输出。那么为什么不 运行 他们在同一份工作中呢。

你可以参考下面的yaml

  stages: 
  - stage: Publish
    displayName: 'Publish stage'
    jobs:
    - job: dotnetpublishartifacts
      pool:
        vmImage: 'windows-latest'
      steps:
      - task: DotNetCoreCLI@2
        displayName: 'dotnet publish'
        inputs:
          command: publish
          projects: '**/*.csproj'
          arguments: '-o $(build.artifactstagingdirectory)'
          publishWebProjects: false 

      - task: PublishBuildArtifacts@1
        displayName: 'Publish Artifact: drop'
        inputs:
          PathtoPublish: '$(build.artifactstagingdirectory)'

如果这两个任务必须在不同的作业中。并且 工作 运行 在同一个代理 上。然后你可以尝试将 dotnet 发布任务输出到一个不会被下一个作业清除的文件夹(因为代理作业将清除上一个作业的 build.artifactstagingdirectory),

在下面的示例中,dotnet publish 任务输出到 $(Agent.BuildDirectory)\firtjobpublish,此文件夹将不会被以下作业执行清除。

您可能需要单击 yaml 管道编辑页面右上角的 3dots,单击 triggers,转到YAML,并在 Get sources 部分将 Clean 设置为 false.

下面的yaml例如:

 jobs:
    - job: dotnetpublishartifacts
      pool: Default
      steps:
      - task: DotNetCoreCLI@2
        displayName: 'dotnet publish'
        inputs: 
          command: publish
          projects: '**/*.csproj'
          arguments: '-o $(Agent.BuildDirectory)\firtjobpublish'
          publishWebProjects: false 

    - job: publishartifacts
      dependsOn: dotnetpublishartifacts
      pool: Default  
      steps:
        - task: PublishBuildArtifacts@1
          displayName: 'Publish Artifact: drop'
          inputs:
            PathtoPublish: '$(Agent.BuildDirectory)\firtjobpublish'

加法: 对于在作业之间共享文件,如果 作业 运行 在不同的代理上 ,您可以尝试在第一个作业中添加一个 publish artifacts 任务 将工件发布到 Azure 服务器。并在以下作业中添加一个 下载工件任务 以下载上一个作业发布的工件。这种方法显然不适合你的情况。

希望以上内容对您有所帮助!