Azure DevOps 将其他文件复制到已发布的工件 - 不反映

问题描述

我有一个发布构建工件步骤,然后是一个复制步骤,用于将我的 UI 编译内容放入生成文件夹中。尽管复制步骤成功并且我可以在日志中看到它将我所需的内容复制到 drop 内的指定文件夹,但当我在构建过程结束时下载工件时,这些文件不存在。

在这里遗漏了一些相对路径吗?我的文件是否被复制到不属于最终工件的文件夹中?下面是我在 yaml 中的最后两个任务

- task: PublishBuildArtifacts@1
      inputs:
        PathtoPublish: '$(Build.ArtifactStagingDirectory)'
        ArtifactName: 'drop'
        publishLocation: 'Container'
    
    - task: copyFiles@2
      inputs:
        SourceFolder: 'my-ui\dist\wwwroot\assets'
        Contents: '**'
        TargetFolder: 'drop\MyProj\wwwroot\assets'
        OverWrite: true
        CleanTargetFolder: true

解决方法

在执行 copy task 任务之前,您应该使用 $(Build.ArtifactStagingDirectory) 将所需内容复制到文件夹 publish build artifact 中的指定文件夹。见下文:

 - task: CopyFiles@2
      inputs:
        SourceFolder: 'my-ui\dist\wwwroot\assets'
        Contents: '**'
        TargetFolder: '$(Build.ArtifactStagingDirectory)\MyProj\wwwroot\assets'
        OverWrite: true
        CleanTargetFolder: true

- task: PublishBuildArtifacts@1
      inputs:
        PathtoPublish: '$(Build.ArtifactStagingDirectory)'
        ArtifactName: 'drop'
        publishLocation: 'Container'

Publish build artifact 任务将发布 $(Build.ArtifactStagingDirectory) 中的内容,并将它们存储在 Azure Pipelines(容器)中,而不是在本地代理机器上。

因此,如果您在 copy task 任务之后使用 Publish build artifact。内容仍在本地代理机器上。它们不会复制到 Azure Pipelines 容器。