【问题标题】:How to publish specific files using Publish Build Artifact Task如何使用 Publish Build Artifact Task 发布特定文件
【发布时间】:2025-12-13 19:35:01
【问题描述】:

我正在使用 Visual Studio Build In Azure Pipeline 构建 C# 应用程序。

我的解决方案包含多个项目(ManagerWeb 和 WebAPI)。

我想分别发布两个独立的 Artifact ManagerWeb 和 WebAPI。

所有必需的文件都存在于Build.ArtifactStagingDirectory

我如何指定一个模式,使用它我可以获得两个独立的工件? 示例 1st Artifact 中所有带有 WebAPI 的文件名和另一个带有 ManagerWeb 的文件名。

ArtifactStaging 目录中的文件名如下

Something.Manager.WebAPI.deploy.cmd
Something.Manager.WebAPI.deploy-readme.txt
Something.Manager.WebAPI.SetParameters.xml
Something.Manager.WebAPI.SourceManifest.xml
Something.Manager.WebAPI.zip

Something.ManagerWeb.deploy.cmd
Something.ManagerWeb.deploy-readme.txt
Something.ManagerWeb.SetParameters.xml
Something.ManagerWeb.SourceManifest.xml
Something.ManagerWeb.zip

任何帮助都将不胜感激。

提前致谢。

【问题讨论】:

    标签: c# azure-devops azure-pipelines azure-pipelines-build-task azure-artifacts


    【解决方案1】:

    添加两个Copy Files步骤进行复制;

    • ManagerWeb 文件到$(Build.ArtifactStagingDirectory)\ManagerWeb
    • WebAPI 文件到$(Build.ArtifactStagingDirectory)\WebAPI

    然后有两个发布工件步骤;

    • $(Build.ArtifactStagingDirectory)\ManagerWeb 发布为ManagerWeb
    • $(Build.ArtifactStagingDirectory)\WebAPI 发布为 WebAPI

    我已经对此进行了模拟并将 YAML 导出如下;

    pool:
      name: Hosted VS2017
    steps:
    - task: CopyFiles@2
      displayName: 'Copy Files to: $(Build.ArtifactStagingDirectory)\ManagerWeb'
      inputs:
        SourceFolder: 'your/path/here/ManagerWeb'
        TargetFolder: '$(Build.ArtifactStagingDirectory)\ManagerWeb'
    
    - task: CopyFiles@2
      displayName: 'Copy Files to: $(Build.ArtifactStagingDirectory)\WebAPI'
      inputs:
        SourceFolder: 'your/path/here/WebAPI'
        TargetFolder: '$(Build.ArtifactStagingDirectory)\WebAPI'
    
    - task: PublishBuildArtifacts@1
      displayName: 'Publish Artifact: ManagerWeb'
      inputs:
        PathtoPublish: '$(Build.ArtifactStagingDirectory)\ManagerWeb'
    
    - task: PublishBuildArtifacts@1
      displayName: 'Publish Artifact: WebAPI'
      inputs:
        PathtoPublish: '$(Build.ArtifactStagingDirectory)\WebAPI'
    

    【讨论】:

    • 感谢您的回复。问题是我有一个特定的解决方案,其中包含这个项目和作为一个原因,所有文件都直接移动到$(Build.ArtifactStagingDirectory)
    • @Eddie 能否为您当前的 复制文件 步骤添加 YAML。
    【解决方案2】:

    添加一个 PowerShell 任务以创建两个文件夹并将文件移动到那里:

    cd $(Build.ArtifactStagingDirectory)
    $files = dir
    mkdir WebAPI
    mkdir ManagerWeb
    ForEach($file in $files)
    {
       if($file.FullName.Contains("WebAPI"))
       {
           mv $file.FullName -Destination WebAPI
       }
       else
       {
           mv $file.FullName -Destination ManagerWeb
       }      
    }
    

    然后在“发布路径”字段中添加文件夹:

    对于 WebApi 工件:

    $(Build.ArtifactStagingDirectory)/WebAPI
    

    对于 ManagerWeb 工件:

    $(Build.ArtifactStagingDirectory)/ManagerWeb
    

    【讨论】:

    • 我将所有文件都放在一个文件夹中,即$(Build.ArtifactStagingDirectory) 作为我面临单独发布它的问题的原因
    • 哦,我的错,在你的文件名中,我以为有 2 个文件夹。所以像第二个答案一样使用复制文件。
    • 在构建解决方案时,只有它被复制到工件文件夹中。我无法根据项目要求更改构建步骤。我正在寻找一些模式,如$(Build.ArtifactStagingDirectory)/*.WirelineManager.*.*.*
    • @Eddie 好的,所以我更新了我的答案,一个将文件放入 2 个文件夹的 powershell 脚本。
    • :- 添加 PowerShell 脚本任务有效...... . .谢谢