经过几天的研究(感激另一位后端同事「仁杰」提供的帮助),已经将 Gitlab 的 CI/CD 已经使用上,已经完成如下:

  1. 代码 merged dev 自动触发,将 dev 分支代码部署到测试服。
  2. 打 tag 后,支持手动点击触发集成流程,将当前 tag 代码部署到 2 台生产服务器(用户无感)
  3. 支持一键 rollback,如果此版本出现 bug,支持回滚操作。

贴两张效果图,如下

images

images

PHP 的部署使用的是 Deployer,再使用的过程中遇到,踩到了几个坑,这里记录一下。

php-fpm realpach_cache

在 php 7.1 版本环境下,每次发版后,因 php-fpm 使用的 opcache 缓存的缘故,每次发布代码后,即使软连已经指向到最新的版本的了,但实质上还是 include 就代码文件,这就很苦恼了,经过查阅发现有以下三种解决方法:

  1. 发布完成后,reload php-fpm 可解决,命令 service php7.1-fpm reload

此种方法,也是 deployer 提供的一种方式,见文章,贴出代码如下:

让我们在deploy完成后重新加载php-fpm :

1
2
3
4
5
task('reload:php-fpm', function () {
    run('sudo /usr/sbin/service php7-fpm reload');
});

after('deploy', 'reload:php-fpm');

reload 等同于 nginx 的 reload 会优雅的重载 php-fpm,不会中断正在服务的 php-fpm 子进程。

  1. 使用 cachetoole 工具,只清理 opcache 或 apcu 的 cache

cachetoole 工具的使用,见文档,注意根据自己的 php 版本对应下载。

两种方式都尝试过,都可以成功,个人认为如果你想这么麻烦,直接采用方式一即可。

laravel 中的坑

错误如下:

The only supported ciphers are AES-128-CBC and AES-256-CBC

解决方法:

1.创建 .env

1
copy .env.example .env

2.搜的

1
artisan config:clear

相关 issues

参考文章