GitHub Actions 部署页面至阿里云ECS

2,997 阅读3分钟

GitHub Action是GitHub推出的一个 CI\CD持续集成服务。

它可以创建和共享操作脚本以执行所需的任何任务(包括CI / CD),并在完全定制的工作流程中进行组合操作。

如果你需要某个 action,不必自己写复杂的脚本,直接引用他人写好的 action 即可,整个持续集成过程,就变成了一个 actions 的组合。

之前很长一段时间我都是将GitHub当作代码仓库或者文件存储库,项目的发布都是直接上传服务器,有了 GitHub Action 以后,它可以自动的帮我部署到自己的服务器上去,只需提交代码即可。

基本概念

GitHub Actions 相关术语:

  1. runner:github 分配的用来执行 CI/CD 的构建服务器 (也可以自建 runner)
  2. workflow (工作流程):持续集成一次运行的过程,就是一个 workflow。
  3. job (任务):一个 workflow 由一个或多个 jobs 构成,含义是一次持续集成的运行,可以完成多个任务。
  4. step(步骤):每个 job 由多个 step 构成,一步步完成。
  5. action (动作):每个 step 可以依次执行一个或多个命令(action)。

静态页面发布至阿里云ECS

在 github 上进入个人仓库,找到 仓库Actions标签

你可以直接新建一个,也可以使用现成的,GitHub 做了一个官方市场,可以搜索到他人提交的 actions。

链接地址:github.com/marketplace…

此时会生成了一个文件 .github/workflows/main.yaml,将其内容修改如下:

name: Build And Deploy To Aliyun ECS

on:                               # 该 CI/CD 触发时的事件
  push:                           # 只要push代码 就触发流程,更多触发事件请参考官方文档
    branches: [ main ]
  pull_request:
    branches: [ main ]     

jobs:                             # 需要执行的任务,可以有多个任务,所有的 job 都是并行的,但往往会有依赖关系
  build:
    runs-on: ubuntu-latest        # github分配的运行平台,2-core CPU/7 GB of RAM memory/14 GB of SSD disk space
    steps:                        # 某个任务的一系列步骤,如前端需要安装依赖,编译打包代码等等
    - uses: actions/checkout@v2          #选择一个 现有的action,执行你的操作
      with:
        persist-credentials: false
        ref: main
        submodules: true
    - name: Deploy to aliyun server        # 为 step 指定一个名称,将会在 github action 的控制台中显示
      uses: easingthemes/ssh-deploy@v2.1.5      #可以访问的仓库,实现的上传服务器步骤被封装在此action
      env:
        SSH_PRIVATE_KEY: ${{ secrets.SERVER_SSH_KEY }}  #这个是阿里云的私钥
        ARGS: "-avzr --delete"
        SOURCE: "./"
        REMOTE_HOST: ${{ secrets.REMOTE_HOST }}    #阿里云的 ip
        REMOTE_USER: ${{ secrets.REMOTE_USER }}    #阿里云用户
        TARGET: "/opt/webwiki/docs"       #被部署的服务器路径 

这里的 secret 就是一种 context,描述 CI/CD 一个 workflow 中的上下文信息,使用 ${{ expression }} 语法表示。除了 secret,还有

  • github: workflow 的信息,如 github.sha 可以获取当前的 commit SHA,我们可以利用它为 sentry 或者 docker image 打入版本号
  • env: 环境变量
  • job: 当前执行 job 的信息,如 job.status 表示当前 job 的执行状态
  • matrix: 描述一些构建信息,如 node 以及 os 版本号

更多 context 信息可参考官方文档

设置secret内容

在项目Settings设置中新增服务器配置,名称可以自定义,和main.yaml内的保持一致即可。

运行发布

运行之后右侧显示运行结果:

以后每一次的提交都会执行,可在Actions主页查看所有执行的workflow:

阿里云ECS的SERVER_SSH_KEY生成

通过Xshell登录进服务器,执行ssh-keygen命令:

之后查看密钥文件:

为了安全方便,可将该文件保存,复制里面内容粘贴至github内。