如何在使用 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
就没有问题。
请记住,为了优化传输,您还可以在构建过程中添加额外的脚本行来压缩依赖项目录。
我有一个带有 .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
就没有问题。
请记住,为了优化传输,您还可以在构建过程中添加额外的脚本行来压缩依赖项目录。