通过 Github Action 发布项目到 Aliyun 阿里云 ECS

KisChang Keep It Simple 本文由博客端 https://www.kischang.top 主动推送

通过 GitHub Action 发布项目到 Aliyun 阿里云 ECS,非常适合团队项目或是个人的小项目,操作简单、便于维护。

本文将通过最详细的描述,从每个步骤的源头开始讲起,保证小白也能成功。

通过 GitHub 的 Action 发布到 ECS 有几个关键点:

  1. 项目构建环境的初始化,以及项目的编译

这一步可以利用 Action 的构建模板,选择合适的基础环境,然后再定制化编译脚本完成初始化和编译流程。

  1. Action 的编译环境,如何安全的连接到 ECS 完成发布

项目完成编译后,需要把文件上传到服务器,并完成服务的重启,此时需要通过 SSH 等服务。

本文以 SSH 为主进行介绍,SSH 链接到 ECS,建议通过密钥形式,安全性更高。

下面是一份我的个人项目中的一份脚本,供大家参考:

name: Build And Deploy To Aliyun ECS
on:
  push:
    branches: [ master ]
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v2
        with:
          persist-credentials: false
          ref: master
          submodules: true
      - name: Install and Build
        run: |
          yarn install
          yarn build          
      - name: Deploy to aliyun server
        uses: easingthemes/ssh-deploy@v2.0.7
        env:
          SSH_PRIVATE_KEY: ${{ secrets.ALIYUN_SERVER_ACCESS_TOKEN }}
          ARGS: "-avzr --delete"
          SOURCE: "dist/"
          REMOTE_HOST: ${{ secrets.ALIYUN_SERVER_HOST }}
          REMOTE_USER: "root"
          TARGET: "/root/web"

分部分介绍:

第一部分:

name: Build And Deploy To Aliyun ECS

这个是任务的名称,参考作用。

第二部分:

on:
push:
branches: [ master ]

这部分是触发器,当发生哪些行为时,触发 GitHub Action 的执行。
如上配置,则是当 master 分支,发生 push 时,触发执行。
你同样可以切换到其他的分支或其他的行为,比如新 tag 的 push 等等,具体请参考:
https://docs.github.com/cn/free-pro-team@latest/actions/reference/events-that-trigger-workflows

第三部分

jobs:

这里就开始正式的构建项目了,jobs 就是工作流程,工作流程运行包括一项或多项作业。 作业默认是并行运行。
我们这里定义了一项作业,即 build。

runs-on: ubuntu-latest
steps:

这里定义了我们这项作业的运行环境,机器可以是 GitHub 托管的运行器或自托管的运行器。
可选的 GitHub 运行器有 windows、Ubuntu 和 macos,你也可以构建自托管的运行器,满足您高度的自定义运行环境需求。
我的项目是 NodeJS 编写的,默认的 Ubuntu 运行器包含 NodeJS 环境,所以我这里直接采用了 GitHub 提供的运行器。

steps 则是作业的步骤,每个步骤可以是运行命令或是其他操作。

- name: Checkout
  uses: actions/checkout@v2
  with:
  persist-credentials: false
  ref: master
  submodules: true

这是我们作业的第一个步骤,这个步骤的任务是把我们的源码 checkout 下来,此处选择的分支是 master。

- name: Install and Build
  run: |
     yarn install
     yarn build

这是作业的第二个步骤,NodeJS 项目的构建环境初始化和编译。

- name: Deploy to aliyun server
  uses: easingthemes/ssh-deploy@v2.0.7
  env:
    SSH_PRIVATE_KEY: ${{ secrets.ALIYUN_SERVER_ACCESS_TOKEN }}
    ARGS: "-avzr --delete"
    SOURCE: "dist/"
    REMOTE_HOST: ${{ secrets.ALIYUN_SERVER_HOST }}
    REMOTE_USER: "root"
    TARGET: "/root/web"

这是作业的最后一个步骤,项目编译完成后,将会在项目目录的 dist 下生成最终文件,我们只需要把这个目录下的所有问题发布到 ECS 即可。
这里使用的是 SSH 链接到了 ECS。
先详细介绍一下几个关键参数:

ARGS: "-avzr --delete"
SOURCE: "dist/"
TARGET: "/root/web"

这三个参数,将本地的 dist 目录下的所有文件覆盖到了云端的/root/web 目录

SSH_PRIVATE_KEY: ${{ secrets.ALIYUN_SERVER_ACCESS_TOKEN }}
REMOTE_HOST: ${{ secrets.ALIYUN_SERVER_HOST }}
REMOTE_USER: "root"

这三个参数是 SSH 的链接参数,user 即链接服务的用户名(阿里云一般是 root),host 即服务器地址(可以是 IP 也可以是域名)
SSH_PRIVATE_KEY 链接私钥
其中 HOST 和 KEY 两个我们采用了环境变量的方式引用,对应 secrets 的环境变量,你可以在项目的如下图所示位置进行配置:

gaecs1.png

我们配置了两个参数,HOST 比较简单,关于私钥的配置,请参考如下步骤:

(其实是 SSH 免密码登录的配置,熟悉的同学可以掠过)

  1. 我们需要创建一个私钥

我们可以利用阿里云控制台进行操作(同样,也可以用 Linux 的命令行进行操作)

进入阿里云的 ECS 控制台,在左侧菜单找到 < 网络与安全 > < 密钥对 >

点击创建密钥对,如下填写,名称和其他信息可以随意:
gaecs2.png

创建成功后,就会自动下载私钥文件,我们保存到本地即可。

  1. 利用私钥生成公钥

Windows 可以使用 WSL,Linux 的进入终端

输入如下命令,即可生成公钥

ssh-keygen -y -f /path/to/private_key > /path/to/public_key.pub
  1. 将公钥写入。ssh

将生成的公钥里面的内容,追加到 ECS 的~/.ssh/authorized_keys 中即可。

  1. 更新 SSH 配置,允许 root 登录

编辑/etc/ssh/sshd_config

修改如下配置:

PermitRootLogin yes

然后执行:

service sshd restart

应用配置

  1. 更新 GitHub 配置

进入 Secrets 配置,点击,如下图所示填写

名称填写我们在脚本里写的变量名:ALIYUN_SERVER_ACCESS_TOKEN

值,填写私钥的内容。
gaecs3.png
创建完成后,记得删掉私钥,并清空回收站,不要让任何人获取到私钥内容。

至此,一切大功告成!

  • GitHub

    GitHub 于 2008 年上线,目前,除了 Git 代码仓库托管及基本的 Web 管理界面以外,还提供了订阅、讨论组、文本渲染、在线文件编辑器、协作图谱(报表)、代码片段分享(Gist)等功能。正因为这些功能所提供的便利,又经过长期的积累,GitHub 的用户活跃度很高,在开源世界里享有深远的声望,并形成了社交化编程文化(Social Coding)。

    180 引用 • 1904 回帖 • 349 关注

赞助商 我要投放

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...