如何将 PublishPipelineArtifact@1 与构建脚本一起使用

Mr *_*r D 6 azure-devops azure-pipelines

我有 yaml 来运行我的构建(这是一个假脚本),并且我想将构建脚本的各种输出作为工件发布。

我已经完成了一半,但我无法弄清楚如何输出某些特定的文件夹。

  - task: PublishPipelineArtifact@1
    displayName: Publish Report
    inputs:
      pathToPublish: $(System.DefaultWorkingDirectory)/s/ReportProject/bin/Release/netcoreapp3.1
      artifactName: MyReport
Run Code Online (Sandbox Code Playgroud)

它实际上似乎要做的是获取一些任意文件夹(这是我的管道的名称,以下为子文件夹)

subfolders 
TestResults
a
b
s
Run Code Online (Sandbox Code Playgroud)

是的,我的应用程序在那里,但所有东西也在那里,非常奇怪。

我改变了路径...它发布了相同的内容,即所有内容!

Lev*_*SFT 12

当您使用预定义变量来引用构建代理中的文件夹时。您应该知道它们映射到的确切文件夹。请参阅以下自托管代理示例:

在此输入图像描述

$(Pipeline.Workspace)被映射到c:\agent\_work\1

$(Agent.BuildDirectory)也映射到c:\agent\_work\1

$(Build.ArtifactStagingDirectory)被映射到a文件夹c:\agent\_work\1\a

$(Build.BinariesDirectory)被映射到b文件夹c:\agent\_work\1\b

$(Build.SourcesDirectory)$(System.DefaultWorkingDirectory)与映射到s文件夹的相同c:\agent\_work\1\s

PublishPipelineArtifact 任务和其他任务的默认工作目录是$(System.DefaultWorkingDirectory)(即c:\agent\_work\1\s

由于您的项目文件夹位于文件夹ReportProject下的文件夹中s。这就是为什么targetPath: 'ReportProject/bin/Release/netcoreapp3.1'有效。因为它等于$(System.DefaultWorkingDirectory)/ReportProject/bin/Release/netcoreapp3.1、和 $(Pipeline.Workspace)/s/ReportProject/bin/Release/netcoreapp3.1、和$(Build.SourcesDirectory)/ReportProject/bin/Release/netcoreapp3.1。这些都会起作用。