Github actions - Vue前端+Egg.js后端

原创
2022/05/20 17:34
阅读数 104

生成ssh

  1. 生成 ssh 密钥对
ssh-keygen -m PEM -t rsa -b 4096

一路回车就行,执行完成后,我是登录的root用户 ,就会在/root/.ssh下生成两个文件:id_rsa(私钥)id_rsa..pub(公钥)

  1. 将公钥的内容贴到目标服务器的 /root/.ssh/authorized_keys中
cat id_rsa.pub >> authorized_keys
  1. 配置私钥到仓库

在仓库的 settings/secrets/actions, 添加一个配置项,把私钥内容粘贴在其中,同时配置上其他服务器host(公网IP)、用户名(root)等

rsync 问题

rsync是linux系统下的数据镜像备份工具。使用快速增量备份工具Remote Sync可以远程同步,支持本地复制,或者与其他SSH、rsync主机同步。

  • 命令未发现 -bash: rsync: command not found

安装

apt install rsync

创建工作流文件

直接选择通用的

当然你可以手动创建,在仓库根目录中创建.github/workflows文件夹,再创建一个 YAML 文件

yaml 配置举例:

# 前端、后端 CI/CD
name: Frontend & Backend CI/CD

# 触发workflow的条件
on:
  push:
    # 只有master分支发生push事件时,才会触发workflow
    branches: [ master ]
  pull_request:
    branches: [ master ]

# 变量
env:
  SERVER_PRIVATE_KEY: ${{ secrets.SERVER_PRIVATE_KEY }} # 服务器私钥
  SERVER_HOST: ${{ secrets.SERVER_HOST }} # 服务器IP地址
  USER_NAME: ${{ secrets.USER_NAME }} # 服务器用户名

# jobs表示执行的一项或多项任务
jobs:
  # 任务的job_id,具体名称自定义
  # build frontend 代表打包前端
  build-frontend:
    # runs-on字段指定运行所需要的虚拟机环境
    runs-on: ubuntu-latest

    strategy:
      matrix:
        # 配置所需node版本
        node-version: [16.x]

    # 设置工作目录(因为本项目包含多个子项目)
    defaults:
      run:
        working-directory: ./frontend

    # 步骤
    steps:

    # 检出仓库副本
    - uses: actions/checkout@v3

    # 规定node版本
    - name: Use Node.js ${{ matrix.node-version }}
      uses: actions/setup-node@v3
      with:
        node-version: ${{ matrix.node-version }}

    # 缓存依赖
    - name: Cache nodemodules
      uses: actions/cache@v3
      with:
        path: ~/.npm
        key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
        restore-keys: |
          ${{ runner.os }}-node-

    # 安装依赖
    - name: Install
      run: npm install

    # 打包
    - name: Build
      run: npm run build:prod

    # 推送资源
    - name: Deploy
      uses: easingthemes/ssh-deploy@v2.2.11
      env:
        SSH_PRIVATE_KEY: ${{ env.SERVER_PRIVATE_KEY }}
        ARGS: '-avz --delete'
        SOURCE: 'frontend/dist/' # 要推送的目录,路径相对于代码仓库的根目录
        REMOTE_HOST: ${{ env.SERVER_HOST }}
        REMOTE_USER: ${{ env.USER_NAME }}
        TARGET: /var/www/html/www.smartmiao.com/smartmiao-demo/frontend # 服务器目标路径

  # build-backend 代表打包后端
  build-backend:
    # runs-on字段指定运行所需要的虚拟机环境
    runs-on: ubuntu-latest

    # 步骤
    steps:

      # 检出仓库副本
      - uses: actions/checkout@v3

      # 推送资源
      - name: Deploy
        uses: easingthemes/ssh-deploy@v2.2.11
        env:
          SSH_PRIVATE_KEY: ${{ env.SERVER_PRIVATE_KEY }}
          ARGS: '-avz --delete'
          SOURCE: 'backend/'
          REMOTE_HOST: ${{ env.SERVER_HOST }}
          REMOTE_USER: ${{ env.USER_NAME }}
          TARGET: /var/www/html/www.smartmiao.com/smartmiao-demo/backend
          EXCLUDE: '/node_modules, config/config_env_local.js, /config/config_env_prod.js, /app/public/, /logs' # 排除文件,否则会被删除

      # 重启服务
      - name: Restart service
        uses: appleboy/ssh-action@master
        with:
          host: ${{ secrets.SERVER_HOST }}
          username: ${{ secrets.USER_NAME }}
          key: ${{ secrets.SERVER_PRIVATE_KEY }}
          # 执行脚本
          script: |
            cd /var/www/html/www.smartmiao.com/smartmiao-demo/backend
            npm install --production
            npm run stop
            npm run start

效果演示:

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
0 评论
0 收藏
0
分享
返回顶部
顶部