Linux 提交代码即触发github actions自动部署到服务器

阅读(1310)

思路是: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

Tags: