本文介绍阿猪尝试使用腾讯云CNB构建Hexo项目并部署到腾讯云COS的过程。

一、场景概述

  阿猪的博客基于Hexo框架,部署流程如下:

1、在本地使用Vscode编辑文章
2、将本地Hexo项目推送到腾讯云CODING DevOps的仓库中
3、使用CODING DevOps的CI/CD功能自动构建项目,并将产物部署到腾讯云COS存储桶
4、使用腾讯云CDN提供加速服务,将COS存储桶设为CDN的源站。

  可惜腾讯云去年9月将CODING DevOps下线了,再加上阿猪去年较忙,一直没有花精力去研究替代方案,导致博客断更了大半年。

  最近闲下来些,阿猪重新研究了替代方案,并写此文作以总结和分享。

二、操作流程

  鉴于“能用就行”的偷懒原则,阿猪决定继续沿用先前的部署方案,仅使用其他代码仓和构建主机来替代原先的CODING DevOps。阿猪无脑选择了CODING DevOps官网推荐的替代方案:腾讯云CNB(Cloud Native Build,云原生构建)。

1、准备工作

(1)一个用作CDN源站的腾讯云COS存储桶。

  管理路径为 腾讯云控制台 -> 对象存储 -> 存储桶列表。

(2)一个有权限访问COS存储桶的SecretId和SecretKey。

  管理路径为 腾讯云控制台 -> 访问管理 -> 访问密钥 -> API密钥管理。

(3)已经在CNB中创建了一个组织,用于创建和管理仓库。

(4)一个用于存储Hexo项目源代码的空白CNB仓库(公开或私有均可)。

  管理路径为 组织的首页 -> 右上角“+” - “创建仓库”。

(5)一个有权限访问CNB中Hexo项目仓库的Git客户端凭据。

  管理路径为 组织的首页 -> 右上角头像 -> 个人设置 -> 访问令牌。

2、创建环境变量文件

  CNB不能像CODING DevOps那样直接在仓库的设置中管理环境变量,需要先将环境变量写入另一个仓库中,然后再在CI/CD配置文件中引用。

  登录CNB后进入组织的首页,依次点击页面右上角的“+” -> “创建仓库”。

  进入“创建仓库”页面,填写仓库名称、公开性选择“密钥仓库”。

  在这个新建的密钥仓库中创建一个yml文件,文件名随意,内容如下:

1
2
3
4
5
6
7
8
# 腾讯云 SecretId
COS_SECRET_ID: <你的腾讯云SecretId>
# 腾讯云 SecretKey
COS_SECRET_KEY: <你的腾讯云SecretKey>
# 腾讯云 COS 存储桶名称
COS_BUCKET: <你腾讯云COS存储桶的名称,例如”bucket-hexo-xxxx“>
# 腾讯云 COS 存储桶地域
COS_REGION: <你腾讯云COS存储桶的地域,例如”ap-shanghai“>

3、将本地Hexo项目推送到CNB仓库

(1)在本地添加远程仓库

  仓库地址的格式为https://cnb.cool/<组织名称>/<仓库名称,不带.git>

(2)将本地Hexo项目PUSH到CNB仓库

  不要Fetch,直接PUSH即可,以免产生冲突。注意本地与远程的分支名称保持一致。

4、配置CNB CI/CD

  此处是本文的核心,本文的其他内容都只是出于行文完整而捎带的。

  在本地Hexo项目的根目录中创建一个.cnb.yml文件(文件名不可自定义),内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
main:
# 阿猪 https://yfzhu.cn/
push:
- docker:
image: node:20
volumes:
- /root/.npm:cow
stages:
- name: 构建
script:
- npm install
- npm run build
- name: coscli 上传文件
image: tencentcom/coscli
# 存放环境变量的yml文件的完整URL,例如 https://cnb.cool/<组织名称>/<密钥仓库名称>/-/blob/main/token.yml
imports: <yml文件的完整URL>
commands: |
coscli config set --secret_id $COS_SECRET_ID --secret_key $COS_SECRET_KEY
coscli config add --init-skip=true -b $COS_BUCKET -r $COS_REGION
coscli cp ./public cos://$COS_BUCKET -r

  此后每当本地Hexo项目向远程仓库推送更新时,都会触发CNB的云原生构建服务,自动构建Hexo项目并将构建产物部署到腾讯云COS存储桶。

  如果没有自动触发CNB的云原生构建服务,请检查仓库设置中是否勾选了”允许自动触发“选项。