Composer 制品库

该文档介绍了Composer制品库的推送和拉取凭据配置、推送和拉取制品的方法及相关注意事项。还给出了常见问题及解决办法,如上传制品抛错权限和版本号格式不对的处理方式,同时提醒使用composer 2.x及以上版本 。

推送凭据配置

通过 cnb REST API 上传制品文件到 composer 制品库。如何获取 CNB_TOKEN 请参考创建访问令牌

配置 .netrc 以在使用 curl 命令时自动加载推送凭据

echo -e "\nmachine composer.cnb.cool\nlogin cnb\npassword <CNB_TOKEN>" >> ~/.netrc

或者直接在 curl 命令中显示指定推送凭据

curl -ucnb:<CNB_TOKEN> https://composer.cnb.cool/xxx... -T <PATH_TO_FILE>

拉取凭据配置

1.添加制品库地址到全局 config.json (通常位于 ~/.composer/config.json)。如何获取 CNB_COMPOSER_URL 请参考获取制品库地址

# 关闭默认官方源
composer config repos.packgist false -g
# 使用 cnb 源
composer config repos.cnb composer <CNB_COMPOSER_URL> -g

2.添加凭据到全局 auth.json (通常位于 ~/.composer/auth.json)

composer config http-basic.composer.cnb.cool cnb <CNB_TOKEN> -g

推送制品

::: tabs @tab 本地命令行推送

1.粘贴以下内容到 composer.json, 避免打包认证信息和依赖

{
    "archive": {
        "exclude": ["auth.json", "composer.lock", "vendor"]
    }
}

2.进入包目录, 打包 Composer 制品

composer archive -f zip --file package

3.发布到 CNB

注意:

  1. 如何获取 CNB_COMPOSER_URL 请参考获取制品库地址
  2. <vendor>/<package>/<version> 需替换成当前包的对应值, 例如 monolog/monolog/3.8.1
curl --netrc "<CNB_COMPOSER_URL>upload/<vendor>/<package>/<version>" -T package.zip

@tab 云原生构建中推送

1.粘贴以下内容到 .cnb.yaml

注意:

  1. CNB_COMPOSER_URL需要被替换,如何获取请参考获取制品库地址
  2. <vendor>/<package> 需替换成当前包的对应值, 例如 monolog/monolog
$:
  tag_push:
    - docker:
        image: docker.cnb.cool/examples/language/php-8.4
      stages:
        - name: 配置认证凭据
          script: echo -e "machine composer.cnb.cool\nlogin cnb\npassword ${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}"

2.粘贴以下内容到 composer.json, 避免打包认证信息和依赖

{
    "archive": {
        "exclude": ["auth.json", "composer.lock", "vendor"]
    }
}

3.提交一个 Tag, 将会触发云原生构建, 注意: Tag 值将会作为制品版本号, 请使用语义版本号

@tab 云原生开发中推送

1.粘贴以下内容到 composer.json, 避免打包认证信息和依赖

{
    "archive": {
        "exclude": ["auth.json", "composer.lock", "vendor"]
    }
}

2.粘贴以下内容到 .cnb.yaml, 提交到代码仓库后, 点击代码仓库页面右上角 「云原生开发」 按钮进入开发环境

$:
  vscode:
    - docker:
        image: docker.cnb.cool/examples/language/php-8.4
      services:
        - vscode
        - docker

3.进入开发环境后, 在命令行执行以下命令, 配置认证凭据

echo -e "machine composer.cnb.cool\nlogin cnb\npassword ${CNB_TOKEN}" > ~/.netrc

4.打包 Composer 制品

composer archive -f zip --file package

5.发布到 CNB

注意:

  1. 如何获取 CNB_COMPOSER_URL 请参考获取制品库地址
  2. <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 没有提供删除命令, 请参考删除制品

FQA

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"}

解决方案:

请使用 语义版本号

Q3: 关于 composer 1.x

官方源在 2025 年 8 月 1 日, 已停止对 composer 1.x 的支持

cnb composer 制品库也推荐使用 composer 2.x 及以上版本的命令行

若您使用的是 composer 1.x 版本, 可通过 composer self-update 命令更新为 composer 2.x 的最新稳定版本.

点评

点赞或评论
加载评论中...