如何让发布到Azure Artifacts的ZIP包支持直接下载(无需CLI)
实现Azure Artifacts Feed直接下载ZIP包的方案
核心原因
你用UniversalPackages@0发布的是版本化通用包,这类包的设计逻辑就是通过CLI/API获取,Azure Artifacts不会提供直接下载按钮,这是产品固有特性,无法通过配置修改。要让用户能直接点击下载,必须换用「通用文件上传」的方式发布ZIP包。
具体步骤
1. 打包变更日志为ZIP
先用Archive@2任务把你的变更日志文件打包成带版本标识的ZIP包:
- task: Archive@2 inputs: rootFolderOrFile: '$(Pipeline.Workspace)/path/to/your/changelog/files' # 替换为实际文件路径 includeRootFolder: false archiveType: 'zip' archiveFile: '$(Build.ArtifactStagingDirectory)/changelog-$(Build.BuildNumber).zip' replaceExistingArchive: true
2. 上传ZIP到Azure Artifacts Feed的文件区
不要用UniversalPackages@0,改用以下两种方式之一上传:
方式一:AzureCLI任务上传
- task: AzureCLI@2 inputs: azureSubscription: '你的Azure订阅服务连接名称' scriptType: 'bash' scriptLocation: 'inlineScript' inlineScript: | az artifacts file upload \ --organization "https://dev.azure.com/你的组织名/" \ --feed "你的Feed名称" \ --name "changelogs/$(Build.BuildNumber)/changelog-$(Build.BuildNumber).zip" \ --path "$(Build.ArtifactStagingDirectory)/changelog-$(Build.BuildNumber).zip"
方式二:PowerShell + REST API上传
如果不想用AzureCLI,可通过REST API完成上传:
$orgUrl = "https://dev.azure.com/你的组织名" $feedName = "你的Feed名称" $projectName = "你的项目名" # Feed是项目级则填写,组织级留空 $filePath = "$(Build.ArtifactStagingDirectory)/changelog-$(Build.BuildNumber).zip" $destPath = "changelogs/$(Build.BuildNumber)/changelog-$(Build.BuildNumber).zip" # 利用Pipeline系统令牌完成认证 $token = "$(System.AccessToken)" Invoke-RestMethod -Uri "$orgUrl/$projectName/_apis/packaging/feeds/$feedName/items?path=$destPath&api-version=7.1-preview.1" ` -Method Put ` -Headers @{Authorization = "Bearer $token"} ` -InFile $filePath ` -ContentType "application/zip"
效果验证
上传完成后,进入Azure Artifacts Feed的Files标签页,就能找到你上传的ZIP包,点击文件名旁的下载图标即可直接获取文件,无需使用Azure CLI。
内容的提问来源于stack exchange,提问作者Dev0001
相关产品推荐
相关产品推荐

