如何在使用 Gitlab CI 移动到服务器之前使用 Composer 安装依赖项

How to install dependencies with Composer before moving to server with Gitlab CI

我有一个带有 .php 文件的 Gitlab 存储库,它通过 Gitlab CI:

通过这个 rsync 命令部署
- rsync -avz -e "ssh -i ~/.ssh/id_rsa -p $SERVER_PORT" /builds/account-name/group-name/project-name/* $SERVER_USER@$SERVER_HOST/$SERVER_DOMAIN

其中 /builds/account-name/group-name/project-name/* 是我们存储库的根目录。

现在我想添加一个步骤,在将存储库传输到我们的服务器之前安装 Composer 依赖项,但我不知道如何在部署阶段获取已安装的依赖项。 composer.json 文件位于 /1/src/:

我在部署脚本工作之前添加的 build 步骤,如下所示:

build_master:
  image: composer
  stage: build
  only:
    - dev
  script:
    - composer install -d /builds/account-name/group-name/project-name/1/src/ --ignore-platform-reqs
  artifacts:
    paths:
      - vendor/
    expire_in: 30 minutes

Gitlab 中的日志显示所有包都在安装,但是当它尝试为作业上传工件时显示:

Uploading artifacts for successful job
 Uploading artifacts...
 WARNING: vendor/: no matching files                
 ERROR: No files to upload                          
 Job succeeded

我希望作曲家将所有内容安装到 vendor 文件夹中,Gitlab 将其存储在它的工件中。在部署步骤中,我正在考虑像上面那样添加另一条 rsync 行,并将源文件夹更改为 vendor/ 并将目标更改为 $SERVER_USER@$SERVER_HOST/$SERVER_DOMAIN/1/src/vendor.

我不知道哪里出了问题。也许它与 artifact-vendor 文件夹也需要相对于 1/src/ 有关,我想知道我是否真的需要部署脚本中的两行 rsync 行,而不是将作曲家包安装到正确的文件夹中直接在 /builds/.../project-name/ 文件夹中,这样只需要一个 rsync 操作。

来自 Gitlab 的文档 page :

All paths to files and directories are relative to the repository that was cloned during the build.

artifacts:paths也是相对于你的项目构建的根。

当 运行 作曲家在 1/src 时,vendor 目录将在 1/src/vendor 创建,这是您希望从中上传资产的路径。

您的作业配置为:

build_master:
  # ...
  script:
    - composer install -d 1/src --ignore-platform-reqs
  artifacts:
    paths:
      - 1/src/vendor

就是说,如果 vendor 应该位于项目的根目录中,运行 composer install 就没有问题。

请记住,为了优化传输,您还可以在构建过程中添加额外的脚本行来压缩依赖项目录。