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

如何在JFrog CLI构建晋升命令中转义构建编号中的斜杠/?

构建晋升时JFrog CLI处理含斜杠的构建编号出错的解决与替代方案

问题详情

使用JFrog CLI 2.51.1执行构建晋升操作时,遇到构建编号含斜杠的解析问题:

  • 目标构建:名称为lib-systest,编号为feature/JIRA_ID-1
  • 执行的晋升命令:
jf rt bpr "lib-systest" "feature/JIRA_ID-1" maven-release-local --source-repo maven-dev-virtual --status "Released" --copy

命令返回404错误,原因是CLI错误地将构建编号中的斜杠/识别为构建名与编号的分隔符,错误解析为构建名lib-systest/feature、编号JIRA_ID-1。

已尝试多种转义方式均无法解决问题:

  • "feature\/JIRA_ID-1"
  • "feature\\/JIRA_ID-1"
  • "feature%2FJIRA_ID-1"
  • "feature :: JIRA_ID-1"

已提交官方支持工单,以下是可行的临时解决与替代方案:

临时方案

1. 修改构建编号命名规则

将构建编号中的斜杠/替换为连字符-(例如feature-JIRA_ID-1),但此方案需要修改数千个仓库的配置,实施成本较高。

2. 编写Python脚本替代jf rt bpr命令

直接调用JFrog Artifactory的REST API实现构建晋升逻辑,绕开CLI的解析缺陷。核心步骤如下:

import requests

# 配置Artifactory实例信息
ARTIFACTORY_URL = "https://your-artifactory-domain.com/artifactory"
AUTH = ("your-username", "your-api-key-or-password")

# 构建与仓库参数
BUILD_NAME = "lib-systest"
BUILD_NUMBER = "feature/JIRA_ID-1"
TARGET_REPO = "maven-release-local"
SOURCE_REPO = "maven-dev-virtual"

# 1. 获取目标构建的构件信息
build_info_url = f"{ARTIFACTORY_URL}/api/build/{BUILD_NAME}/{BUILD_NUMBER}"
build_response = requests.get(build_info_url, auth=AUTH)
build_data = build_response.json()

# 2. 复制构件到目标仓库
for module in build_data["modules"]:
    for artifact in module["artifacts"]:
        src_artifact_path = f"{SOURCE_REPO}/{artifact['path']}/{artifact['name']}"
        dest_artifact_path = f"{TARGET_REPO}/{artifact['path']}/{artifact['name']}"
        copy_api_url = f"{ARTIFACTORY_URL}/api/copy/{src_artifact_path}?to={dest_artifact_path}"
        requests.post(copy_api_url, auth=AUTH)

# 3. 更新构建状态为Released
update_status_url = f"{ARTIFACTORY_URL}/api/build/{BUILD_NAME}/{BUILD_NUMBER}?status=Released"
requests.post(update_status_url, auth=AUTH)

3. 使用AQL结合API执行构建晋升

通过Artifactory Query Language (AQL)查询目标构建的所有构件,再完成复制和状态更新:

  1. 执行AQL查询构件信息:
items.find(
    {
        "build.name": "lib-systest",
        "build.number": "feature/JIRA_ID-1"
    }
).include("repo", "path", "name")
  1. 遍历查询结果,调用复制API将构件从源仓库转移到目标仓库
  2. 调用构建状态更新API,将构建标记为Released

内容的提问来源于stack exchange,提问作者Peter Kahn

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 10:43:20