1340 字约 4 分钟
Conan 制品库用于存储和分发 C/C++ 软件包,支持上传、管理和安装各类 C/C++ 第三方库与工具。
前置准备
本地开发
添加远程仓库并登录
# REMOTE_NAME 您的远程仓库名称
# REPO_URL 您的远程仓库地址
# 示例: conan remote add cnb-conan-repo https://conan.cnb.build/cnb/conan-repo/-/packages/
conan remote add <REMOTE_NAME> <REPO_URL>
# 示例 remote login -p my-token cnb-conan-repo cnb
conan remote login -p <YOUR_TOKEN> <REMOTE_NAME> cnb拉取制品
# 示例: conan download zlib/1.3.1 -r cnb-conan-repo
conan download <PACKAGE_NAME> -r <REMOTE_NAME>推送制品
# 示例1: conan create .
# 示例2: conan create . --user=test-user --channel=test-channel
conan create . --user=<USER> --channel=<CHANNEL>
# 示例1: conan upload my-project/1.0.0 -r cnb-conan-repo (没有 user 与 channel)
# 示例2: conan upload my-project/1.0.0@test-user/test-channel -r cnb-conan-repo (存在 user 与 channel)
conan upload <PACKAGE_NAME> -r <REMOTE_NAME>云原生构建
拉取制品
- 方案1: 使用内置的 CNB_TOKEN 环境变量:
.cnb.yml
master:
push:
- docker:
image: docker.cnb.cool/examples/language/gcc-13.4
stages:
- name: 配置 conan 仓库凭据
script:
# 示例: conan remote add cnb-conan-repo https://conan.cnb.build/cnb/conan-repo/-/packages/
- conan remote add <REMOTE_NAME> <REPO_URL>
# 示例 remote login -p ${CNB_TOKEN} cnb-conan-repo ${CNB_TOKEN_USER_NAME}
- conan remote login -p ${CNB_TOKEN} <REMOTE_NAME> ${CNB_TOKEN_USER_NAME}
- name: 拉取 conan 制品
script:
# 示例 conan download zlib/1.3.1 -r cnb-conan-repo
- conan download <PACKAGE_NAME> -r <REMOTE_NAME>- 方案2: 使用密钥仓库文件:
.cnb.yml
master:
push:
- docker:
image: docker.cnb.cool/examples/language/gcc-13.4
import:
# 引入密钥仓库配置文件
- <SECRET_REPO_URL>
stages:
- name: 配置 conan 仓库凭据
script:
- conan remote add <REMOTE_NAME> <REPO_URL>
- conan remote login -p <PASS_WORD> <REMOTE_NAME> <USER_NAME>
- name: 拉取 conan 制品
script:
- conan download <PACKAGE_NAME> -r <REMOTE_NAME>示例:
.cnb.yml
master:
push:
- docker:
image: docker.cnb.cool/examples/language/gcc-13.4
import:
- https://cnb.build/cnb-demo/env-demo/-/blob/main/envs/env.yml
stages:
- name: 配置 conan 仓库凭据
script:
- conan remote add cnb-conan-repo https://conan.cnb.build/cnb/conan-repo/-/packages/
# 引入密钥仓库配置文件,以环境变量的形式注入 USER_NAME 和 PASS_WORD 的值
- conan remote login -p ${PASS_WORD} cnb-conan-repo ${USER_NAME}
- name: 拉取 conan 制品
script:
- conan download zlib/1.3.1 -r cnb-conan-repo推送制品
- 方案1: 使用内置的 CNB_TOKEN 环境变量:
.cnb.yml
master:
push:
- docker:
image: docker.cnb.cool/examples/language/gcc-13.4
stages:
- name: 配置 conan 仓库凭据
script:
# 示例: conan remote add cnb-conan-repo https://conan.cnb.build/cnb/conan-repo/-/packages/
- conan remote add <REMOTE_NAME> <REPO_URL>
# 示例 remote login -p ${CNB_TOKEN} cnb-conan-repo ${CNB_TOKEN_USER_NAME}
- conan remote login -p ${CNB_TOKEN} <REMOTE_NAME> ${CNB_TOKEN_USER_NAME}
- name: 构建 conan 制品
script:
# 示例: conan create . --user=test-user --channel=test-channel
- conan create . --user=<USER> --channel=<CHANNEL>
- name: 推送 conan 制品
script:
# 示例: conan upload my-project/1.0.0@test-user/test-channel -r cnb-conan-repo
- conan upload <PACKAGE_NAME> -r <REMOTE_NAME>- 方案2: 使用密钥仓库文件:
.cnb.yml
master:
push:
- docker:
image: docker.cnb.cool/examples/language/gcc-13.4
import:
# 引入密钥仓库配置文件
- <SECRET_REPO_URL>
stages:
- name: 配置 conan 仓库凭据
script:
- conan remote add <REMOTE_NAME> <REPO_URL>
- conan remote login -p <PASS_WORD> <REMOTE_NAME> <USER_NAME>
- name: 构建 conan 制品
script:
- conan create . --user=<USER> --channel=<CHANNEL>
- name: 推送 conan 制品
script:
- conan upload <PACKAGE_NAME> -r <REMOTE_NAME>示例:
.cnb.yml
master:
push:
- docker:
image: docker.cnb.cool/examples/language/gcc-13.4
import:
- https://cnb.build/cnb-demo/env-demo/-/blob/main/envs/env.yml
stages:
- name: 配置 conan 仓库凭据
script:
- conan remote add cnb-conan-repo https://conan.cnb.build/cnb/conan-repo/-/packages/
# 引入密钥仓库配置文件,以环境变量的形式注入 USER_NAME 和 PASS_WORD 的值
- conan remote login -p ${PASS_WORD} cnb-conan-repo ${USER_NAME}
- name: 构建 conan 制品
script:
- conan create . --user=test-user --channel=test-channel
- name: 推送 conan 制品
script:
- conan upload my-project/1.0.0@test-user/test-channel -r cnb-conan-repo云原生开发
前置准备工作
请在 .cnb.yml 文件中添加以下配置
.cnb.yml
$:
vscode:
- docker:
image: docker.cnb.cool/examples/language/gcc-13.4
services:
- vscode
- docker
# 使用密钥仓库文件则需要填入以下配置
imports:
# 示例: https://cnb.build/cnb-demo/env-demo/-/blob/main/envs/env.yml
- <SECRET_REPO_URL>添加远程仓库并登录
- 方案1: 使用内置的 CNB_TOKEN 环境变量
# REMOTE_NAME 您的远程仓库名称
# REPO_URL 您的远程仓库地址
# 示例: conan remote add cnb-conan-repo https://conan.cnb.build/cnb/conan-repo/-/packages/
conan remote add <REMOTE_NAME> <REPO_URL>
# 示例 remote login -p ${CNB_TOKEN} cnb-conan-repo ${CNB_TOKEN_USER_NAME}
conan remote login -p ${CNB_TOKEN} <REMOTE_NAME> ${CNB_TOKEN_USER_NAME}- 方案2: 使用密钥仓库文件
# REMOTE_NAME 您的远程仓库名称
# REPO_URL 您的远程仓库地址
# 示例: conan remote add cnb-conan-repo https://conan.cnb.build/cnb/conan-repo/-/packages/
conan remote add <REMOTE_NAME> <REPO_URL>
# 引入密钥仓库配置文件,以环境变量的形式注入 USER_NAME 和 PASS_WORD 的值
# 示例 remote login -p ${PASS_WORD} cnb-conan-repo ${USER_NAME}
conan remote login -p ${PASS_WORD} <REMOTE_NAME> ${USER_NAME}拉取制品
# 示例: conan download zlib/1.3.1 -r cnb-conan-repo
conan download <PACKAGE_NAME> -r <REMOTE_NAME>编译及推送制品
# 示例1: conan create .
# 示例2: conan create . --user=test-user --channel=test-channel
conan create . --user=<USER> --channel=<CHANNEL>
# 示例1: conan upload my-project/1.0.0 -r cnb-conan-repo (没有 user 与 channel)
# 示例2: conan upload my-project/1.0.0@test-user/test-channel -r cnb-conan-repo (存在 user 与 channel)
conan upload <PACKAGE_NAME> -r <REMOTE_NAME>FAQ
Q: 为什么使用 Conan 1.X 无法推送制品到 CNB Conan 制品库?
A: 不支持 Conan 1.X 的旧版协议。如需使用 Conan 1.X 推送,请先执行 export CONAN_REVISIONS_ENABLED=True 启用修订开关,再尝试推送。
Q: 为什么上传时返回 409 错误?
A: 当前仅支持存储单个 recipe 修订版本和单个 package 修订版本。推送其他修订版本会被视为覆盖操作,请将制品仓库的版本覆盖策略设置为「允许覆盖已有版本」,或修改包版本后重试。
Q: 为什么上传时返回 400 错误?
A: 通常是制品名称不符合 Conan 2 规范,请检查后重试。
更多信息
更多 Conan 用法请参阅官方文档。