如何通过Gitlab API创建composer.json不在根目录的Composer包
可行解决方案
你遇到的报错是因为Gitlab Composer包API默认会读取项目根目录的composer.json,对应你的场景有两种可直接落地的解决方法:
方案1:CI运行时临时复制composer.json到根目录
该方案对原有配置改动最小,仅需在curl命令前加一行文件复制指令即可,修改后的.gitlab-ci.yml示例如下:
stages: - deploy deploy: stage: deploy script: - apk add curl # 临时将app目录下的composer.json复制到CI运行环境的根目录 - cp app/composer.json ./composer.json - 'curl --header "Job-Token: $CI_JOB_TOKEN" --data tag=$CI_COMMIT_TAG "${CI_API_V4_URL}/projects/$CI_PROJECT_ID/packages/composer"'
该操作仅在CI运行时生效,不会修改你仓库内的实际文件结构。
方案2:修改curl参数显式指定composer.json路径
直接通过API的表单参数上传指定路径的composer.json,不需要修改文件位置,修改后的配置示例如下:
stages: - deploy deploy: stage: deploy script: - apk add curl - 'curl --header "Job-Token: $CI_JOB_TOKEN" --form tag=$CI_COMMIT_TAG --form "package=@app/composer.json" "${CI_API_V4_URL}/projects/$CI_PROJECT_ID/packages/composer"'
这里将原有的--data参数改为--form类型,新增的package字段会直接把指定路径的文件传给API,Gitlab会优先读取你上传的文件内容,不会再去根目录查找。
注意事项
- 两种方案都需要保证你打标签的提交中,
app/composer.json文件真实存在且格式合法 - 如果包内代码不在根目录,需要在
composer.json的autoload字段中配置正确的路径映射,避免后续安装包时出现类找不到的问题
内容的提问来源于stack exchange,提问作者Slimu
相关产品推荐
相关产品推荐

