3

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

4

1 回答 1

4

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

可以参考下面的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 点,单击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'

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

希望以上对您有所帮助!

于 2019-10-31T02:44:43.373 回答