Skip to main content

Update Server by Github Action

这里介绍一个非常简单的使用 github-action 来更新服务器的方法。主要实现的思路:

  1. 在服务器上配置好 git 拉取代码
  2. github-action 登录服务器,并执行一个 shell 脚本
  3. 这个脚本会拉取最新代码,编译,并重启服务

配置 github-action 脚本

name: Deploy Server
on:
push:
branches: [master, main]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- run: some scripts

这个脚本在有代码 push 到 master 分支时,会自动触发并 run some scripts

github-action runner 连接服务器

  1. 本机使用命令 ssh-keygen 创建一个 ssh key,会分别生成 public 和 private key
  2. 使用命令 ssh-copy-id -p port user@host 将 public key 复制到目标服务器上
  3. 在 github 仓库设置中将 private key 配置给 github-action
配置 Github-Action secrets

菜单位置: [Settings/Secrets and variables/Actions] 配置以下变量以供 github-action-runner 使用:

  • SSH_PRIVATE_KEY 刚才生成的 private key,将内容复制出来
  • SERVER_HOST 远程服务器的 host
  • SERVER_PORT 远程服务器开放 ssh 连接的 port
  • SERVER_USER 登录远程服务器使用的 user

最终完整脚本

name: Deploy Server

on:
push:
branches: [master, main]

jobs:
deploy:
runs-on: ubuntu-latest
steps:
- run: |
eval $(ssh-agent -s)
echo "${{secrets.SSH_PRIVATE_KEY}}" > ssh.key
mkdir -p ~/.ssh
chmod 0600 ssh.key
ssh-add ssh.key
echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config
ssh -p ${{secrets.SERVER_PORT}} {{secrets.SERVER_USER}}@${{secrets.SERVER_HOST}} "cd ~/server/ && sh update.sh"

这里的 some script 就是 "cd ~/server/ && sh update.sh"了,高亮部分根据自己的情况修改。