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被拷贝过去了

相关推荐
niucloud-admin8 小时前
JAVA V6 多商户商城 开发文档——job 计划任务开发
java·python·github
陈陈CHENCHEN10 小时前
【Linux】服务器根目录磁盘扩容操作记录
linux·运维·服务器
沸速存储11 小时前
AI 机器人靠哪些内存与存储驱动整机运行?
服务器·科技·嵌入式硬件·电脑
峰向AI12 小时前
Notion 太贵?这个 40K Star 的开源知识库,让你零成本搭建团队 wiki
github
fengyehongWorld12 小时前
Linux squid搭建基础代理服务器
linux·运维·服务器
逛逛GitHub13 小时前
37K Star 的 GitHub 开源项目开放 AI 网关,10 人团队免费用。
github
Cx330❀13 小时前
【Linux网络】网络层 IP 协议:从网段划分到内核源码解析
大数据·linux·服务器·网络·tcp/ip·性能优化·langchain
FuckPatience14 小时前
Git:the remote end hung up unexpectedly,Everything up-to-date
github
一技安身15 小时前
【信创】docker-26.0.2.tgz 原理 + 完整安装
linux·运维·服务器
郝学胜-神的一滴15 小时前
Effective Python 条款 13:善用星号解包,告别下标切片拆分的坑
服务器·开发语言·数据结构·python·程序人生·pycharm