• 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生成一组公私秘钥对

    ssh-keygen -t rsa -C "Github 的邮箱地址"
    
    如 ssh-keygen -t rsa -C "123@gmail.com"
    
    • 1
    • 2
    • 3
    • 配置公钥,配置路径:github你的首页–>Settings–>SSH and GPG keys
    • 配置私钥,项目私有仓库的Settings->Secrets里添加私钥,名称为PRIVATE_KEY
      在这里插入图片描述

    二、新建项目仓库

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

    # 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_KEYSSH_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/"
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54

    参数项:

    • 部署到云服务器上需要用到 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被拷贝过去了
    在这里插入图片描述

  • 相关阅读:
    ImageIO的应用 (AWT和Swing初接触)
    爬虫(14) - Scrapy-Redis分布式爬虫(1) | 详解
    Yalmip+DCOPF+直流最优潮流
    【html5期末大作业】基于HTML仿QQ音乐官网网站
    1109 - 加密四位数
    计算机毕业设计之java+ssm高校课程评价系统
    图像处理之图像统计特性
    C#冒泡排序算法
    柏林噪声算法(Perlin Noise)
    【Git 全功能解析: 探索版本控制的强大工具】
  • 原文地址:https://blog.csdn.net/weixin_50367873/article/details/133863142