0%

Git+github actions + ssh 自动部署

背景

一个简单的API服务,由于经常改动,每次改动后还需要手动登录服务器,pull下代码,然后重启,作为多一步都嫌麻烦的人来说,绝对不能接受。

功能设想

由于代码仓库是部署在github上的,想到了github action,由于之前没有了解过github action,不知道能否实现,于是开始了学习github action的过程,发现完全没问题,亦有种相见恨晚的感觉。

主要实现的点:

  • 当代码push到master分支后,自动pull下来代码;
  • 然后重启服务;

就是这么简单的几个步骤。

实现细节

考虑到服务不复杂且较简单,依赖不多,本着怎么简单怎么来,直接使用ssh登录到服务器执行命令即可。

前期准备

准备ssh免密登录的private key,我这里直接用我自己机器的key,建议重新生成一个

1
2
3
4
# 生成key
ssh-keygen -t rsa -C "github actions"
# 复制到服务器
ssh-copy-id -i [公钥文件] user@host

在github的仓库中设置思考,处于安全性的考虑,使用GitHub的Secrets。 在项目的Settings->Secrets->Actions增加私钥,我这边将服务器的Host,Username都配置进去了,方便修改。

Actions文件

存储在项目目录的.github/workflows/deploy.yml,文件名可以随便起,路径必须对。

actions文件示例如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
name: deploy
on:
push:
branches: [ master ]
pull_request:
branches: [ master ]
workflow_dispatch:
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: executing remote ssh commands to develop
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.DEPLOY_HOST }}
username: ${{ secrets.DEPLOY_USER }}
key: ${{ secrets.DEPLOY_SECRET }}
script: cd [path] && git pull && sudo supervisorctl restart param

我这里用的是supervisor启动的服务,如果用其他方式启动的,可替换自己的重启命令。

另外,使用到了ssh-action, 其中:

  • host:为自己主机的地址,这里设置在了项目的secrets中
  • username: 为主机ssh的用户名,同样写在了项目的secrets中
  • key:为登录主机的私钥

其他参数可参考ssh-action的项目主页。

此时,可直接push到master分支来测试了。

可完善的点

  • 对于项目依赖,没有自动安装,可增加pip3 install -r requirements自动安装相关依赖,需要做好错误处理;
  • 部署成功或失败,可增加监控或者通知;

reference