如何将Laravel发布文件夹整体打包为GitLab CI制品?
解决步骤
1. 确认发布文件夹根路径
Laravel Envoy 标准零停机部署的目录结构固定,你可以通过以下两种方式直接拿到发布文件夹根路径:
- 查看你的
Envoy.blade.php配置,你定义的部署根目录(通常为$deployPath变量)下,current是指向最新生效release文件夹的软链,releases/目录下存放所有历史发布版本,当前发布版本的绝对路径就是$deployPath/releases/本次发布的commit哈希/时间戳 - 登录到你的 staging 服务器,执行
readlink 你的部署根目录/current即可直接输出当前生效release文件夹的绝对路径
2. 同步远程发布文件夹到CI运行器(如适用)
如果你是用Envoy直接在远程服务器执行部署,发布文件夹生成在远程服务器上,需要先同步到GitLab CI运行器本地才能打包为制品,修改你.gitlab-ci.yml的script段:
script: - *init_ssh - envoy run deploy --on="staging" --commit="$CI_COMMIT_SHA" # 将远程服务器的最新发布文件夹同步到CI运行器当前工作目录,命名为release # 请将下方的服务器账号、IP、部署根目录替换为你自己的配置 - rsync -avz 你的服务器账号@staging服务器IP:你的部署根目录/current/ ./release/
如果你的Envoy是直接在CI运行器本地生成发布文件夹,跳过本步骤,直接拿到本地生成的release文件夹路径即可。
3. 修改制品配置打包整个文件夹
直接把整个release文件夹路径写入artifacts.paths,GitLab CI会自动递归打包该目录下的所有内容:
artifacts: paths: - ./release/ expire_in: 1 days when: on_success
调试小技巧
如果不确定路径是否正确,可以在script段加一行ls -la打印CI运行器当前工作目录的文件结构,或者在服务器上执行ls 你的部署根目录/releases查看生成的发布文件夹名称,确认路径后再配置即可。
内容的提问来源于stack exchange,提问作者Prospero
相关产品推荐
相关产品推荐

