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里去配置。
首先进入 Linux 系统的用户目录下的 .ssh 目录

cd ~/.ssh/

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

ssh-keygen -t rsa -C "Github 的邮箱地址"

如 ssh-keygen -t rsa -C "123@gmail.com"

命令生成之后使用 ls 命令查看一下

id_rsa  id_rsa.pub

密钥生成后会在当前目录下多出两个文件,id_rsa 和 id_rsa.pub,其中 id_rsa 是私钥(客户端使用),id_rsa.pub 这个是公钥(服务器使用)
SSH_PRIVATE_KEY [required]
Private key part of an SSH key pair. The public key part should be added to the authorized_keys file on the server that receives the deployment. ==>详见:ssh-deploy

  • 配置公钥,配置路径: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/"


参数项:

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
可以的,Github Actions可以用来自动化前端项目的部署云服务器。以下是一个简单的例子: 1. 首先,在你的Github仓库中创建一个`.github/workflows`文件夹,并在该文件夹下创建一个`deploy.yml`文件。 2. 在`deploy.yml`文件中设置触发部署的事件,例如push到master分支。然后设置一个`job`,该`job`会在触发事件后运行。 3. 在该`job`中,使用`actions/checkout` action拉取代码,并使用`actions/setup-node` action安装依赖。 4. 接下来,使用你喜欢的打包工具打包你的前端代码,例如webpack或者parcel。打包后的文件会被存储在一个`dist`文件夹中。 5. 然后,使用`appleboy/ssh-action` action将打包后的文件上传到云服务器。该action会使用SSH登录到你的服务器,并将文件复制到服务器上的指定目录。 下面是一个示例的`deploy.yml`文件: ```yml name: Deploy to Cloud Server on: push: branches: - master jobs: deploy: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v2 - name: Setup Node uses: actions/setup-node@v1 with: node-version: '12.x' - name: Install dependencies run: npm install - name: Build run: npm run build - name: Deploy to Cloud Server uses: appleboy/ssh-action@master with: host: ${{ secrets.HOST }} username: ${{ secrets.USERNAME }} password: ${{ secrets.PASSWORD }} port: ${{ secrets.PORT }} script: | cd /path/to/your/project rm -rf * scp -r /path/to/your/project/dist/* ./ ``` 这个例子是使用密码登录到云服务器的。如果你使用的是SSH Key,你需要相应地修改`deploy.yml`文件。此外,你需要在Github仓库的`Settings`中添加`secrets`,以保存你的服务器信息和登录凭证。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

C+ 安口木

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值