如何通过CLI或REST API操作Artifactory指定仓库中已有文件夹的属性?
Artifactory 文件夹属性操作(REST API + CLI)
一、核心说明
Artifactory完全支持对文件夹进行属性的设置、获取与更新操作,你之前遇到的问题是误用了工件属性的API端点。文件夹属性操作需要针对文件夹路径,并通过专属参数或端点明确标识目标为文件夹。
二、REST API 操作方法
所有请求需替换以下占位符:
{ARTIFACTORY_URL}:你的Artifactory实例地址(如http://localhost:8081/artifactory){REPO_NAME}:目标仓库名称{FOLDER_PATH}:文件夹完整路径(如my-folder/sub-folder,请勿以斜杠开头){USERNAME}:Artifactory用户名{PASSWORD/API_KEY}:登录密码或API Key
1. 获取文件夹属性
使用storage端点,通过folder=1参数明确指定操作对象为文件夹:
curl -u {USERNAME}:{PASSWORD/API_KEY} \ "{ARTIFACTORY_URL}/api/storage/{REPO_NAME}/{FOLDER_PATH}?properties&folder=1"
返回示例(JSON格式):
{ "uri": "{ARTIFACTORY_URL}/api/storage/{REPO_NAME}/{FOLDER_PATH}", "properties": { "project.owner": ["john"], "build.version": ["v1.0.0"] } }
2. 设置文件夹属性(覆盖原有属性)
使用properties端点,通过folder=1参数指定文件夹,此操作会覆盖原有所有属性:
curl -u {USERNAME}:{PASSWORD/API_KEY} -X PUT \ "{ARTIFACTORY_URL}/api/storage/{REPO_NAME}/{FOLDER_PATH}?properties=project.owner=john|build.version=v1.0.0&folder=1"
- 多个属性用
|分隔,单个属性多值用,分隔(如project.owner=john,jane)
3. 更新文件夹属性(保留原有属性,仅修改指定项)
Artifactory 7.10及以上版本支持PATCH请求,可新增或修改单个属性,不影响其他原有属性:
curl -u {USERNAME}:{PASSWORD/API_KEY} -X PATCH \ -H "Content-Type: application/json" \ -d '{ "properties": { "build.version": ["v1.1.0"], "env": ["production"] } }' \ "{ARTIFACTORY_URL}/api/storage/{REPO_NAME}/{FOLDER_PATH}?folder=1"
- 未在请求中提及的原有属性会被保留,已存在的属性会被新值覆盖,不存在的属性会被新增
三、CLI 操作方法(jf CLI)
先通过jf c add命令完成CLI与Artifactory实例的配置,再执行以下操作:
1. 获取文件夹属性
jf rt props-get --repo {REPO_NAME} --folder {FOLDER_PATH}
2. 设置文件夹属性(覆盖原有)
jf rt props-set --repo {REPO_NAME} --folder {FOLDER_PATH} "project.owner=john|build.version=v1.0.0"
3. 更新文件夹属性(追加/修改单属性)
# 覆盖已有属性值 jf rt props-set --repo {REPO_NAME} --folder {FOLDER_PATH} "build.version=v1.1.0" --append=false # 追加属性值 jf rt props-set --repo {REPO_NAME} --folder {FOLDER_PATH} "env=staging" --append=true
四、常见问题排查
- 路径校验:确保文件夹路径正确,且目标仓库中确实存在该文件夹,路径请勿以斜杠开头
- 权限检查:操作账号需拥有目标仓库的编辑或管理权限
- 版本兼容:PATCH请求仅支持Artifactory 7.10及以上版本,低版本需先获取原有属性,合并后再通过PUT请求重新设置
内容的提问来源于stack exchange,提问作者Shubham
相关产品推荐
相关产品推荐

