如何在作业之间共享文件

时间:2019-10-30 13:44:10

标签: azure-pipelines multistage-pipeline

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

1 个答案:

答案 0 :(得分:0)

如果两个作业中的每一个都有一个任务,而第二个任务消耗了第一个任务的输出。那么为什么不将它们运行在同一工作下呢?

您可以参考下面的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将任务输出输出到$(Agent.BuildDirectory)\firtjobpublish中,此文件夹将不会通过以下作业执行清除。

您可能需要单击yaml管道编辑页面右上角的 3点,单击触发器,然后转到 YAML ,然后在获取来源部分中将清除设置为enter image description here

例如,下面的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服务器。然后在以下作业中添加下载工件任务,以下载由先前作业发布的工件。这种方法显然不适合您的情况。

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