# 使用 GitHub Actions 持续集成到静态资源托管

本篇主要讲解如何结合 GitHub Actions 和微信云托管 CLI,实现 GitHub 仓库推送时,触发 GitHub Actions 构建静态资源,并上传到静态文件托管。

GitHub Actions 是 GitHub 推出的持续集成服务,支持使用 yml 编排自动化任务。类似的,在 GitLab 中也有 GitLab Runner,Coding 中可以使用 Coding CI 实现类似的能力。

# 一、创建项目

本文将采用 11ty(eleventy) 构建一个最简单的静态网站,同样的,也可以使用 Next.js,Jekyll 等其他支持静态网站生成的框架来实现。

首先,我们创建项目:

# 需要系统中安装有 NodeJS >=12
mkdir wxcloud-static-demo
cd wxcloud-static-demo
npm init -y
# 安装 Eleventy
npm install --save-dev @11ty/eleventy
# 生成 README.md
echo '# Weixin Cloud Run Static Storage Demo' > README.md
# 生成 .gitignore
echo 'node_modules' > .gitignore

创建完成后,我们需要修改 package.json 文件,增加构建命令:

  "scripts": {
    "build": "npx @11ty/eleventy"
  },

此时我们仓库已经准备完成,到 GitHub 上新建一个仓库,填入需要的名字:

创建完成后,我们将仓库同步到 GitHub 上:

git init
git remote add origin <你的仓库地址>
git add .
git commit -m 'init'
git push -u origin main

此时,我们仓库同步完成后,即完成了前期的准备工作。

# 二、生成云托管 CLI 密钥并写入到 GitHub Secret

我们打开微信云托管的设置页面,进入 ”全局设置“,选择 “CLI 密钥 > 生成密钥”

生成的秘钥需妥善保存,不应以明文的形式出现在仓库流水线(.yml)文件中。如秘钥泄漏,应尽快在云托管控制台中将密钥删除。

生成后,我们复制 AppID 和对应的 CLI 密钥,进入 GitHub 仓库,选择 “Settings > Security > Secrets > Actions”,点击 “New Repository secret”

我们新建以下三个 Secret:

  • WXCLOUD_APPID:云托管环境所在的 AppID
  • WXCLOUD_CLI_SECRET:云托管 CLI 密钥
  • WXCLOUD_ENVID:云托管环境 ID

完成后,我们可以看到秘钥已经保存在 GitHub Secret 中。

# 三、创建 GitHub Actions 流水线并部署

我们需要新建一个 Actions。点击 ”Actions“,选择 ”New Workflow“

在新的页面中,我们选择 ”set up a workflow yourself“

此时,我们进入 main.yml 的编辑界面。将以下内容粘贴进去:

name: 'Deploy to Weixin Cloud Run Static'

# **What it does**: Build and deploy static site to Weixin Cloudrun.

on:
  workflow_dispatch:
  push:
    branches:
      - main # 监听的分支,可以根据自己项目情况修改
  pull_request:

permissions:
  contents: read
  # Needed for the 'trilom/file-changes-action' action
  pull-requests: read

# This allows a subsequently queued workflow run to interrupt previous runs
concurrency:
  group: '${{ github.workflow }} @ ${{ github.event.pull_request.head.label || github.head_ref || github.ref }}'
  cancel-in-progress: true

jobs:
  deploy-to-static:
    env: # Or as an environment variable
      WXCLOUD_APPID: ${{ secrets.WXCLOUD_APPID }}
      WXCLOUD_CLI_SECRET: ${{ secrets.WXCLOUD_CLI_SECRET }}
      WXCLOUD_ENVID: ${{ secrets.WXCLOUD_ENVID }}
    runs-on: ${{ fromJSON('["ubuntu-latest", "self-hosted"]')[github.repository == 'github/docs-internal'] }}
    steps:
      - name: Checkout
        uses: actions/checkout@v3

      - name: Setup node
        uses: actions/setup-node@v3
        with:
          node-version: 16.13.x
          cache: npm

      - name: Install
        run: npm ci
      
      - name: Install @wxcloud/cli
        run: npm i -g @wxcloud/cli
      
      - name: Login @wxcloud/cli
        run: wxcloud login --appId "$WXCLOUD_APPID" --privateKey "$WXCLOUD_CLI_SECRET"
        
      - name: Build Static Files
        run: npm run build # 构建命令,可以根据项目实际情况修改
      
      - name: Deploy to Static Site
        run: wxcloud storage:upload _site --envId="$WXCLOUD_ENVID" --remotePath=/ --mode=staticstorage # 上传生成的 _site 文件夹到静态托管的 / 目录下,可以根据项目实际情况修改

点击 “Start commit” 保存文件,即可自动触发 Actions。我们点击 “Actions” 进入刚才触发的一次执行,如果一切配置正常,执行成功后可以查看对应的日志。

点击 Workflow runs,可以查看每一步的执行日志情况。

# 四、查看部署效果,管理部署后的静态文件

我们可以在云托管控制台中选择“拓展功能 > 静态资源存储 > 文件管理”,看到刚才部署的文件:

访问时,只需要使用静态托管域名,即可打开:

https://<你的静态域名>/README/index.html

我们可以修改上述的 yaml 文件,实现更多的自动化操作,具体方法可以参考 GitHub Actions 的相关文档。

同理,我们也可以通过 @wxcloud/cli 实现更多的自动化部署,比如上传对象存储、新建云托管版本等。

# 五、总结

以上是我们通过 GitHub Actions 结合微信云托管最佳实践,完成自动化推送部署静态托管的教程。

更多文档可参考: