Linux 提交代码即触发github actions自动部署到服务器
阅读(1517)思路是:git commit --> github actions --> build --> deploy to server
详细过程如下。
1.服务器设置
1.1 生成公钥和私钥
本地操作即可:
$ ssh-keygen -t rsa -b 4096 -C "damonpeng@qq.com"
默认生成的文件中,~/.ssh/id_rsa(私钥)、~/.ssh/id_rsa.pub(公钥)。
1.2 新建用户 & 部署公钥
sudo - root
adduser user_github
su - user_github
mkdir .ssh
cd .ssh
vim authorized_keys # 新建公钥文件,将生成的.pub 公钥内容写入
chmod 600 ~/.ssh/authorized_keys # 仅当前用户可读/写
chmod 700 ~/.ssh # 只有当前用户可读/写/执行此目录
1.3 设置私钥登录
vim /etc/ssh/sshd_config
RSAAuthentication yes # CentOS7.4及以上无需此行,已被废弃
PubkeyAuthentication yes
service sshd restart
# 重启生效,或/bin/systemctl restart sshd.service
1.4测试一下私钥登录
ssh -i PATH/TO/KEY_FILE -p 22 USER_NAME@IP
2. github 设置
2.1 创建工程
2.2 Settings -> Secrets -> Actions -> New repository secret
依次创建以下内容:
- SSH_HOST: 111.230.220.x
- SSH_PORT: 36000
- SSH_USERNAME: user_github
- DEPLOY_KEY: 完整输入私钥内容
2.3 Actions -> set up a workflow yourself
在kaifage.com/.github/workflows/deploy.yml
,输入以下内容:
name: 自动部署 # 步骤名称
on:
push:
branches:
- master # 当 master 分支发生提交时触发
# paths-ignore: # 避免这些文件改变时触发
# - README.md
# - LICENSE
paths: # 指定哪些文件改变时触发
- src/**
jobs:
deploy:
runs-on: ubuntu-latest # 指定用什么版本服务器来执行
steps:
- name: 拉取代码
uses: actions/checkout@v3
- name: 安装依赖
run: npm i
- name: 编译构建
run: npm run deploy
- name: SSH 命令删除旧文件
uses: appleboy/ssh-action@master
with:
# 这里配置对应仓库设置的变量,就可以避免服务器配置暴露
host: ${{ secrets.SSH_HOST }}
port: ${{ secrets.SSH_PORT }}
username: ${{ secrets.SSH_USER }}
key: ${{ secrets.DEPLOY_KEY }}
# 先用 SSH 命令删除旧文件
script: |
rm -rf /data/kaifage.com/index.html
- name: 部署到服务器
uses: wlixcc/SFTP-Deploy-Action@master # 这个是sftp插件
with:
server: ${{ secrets.SSH_HOST }}
port: ${{ secrets.SSH_PORT }}
username: ${{ secrets.SSH_USER }}
ssh_private_key: ${{ secrets.DEPLOY_KEY }}
local_path: './dist/*'
remote_path: '/data/kaifage.com'
更多 github acitons 的语法:https://docs.github.com/cn/actions/using-workflows/workflow-syntax-for-github-actions