如何在作业之间共享文件

dev*_*ife 4 azure-pipelines multistage-pipeline

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

Lev*_*SFT 6

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

可以参考下面的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)'
Run Code Online (Sandbox Code Playgroud)

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

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

您可能需要单击yaml 管道编辑页面右上角的3 个点,单击“触发器”,转到“YAML”,然后在“获取源”部分中将“清理”设置为“假”在此输入图像描述

以下 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'
Run Code Online (Sandbox Code Playgroud)

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

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