You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Azure Pipeline中仅将选定NuGet包发布到Artifactory

解决方案

问题根因

ArtifactoryNuGet@2是JFrog开发的第三方扩展任务,它的pathToNupkg参数仅支持基础的*、**通配符匹配,不支持Azure DevOps原生任务通用的!开头的排除语法,也不支持分号分隔多个匹配规则,因此你之前的配置无法正常识别规则,导致匹配不到任何包。

推荐方案

方案1:使用官方文件匹配任务预处理(最稳定通用)

先用Azure DevOps原生的FindFiles@2任务筛选出符合要求的包路径,再将结果传给Artifactory推送任务,原生任务天然支持排除规则,兼容性最强:

# 筛选符合要求的NuGet包
- task: FindFiles@2
  inputs:
    rootFolder: 'myproject'
    contents: |
      **/*.nupkg
      !foo/**/*.nupkg
    findMatchOption: 'matchFiles'
  name: matchedNugetPkgs

# 调整后的Artifactory推送任务
- task: ArtifactoryNuGet@2
  inputs:
    command: 'push'
    artifactoryService: 'AzureToArtifactory'
    targetDeployRepo: 'acm-nuget-release-local'
    targetDeployPath: 'Azure_CI_Build/xyzzy/packages'
    pathToNupkg: '$(matchedNugetPkgs.FoundFiles)'

方案2:前置脚本复制待推送包(灵活可控)

如果需要更复杂的筛选逻辑,可以加一个脚本任务提前把需要的包复制到临时目录,再直接推送临时目录下的所有包:

# PowerShell筛选复制待推送包(Windows/Linux代理都兼容)
- pwsh: |
    New-Item -ItemType Directory -Path $(Build.ArtifactStagingDirectory)/nuget-push -Force
    Get-ChildItem -Path myproject -Recurse -Filter *.nupkg | 
    Where-Object { $_.FullName -notmatch '[\\/]foo[\\/]' } | 
    Copy-Item -Destination $(Build.ArtifactStagingDirectory)/nuget-push/ -Force
  displayName: 筛选待推送NuGet包

# 推送临时目录下的包
- task: ArtifactoryNuGet@2
  inputs:
    command: 'push'
    artifactoryService: 'AzureToArtifactory'
    targetDeployRepo: 'acm-nuget-release-local'
    targetDeployPath: 'Azure_CI_Build/xyzzy/packages'
    pathToNupkg: '$(Build.ArtifactStagingDirectory)/nuget-push/*.nupkg'

方案3:精准匹配替代排除规则(无需额外任务)

如果待推送包的父目录固定且数量少,可以直接枚举要匹配的目录,避免使用排除规则,示例:

pathToNupkg: 'myproject/{bar,baz,other}/**/*.nupkg'

该方案仅适合目录结构固定的场景,扩展性较差。


内容的提问来源于stack exchange,提问作者Ray Depew

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 18:48:03