书接上文《GitLab CI/CD (一) :自动打包部署Flutter项目》,这次继续记录用 GitLab CI/CD 自动部署项目中 H5 部分到测试环境的方法。

项目说明

这个 H5 的项目主要是作为上篇中 Flutter 项目的补充存在的,因为 APP 中有些页面有复杂图表、动态更新,后续还有可能需要能够方便地分享到主流社交平台进行引流的需求,所以这部分选择用 Web 的方式实现。具体技术选型是 Next.js + TypeScript + Material-UI,通过 Next.js 自带的 Node.js 服务服务器部署,并使用 pm2 做进程管理。

注册 Runner

安装方法参考上篇,这次以 shell 作为执行器注册 Runner,如下图:
shell
配置方法很简单,只要在输入 executor 时输入 shell 即可,其他选项也都和上篇中的一样。

编写 CI 配置文件

配置如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
stages:
- deploy

deploy_project:
stage: deploy
variables:
GIT_STRATEGY: none
script:
- cd /root/heart_health_h5
- git pull
- cnpm install
- cnpm run build
- pm2 restart 0

tags:
- nextjs

script 执行命令的部分很简单,就是进入项目目录,更新源码,安装依赖,执行编译并重启 pm2 管理的服务器进程。需要说明的是通过 variables 指定的 GIT_STRATEGY: none,参考 https://docs.gitlab.com/ee/ci/yaml/README.html, 这是为了跳过 Runner 自动执行的 Git 相关操作,因为 shell 环境不像上篇的 docker 那样每次运行都是新的,所以并不需要 CI 自动下载更新代码,完全可以在命令中更方便灵活地处理。

处理 git pull 需要输入用户名密码的问题

因为是内部的测试服务器,所以简单粗暴得使其执行 git 操作时记住帐号密码即可。
在项目目录下执行:

1
git config --global credential.helper store

然后执行一次 git pull,输入的帐号和密码就会被自动存储,之后再操作就不要输入了

指定 Runner 运行 shell 所使用的用户

第一次注册好 Runner 后测试 CI 任务,结果提示权限不足,才想起来这台服务器上 H5 项目是使用 root 帐号运行的,而 Runner 是在普通用户下安装的,所以需要重新安装并指定以 root 用户执行:

1
2
3
4
5
6
# 先卸载
gitlab-runner uninstall
# 再安装,同时指定工作目录和使用的用户
gitlab-runner install --working-directory /root --user root

sudo service gitlab-runner restart

效果

每次向 master 分支提交代码时,都会自动触发 CI 流水线:
jobs
result

再也不用改完代码还要再去登陆服务器手动更新部署啦