如何在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)查询目标构建的所有构件,再完成复制和状态更新:
- 执行AQL查询构件信息:
items.find( { "build.name": "lib-systest", "build.number": "feature/JIRA_ID-1" } ).include("repo", "path", "name")
- 遍历查询结果,调用复制API将构件从源仓库转移到目标仓库
- 调用构建状态更新API,将构建标记为
Released
内容的提问来源于stack exchange,提问作者Peter Kahn
相关产品推荐
相关产品推荐

