背景
一个简单的API服务,由于经常改动,每次改动后还需要手动登录服务器,pull下代码,然后重启,作为多一步都嫌麻烦的人来说,绝对不能接受。
功能设想
由于代码仓库是部署在github上的,想到了github action,由于之前没有了解过github action,不知道能否实现,于是开始了学习github action的过程,发现完全没问题,亦有种相见恨晚的感觉。
主要实现的点:
- 当代码push到master分支后,自动pull下来代码;
- 然后重启服务;
就是这么简单的几个步骤。
实现细节
考虑到服务不复杂且较简单,依赖不多,本着怎么简单怎么来,直接使用ssh登录到服务器执行命令即可。
前期准备
准备ssh免密登录的private key,我这里直接用我自己机器的key,建议重新生成一个
1 | 生成key |
在github的仓库中设置思考,处于安全性的考虑,使用GitHub的Secrets。 在项目的Settings->Secrets->Actions增加私钥,我这边将服务器的Host,Username都配置进去了,方便修改。
Actions文件
存储在项目目录的.github/workflows/deploy.yml,文件名可以随便起,路径必须对。
actions文件示例如下:
1 | name: deploy |
我这里用的是supervisor启动的服务,如果用其他方式启动的,可替换自己的重启命令。
另外,使用到了ssh-action, 其中:
- host:为自己主机的地址,这里设置在了项目的secrets中
- username: 为主机ssh的用户名,同样写在了项目的secrets中
- key:为登录主机的私钥
其他参数可参考ssh-action的项目主页。
此时,可直接push到master分支来测试了。
可完善的点
- 对于项目依赖,没有自动安装,可增加pip3 install -r requirements自动安装相关依赖,需要做好错误处理;
- 部署成功或失败,可增加监控或者通知;