GitHub Action 通过SSH 自动部署到云服务器上

准备

正式开始之前,你需要掌握 GitHub Action 的基础语法:

  • workflow (工作流程):持续集成一次运行的过程,就是一个 workflow。
  • name: 工作流的名称。
  • on: 指定次工作流的触发器。push 表示只要有人将更改推送到仓库就会触发工作流运行。(点击这里了解如何指定特定分支,路径或标签)
  • jobs: 将工作流运行的所有作业组合到一起。
  • build-and-deploy: 定义的作业的名称。
  • runs-on: 将作业配置为在最新版本的 Ubuntu Linux 上运行。这意味着作业将在 GitHub 托管的新虚拟机上执行。有关使用其他运行器的语法示例,请参阅 GitHub 操作的工作流语法。
  • steps: 将作业中运行的所有步骤组合在一起。嵌套在此部分下的每个项都是一个单独的操作或 shell 脚本。
  • uses: 指定需要运行的 action。
  • env: 指定运行 action 时需要用到的环境变量的值。

一、密钥准备

为了方便运行GitHub Actions时登录GitHub账号,我们使用SSH方式登录。就是要把设备的私钥交给GitHub Actions,公钥交给GitHub,需要去Settings里去配置。

使用ssh-keygen生成一组公私秘钥对

javascript 复制代码
ssh-keygen -t rsa -C "Github 的邮箱地址"

如 ssh-keygen -t rsa -C "123@gmail.com"
  • 配置公钥,配置路径:github你的首页-->Settings-->SSH and GPG keys
  • 配置私钥,项目私有仓库的Settings->Secrets里添加私钥,名称为PRIVATE_KEY

二、新建项目仓库

在仓库的Actions选项卡下点击新建.github/workflow/blank.yml,名称默认或者自定义修改,配置如下:

javascript 复制代码
# This is a basic workflow to help you get started with Actions

name: Deploy My Server

on:
  push:
    branches: [ master ]

  # Allows you to run this workflow manually from the Actions tab
  workflow_dispatch:

# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
  # This workflow contains a single job called "build"
  build:
    # The type of runner that the job will run on
    runs-on: ubuntu-latest

    # Steps represent a sequence of tasks that will be executed as part of the job
    steps:
      # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
      - uses: actions/checkout@v2

      - name: use Node.js
        # 使用action库  actions/setup-node安装node
        uses: actions/setup-node@v1
        with:
          node-version: 16.x
      # 安装依赖
      - name: npm install
        run: npm install
      # 打包
      - name: npm build
        run: npm run build
      # 部署到服务器
      - name: deploy
        uses: easingthemes/ssh-deploy@v2.1.1
        env:
          # 本地.ssh文件下的私钥id_rsa,存在secrets的PRIVATE_KEY中
          SSH_PRIVATE_KEY: ${{ secrets.PRIVATE_KEY }}
          # 复制操作的参数。"-avzr --delete"意味部署时清空服务器目标目录下的文件
          ARGS: "-avzr --delete" 
          # 源目录,相对于$GITHUB_WORKSPACE根目录的路径
          SOURCE: "./public/"
          # 服务器域名/IP
          REMOTE_HOST: ${{ secrets.HOST }}
          # 服务器默认用户名为root
          REMOTE_USER: "root"
          # 目标目录
          TARGET: '/usr/local/xxx/dist'
          # 排除目录
          EXCLUDE: "/node_modules/"

参数项:

  • 部署到云服务器上需要用到 easingthemes/ssh-deploy@main
  • SSH_PRIVATE_KEY: 是在服务器上生成的 SSH 私钥,可以使用命令 ssh-keygen -m PEM -t rsa -b 4096 生成,并配置到仓库的 Secrets 中。
  • ARGS: 默认即可。
  • SOURCE: 需要上传到服务器上的文件的目录。
  • REMOTE_HOST: 服务器公网 IP 或域名。
  • REMOTE_USER: 服务器 SSH 用户名。
  • TARGET: 文件上传到服务器上保存的目录。
  • EXCLUDE: 可指定部分文件不上传。

文件同步原理请参考rsync教程

三、push分支到仓库

push内容到仓库后,Action会自动执行工作流,此时你再看看你配置的TARGET服务器目录,就会发现文件dist被拷贝过去了

相关推荐
用户4099322502121 小时前
如何让你的FastAPI Celery Worker在压力下优雅起舞?
后端·github·trae
夏至春来-美美4 小时前
Linux第一阶段练习
linux·运维·服务器
小前端学徒4 小时前
github actions (或本地) 使用RSA登录云服务器
github
SelectDB5 小时前
Doris MCP Server 0.5.1 版本发布
github·apache·mcp
程序媛Dev5 小时前
Kubekey 安装 KubeSphere 劝退?试试 Sealos 这个“一行命令”平替方案
开源·github
哈基米喜欢哈哈哈6 小时前
Linux常用命令(后端开发版)
linux·运维·服务器
掘金安东尼6 小时前
独立开发/自由职业/远程工作:这年头不上班也能过挺好!!
前端·面试·github
玖剹6 小时前
深入解析Linux信号处理机制
linux·运维·服务器·网络·c++·ubuntu
wl85117 小时前
SF-HCI-SAP问题收集22 内外网映射
运维·服务器