跳过正文
Background Image
  1. Posts/

当 Artifactory “Download Folder 功能被禁用”时如何下载整个文件夹的制品

·435 字·1 分钟· ·
沈显鹏
作者
沈显鹏
目录

问题背景
#

在 CI 过程中,如果需要从 JFrog Artifactory 下载整个文件夹的制品,而 IT 出于某些原因关闭了 Download Folder 功能,就会遇到以下报错:

访问类似 API:

[https://den-artifactory.company.com/artifactory/api/archive/download/team-generic-release-den/project/abc/main/?archiveType=zip](https://den-artifactory.company.com/artifactory/api/archive/download/team-generic-release-den/project/abc/main/?archiveType=zip)

返回:

{
  "errors": [
    {
      "status": 403,
      "message": "Download Folder functionality is disabled."
    }
  ]
}

官方文档:Retrieve Folder or Repository Archive


解决思路
#

虽然直接下载文件夹功能被禁用,但 Artifactory 还有其他 API 可以间接实现批量下载。

下面介绍两种常用方式。


方法 1:按创建时间范围获取制品列表
#

API 文档:Artifacts Created in Date Range

示例 Shell 脚本 download.sh

#!/bin/sh

USERNAME=$1
PASSWORD=$2
REPO=$3
N_DAY_AGO=$4

# 时间范围(毫秒)
START_TIME=$(($(date --date="$N_DAY_AGO days ago" +%s%N)/1000000))
END_TIME=$(($(date +%s%N)/1000000))

ARTIFACTORY=https://den-artifactory.company.com/artifactory

if [ ! -x "`which sha1sum`" ]; then
  echo "You need to have the 'sha1sum' command in your path."
  exit 1
fi

# 获取制品 URI 列表
RESULTS=$(curl -s -X GET -u $USERNAME:$PASSWORD \
  "$ARTIFACTORY/api/search/creation?from=$START_TIME&to=$END_TIME&repos=$REPO" |
  grep uri | awk '{print $3}' | sed s'/.$//' | sed s'/.$//' | sed -r 's/^.{1}//')

# 循环下载
for RESULT in $RESULTS; do
    echo "Fetching path from $RESULT"
    PATH_TO_FILE=$(curl -s -X GET -u $USERNAME:$PASSWORD $RESULT |
      grep downloadUri | awk '{print $3}' | sed s'/.$//' | sed s'/.$//' | sed -r 's/^.{1}//')

    echo "Downloading $PATH_TO_FILE"
    curl -u $USERNAME:$PASSWORD -O $PATH_TO_FILE
done

使用方式:

sh download.sh <USERNAME> <PASSWORD> <REPO_NAME> <N_DAY_AGO>

方法 2:使用模式匹配搜索制品
#

API 文档:Pattern Search

通过 Ant 风格的路径模式搜索制品,例如:

repo-key/path/to/files/*.jar

解析 API 响应中的 downloadUri,再用 curl 批量下载:

curl -u $USERNAME:$PASSWORD -O $PATH_TO_FILE

通过模式搜索


💡 如果你有更好的方法,可以在评论中分享交流。

相关文章

写给那些想使用 JFrog Artifactory 管理制品的人
·2825 字·6 分钟
本文介绍了 JFrog Artifactory 的概念、优势、工作原理以及最佳实践,帮助读者了解如何使用 Artifactory 管理软件制品。
解决 Jenkins Artifactory Plugin 仅在 AIX 上传制品到 https 协议的 Artifactory 失败的问题
·1995 字·4 分钟
本文介绍了在 AIX 上使用 Jenkins Artifactory 插件上传制品到 https 协议的 Artifactory 失败的问题及其解决方法,包括设置环境变量和调整 Java 系统属性。
初识 JFrog Artifactory
·896 字·2 分钟
JFrog Artifactory 是一个强大的二进制存储库管理器,本文介绍其安装、升级和使用方法。
Artifactory 与 Jenkins 集成
·719 字·2 分钟
本文介绍如何将 JFrog Artifactory 与 Jenkins 集成,实现持续集成和制品管理。
在 Jenkins 中为不同分支设置不同的默认参数
·408 字·1 分钟
本文介绍如何在 Jenkins 多分支流水线中,根据构建分支动态设置不同的默认参数,从而实现分支差异化配置。
为什么 Windows Installer 会弹出窗口?(已解决)
·391 字·1 分钟
本文解释了一个常见的 Windows 安装程序问题:安装时意外弹出窗口的原因,以及通过修正构建文件夹命名规则来解决该问题的方法。