ci执行conan upload前必须显式配置远程仓库并设置凭证,否则报错“remote not found”;需用--force避免重复添加,指定精确revision而非模糊版本,并上传后验证包是否真实就位。

CI中执行conan upload前必须配置远程仓库
CI环境默认没有远程仓库配置,conan upload会直接报错ERROR: Remote 'myremote' not found。不能依赖本地开发机的conan remote list结果,每次CI任务都得重新添加。
推荐在CI脚本开头显式注册:
-
conan remote add myremote http://your-conan-server:9300 --force(--force避免重复添加报错) - 若服务启用了鉴权,需提前设置凭证:
conan user -r myremote -p "$CONAN_PASSWORD" "$CONAN_USERNAME" - 确保
CONAN_USERNAME和CONAN_PASSWORD作为CI secret 注入,不要硬编码
conan upload命令要指定revision和remote
Conan 2.x 默认只上传最新 recipe revision,但CI中常需保证可追溯性,漏掉-r或--revision会导致上传失败或传错版本。
典型安全写法:
-
conan upload "hello/1.0@" -r=myremote --check-update(上传当前本地recipe的最新revision) - 若已知确切revision,用
conan upload "hello/1.0#r123abc..." -r=myremote - 避免使用
conan upload hello/1.0这种模糊写法——它可能匹配多个revision,CI中行为不可控
CI上传失败常见原因:权限、网络与SSL
上传中断往往不是命令写错,而是底层连接问题:
-
ERROR: HTTPSConnectionPool(host='...', port=443): Max retries exceeded→ 检查CI节点能否访问私有仓库地址,是否需配置http_proxy/https_proxy -
ERROR: Forbidden (403)→ 用户无write_permissions,确认服务器default_server_conf.py中[write_permissions]包含该用户或组 -
ERROR: SSL certificate verify failed→ 私有仓库用自签名证书时,CI中需加--verify-ssl=False(仅限内网可信环境),或把CA证书路径通过CONAN_CA_PATH注入
上传后验证是否真成功了
CI里“命令返回0”不等于包已就位——Conan上传是异步写入磁盘的,尤其在Artifactory或自建conan-server上可能有延迟。
建议加一步轻量验证:
conan list "hello/1.0@*" -r=myremote | grep -q "hello/1.0"- 或用
curl -s http://your-conan-server:9300/v2/conans/hello/1.0/_/latest查HTTP响应码(200表示存在) - 跳过验证虽快,但CI误报“上传成功”后下游构建拉不到包,排查成本更高











