Update Server by Github Action
这里介绍一个非常简单的使用 github-action 来更新服务器的方法。主要实现的思路:
- 在服务器上配置好 git 拉取代码
- github-action 登录服务器,并执行一个 shell 脚本
- 这个脚本会拉取最新代码,编译,并重启服务
配置 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 连接服务器
- 本机使用命令
ssh-keygen
创建一个 ssh key,会分别生成 public 和 private key - 使用命令
ssh-copy-id -p port user@host
将 public key 复制到目标服务器上 - 在 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"
了,高亮部分根据自己的情况修改。