CircleCI自动部署egg.js项目
怎么接触到CircleCI
在看Vue源码时,发现工程里有.circleci目录,然后研究了下.发现CircleCI是个持续集成的工具.引用Vue作者尤雨溪的话:"CircleCI 真是个神器,可以 github push 触发,可以 cron 定时触发,可以用 Zapier/IFTTT 发 webhook 到 API 触发,具体代码用 docker 想跑什么都可以,还免费... 用来做各种任务自动化太爽了,比 lambda 还爽"
那我们的服务端项目,就可以用CircleCI不断集成新的代码,发布新的功能. 我们的前端项目,也可以用CircleCI不断集成新的代码,添加新的功能.
用已有的一个项目实践下
刚好我的github账户下有个基于egg.js写的的服务端项目, 可以用来实践下.
之前我的发布代码的步骤是:
- 用github客户端push最新的代码到master分支
- 在终端中,通过ssh连接到远端服务器
- 通过npm stop 停掉egg项目
- 进入到项目所在目录,通过git pull命令拉取最新代码
- 更新数据库结构, npx sequelize db:migrate --env=production
- 通过npm start 开启egg项目
如何通过CircleCI,让这些在github push 新代码到master分支时,自动执行?
两个job
build
- 打开https://circleci.com 用github账号登录
- 在控制台左侧找到add projects, 选择要管理的项目,点击
Set Up Project
- 在项目根目录下创建.circleci目录,在此目录下创建config.yml文件, 将步骤2中的配置文件代码拷贝到config.yml中
- 根据自己项目的项目,添加docker镜像, 我需要添加一个mariadb和redis镜像, 可见我的项目中.circleci/config.yml 链接
- build, 并解决发现的错误
- 直到build成功
deploy
- 如果是github私有仓库的话,需要配置 SSH 公钥, 可以走SSH渠道免密拉取代码
- 在项目配置中添加服务器的ssh key, 这个key要在自己电脑上生成好
- 在添加了build任务的config.yml中,添加deploy任务
- circleci项目配置中设置SSH_USER和SSH_HOST
- deploy中添加run 写入ssh连接服务器代码,和连接成功后执行的命令
config中添加workflow,组合build和deploy链接
这样每次有新的代码push到master分支就会自动测试,自动部署
注意
build完后, 发现yarn test
这一步报错了. 细看里边的错误, 大部分都是一些语法规范错误. 果然能发现自己代码的一些问题,改正后build成功
deploy遇到的问题
通过ssh user@host "commond" 通过这种方式执行的命令,bash会找 ~/.bashrc
文件,把里边的环境变量加载出来。和直接在终端里ssh登陆,然后在输入命令加载环境变量方式不同
网友评论