一、背景
- 新项目( PHP )使用了 Composer
- 目前正测试 Gitlab 来进行 CI/CD
- 以前的项目(基于 Codeigniter )很少使用 Composer ,所以直接通过( webhook )触发脚本
git pull到生产服务器上就完事了
二、产生的疑问
2.1 一句话概括
在需要安装包依赖的情况下如何做到无缝部署到生产环境?
(我对无缝的理解是代码更新完全不会影响到现有项目的运行)
2.2 具体描述
- 项目中( Composer 管理的)包的安装在哪个过程进行最好? 构建过程中还是部署代码生产环境后呢?
- 如果是构建过程中安装好要通过什么方式分发的生产服务器?(因为通过这种方式分发就要脱离 git 的版本控制,还能否做到增量更新吗)
- 如果是部署后安装如何避免安装出错或安装过慢导致的“代码已经部署并运行但因缺失包导致故障”呢?
三、自己的思考
假定生产环境:
代码路径: /home/wwwroot/html
部署方式 1:不论是在哪个过程对包依赖进行处理,当代码到达生产环境行时,不直接对 /home/wwwroot/html 做处理,而是创建一个文件夹(如 /home/wwwroot/production20161225/ ),新代码将被复制或 pull 到此处,然后创建一个软连接。(不足:如何管理这些目录呢?每次都要新建一个不同的目录吗?)
部署方式 2:所有代码(包括依赖的包)入库,部署时 git pull
四、总结
以上,是我对代码到达生产服务器后如何处理最妥善(无缝更新代码)抱有的疑惑,站内站外查了很多资料仍然不太明了,还请大家指教和分享。谢谢。
有些啰嗦,十分抱歉。
另外分享一些搜索过程中的资料:
Do I need Laravel Framework + Composer in production?
How to deploy correctly when using Composer's develop / production switch?