如何用cURL从Azure DevOps下载完整Universal/UPack制品?
使用cURL+jq从Azure DevOps下载完整Universal/UPack制品
以下是和你现有Maven下载逻辑同类的实现方案,无需安装Azure CLI,仅用cURL和jq即可完成UPack制品的最新版本获取与完整包下载:
1. 获取UPack制品的最新版本号
UPack包的查询API需要指定包类型参数,解析返回的JSON结构和Maven略有不同,脚本如下:
# 替换为你的Azure DevOps信息 ORG_NAME="<ORGANISATION_NAME>" PROJECT_ID="<PROJECT_ID>" FEED_ID="<FEED_ID>" UPACK_PACKAGE_NAME="<UPACK_PACKAGE_NAME>" # 注意:PAT需要拥有Packaging Read权限,用户名可留空 PAT="<PERSONAL_ACCESS_TOKEN>" # 调用API获取最新版本号 PKG_VERSION=$(curl -s -u :$PAT "https://feeds.dev.azure.com/$ORG_NAME/$PROJECT_ID/_apis/packaging/feeds/$FEED_ID/packages?packageNameQuery=$UPACK_PACKAGE_NAME&packageType=upack&api-version=7.1-preview.1" | jq -r ".value[0].versions[0].normalizedVersion")
2. 下载完整UPack制品包
构造UPack专属的下载URL,直接拉取完整包文件:
# 下载完整包到本地,文件名格式为[包名]-[版本号].upack curl -u :$PAT -o "$UPACK_PACKAGE_NAME-$PKG_VERSION.upack" -L "https://pkgs.dev.azure.com/$ORG_NAME/$PROJECT_ID/_apis/packaging/feeds/$FEED_ID/upack/$UPACK_PACKAGE_NAME/$PKG_VERSION/content"
关键差异说明(对比你的Maven逻辑)
- 查询包时必须添加
packageType=upack参数,否则会返回其他类型的包 - 下载URL的路径前缀为
upack,而非Maven的maven路径 - UPack包没有groupId层级,直接使用包名即可定位
注意事项
- 确保你的个人访问令牌(PAT)拥有Packaging Read权限,否则会出现权限错误
- 如果UPack包存在多平台变体(如linux-x64、win-x64),需要在查询或下载时添加变体参数,例如在下载URL末尾追加
&variant=linux-x64 - 需提前安装jq工具,用于解析API返回的JSON数据
内容的提问来源于stack exchange,提问作者MartinZ
相关产品推荐
相关产品推荐

