Composer 制品库
993 字约 3 分钟
推送凭据配置
通过 CNB REST API 上传制品文件到 Composer 制品库。如何获取 CNB_TOKEN 请参考创建访问令牌。
方式一:配置 .netrc 自动加载凭据
printf "\nmachine composer.cnb.build\nlogin cnb\npassword %s\n" "<CNB_TOKEN>" >> ~/.netrc方式二:在 curl 命令中直接指定凭据
curl -ucnb:<CNB_TOKEN> https://composer.cnb.build/xxx... -T <PATH_TO_FILE>拉取凭据配置
- 添加制品库地址到全局 config.json(通常位于 ~/.composer/config.json)。如何获取
CNB_COMPOSER_URL请参考获取制品库地址。
# 关闭默认官方源
composer config repos.packgist false -g
# 使用 cnb 源
# 示例: composer config repos.cnb-composer-repo composer https://composer.cnb.build/cnb/composer-repo/-/packages/ -g
composer config repos.cnb composer <CNB_COMPOSER_URL> -g- 添加凭据到全局 auth.json(通常位于 ~/.composer/auth.json):
composer config http-basic.composer.cnb.build cnb <CNB_TOKEN> -g推送制品
本地命令行推送
- 将以下内容粘贴到 composer.json,避免打包认证信息和依赖:
{
"archive": {
"exclude": ["auth.json", "composer.lock", "vendor"]
}
}- 进入包目录,打包 Composer 制品:
composer archive -f zip --file package- 发布到 CNB
注意:
- 如何获取
CNB_COMPOSER_URL请参考获取制品库地址 <vendor>/<package>/<version>需替换成当前包的对应值,例如monolog/monolog/3.8.1
curl --netrc "<CNB_COMPOSER_URL>upload/<vendor>/<package>/<version>" -T package.zip云原生构建中推送
- 将以下内容粘贴到
.cnb.yml:
注意:
CNB_COMPOSER_URL需要被替换,如何获取请参考获取制品库地址<vendor>/<package>需替换成当前包的对应值,例如monolog/monolog
.cnb.yml
$:
tag_push:
- docker:
image: docker.cnb.cool/examples/language/php-8.4
stages:
- name: 配置认证凭据
script: printf "machine composer.cnb.build\nlogin cnb\npassword %s\n" "${CNB_TOKEN}" > ~/.netrc
- name: 打包 Composer 制品
script: composer archive -f zip --file package
- name: 发布到 CNB
script: curl --netrc -T package.zip "<CNB_COMPOSER_URL>upload/<vendor>/<package>/${CNB_BRANCH}"- 将以下内容粘贴到 composer.json,避免打包认证信息和依赖:
{
"archive": {
"exclude": ["auth.json", "composer.lock", "vendor"]
}
}- 提交一个 Tag,将会触发云原生构建。注意:Tag 值将作为制品版本号,请使用语义版本号。
云原生开发中推送
- 将以下内容粘贴到 composer.json,避免打包认证信息和依赖:
{
"archive": {
"exclude": ["auth.json", "composer.lock", "vendor"]
}
}- 将以下内容粘贴到
.cnb.yml,提交到代码仓库后,点击代码仓库页面右上角 「云原生开发」 按钮进入开发环境:
.cnb.yml
$:
vscode:
- docker:
image: docker.cnb.cool/examples/language/php-8.4
services:
- vscode
- docker- 进入开发环境后,在命令行执行以下命令,配置认证凭据:
printf "machine composer.cnb.build\nlogin cnb\npassword %s\n" "${CNB_TOKEN}" > ~/.netrc- 打包 Composer 制品:
composer archive -f zip --file package- 发布到 CNB
注意:
- 如何获取
CNB_COMPOSER_URL请参考获取制品库地址 <vendor>/<package>/<version>需替换成当前包的对应值,例如monolog/monolog/3.8.1
curl --netrc -T package.zip "<CNB_COMPOSER_URL>upload/<vendor>/<package>/<version>"使用制品
拉取制品
按照上文拉取凭据配置 配置凭证后,使用以下命令拉取制品:
# 以 monolog/monolog 为例
composer require monolog/monolog删除制品
Composer 没有提供删除命令,请参考删除制品。
FAQ
Q1: 上传制品报错没有权限
示例:
curl --netrc <CNB_COMPOSER_URL>upload/monolog/monolog/3.8.0 -T monolog.zip
{"errcode":16,"errmsg":"not authorized"}解决方案:
Q2: 上传制品报错版本号格式不对
示例:
curl --netrc <CNB_COMPOSER_URL>upload/monolog/monolog/xxx3.8.0 -T monolog.zip
{"errcode":3,"errmsg":"validate [Version:xxx3.8.0] failed"}解决方案:
请使用 语义版本号。
关于 Composer 1.x
官方源已于 2025 年 8 月 1 日停止对 Composer 1.x 的支持。CNB Composer 制品库推荐使用 Composer 2.x 及以上版本。
如果仍在使用 Composer 1.x,可通过 composer self-update 命令更新为 2.x 最新稳定版本。