主题
拉取gitee仓库部署
1. 创建腾讯 COS 存储桶
COS 桶:公有读私有写 + 开静态网站托管
腾讯云子账号密钥:SecretId / SecretKey
COS 存储桶名称和区域:Bucket / Region
记住 SecretId / SecretKey/Bucket / Region 这4个值,后续步骤要用
2. 创建【密钥仓库】
首先在腾讯 CNB 上创建一个【密钥仓库】 
【密钥仓库】包含以下基本文件
- .cnb.yml 文件,作用是“授权”,标记本仓库里的文件允许哪些其它仓库可以引用
- TencentCos.xxxxx.yml 文件是针对其它仓库构建是的 COS 配置文件,一般是每个仓库有一个对应的文件,xxxxx 可以是对应仓库的名称,方便在对应仓库的 .cnb.yml 文件中引用
- gitee.yml 的作用是拉取gitee仓库的项目部署到腾讯 COS 上,参考项目 abcdefghijklmn/mywebsite-vitepress-deploy中.cnb.yml 的配置
.cnb.yml 文件内容,主要用于授权
yaml
# KeyStore 仓库里的 .cnb.yml 不会被“引用”,它是“授权文件”,不是“配置数据源”。
# 真正被 imports 引用的是 KeyStore 里的 TencentCos.xxx.yml 这类配置文件。
# .cnb.yml 只在 KeyStore 仓库自身被 CNB 加载时生效,用来告诉 CNB:“允许谁来 imports 我”。
allow_slugs:
# 你的组织名称/部署仓名称,allow_slugs 限制只有你的部署仓能引用这个文件,别的仓引不到,没有这行,部署仓的流水线没有权限读取密钥仓,就会报「资源解析服务请求失败」
# vitepress博客站,源代码在gitee上,这个业务库是通过定时拉取gitee上的库来构建网站
- "abcdefghijklmn/mywebsite-vitepress-deploy"
# mywebsite-vitepress,源代码在CNB上,直接检测有新的推送时自动构建
- "abcdefghijklmn/mywebsite-vitepress"TencentCos.xxxxx.yml 文件内容,主要用于配置 COS
yaml
# 组织名称/KeyStor仓库/-/blob/main/TencentCos.xxxxx.yml
# 以下4个值分别是:你的腾讯云SecretId(建议使用子账号的),你的腾讯云SecretKey(建议使用子账号的),腾讯COS桶名,腾讯COS存储桶所属区域
COS_SECRET_ID: 你的腾讯云SecretId
COS_SECRET_KEY: 你的腾讯云SecretKey
COS_BUCKET: 腾讯COS桶名
COS_REGION: 腾讯COS存储桶所属区域,比如ap-beijinggitee.yml(必选),本节是讨论如何从 gitee 拉取项目,这个文件是必须的
yaml
# gitee的用户名和新建的个人令牌,用于将gitee上的代码同步过来,并构建到腾讯Cos上,作为静态网站,比如将vitepress构建成静态网站放在腾讯Cos上
# 组织名称/密钥仓库名称/-/blob/main/gitee.yml
# 以下两个值分别是gitee用户名,第一步新创建的私人令牌
# 用户名其实是点击你gitee头像-个人主页-然后看地址栏里https://gitee.com/这一串字符做为你gitee的用户名
GITEE_USER: 用户名
GITEE_TOKEN: gitee令牌3. 创建【项目仓库】
与【密钥仓库】不同,【项目仓库】是用于拉取【gitee仓库】,比如 vitepress 博客站,与其它代码托管网站用法一样(比如 gitee)。
创建时 项目类型 选择【私有】或【公开】即可。
本节是讨论如何从【gitee仓库】拉取代码,构建网站,并部署到腾讯COS上
所以本项目只需要创建 .cnb.yml 文件,不需要有其它真实的项目文件,内容如下:
yaml
# ============================================================
# CNB 云原生构建配置文件 (.cnb.yml)
# 功能:定时从 Gitee 私有仓库拉取源码,构建 VitePress 并部署到腾讯云 COS
# 参考:https://docs.cnb.cool/zh/build/trigger-rule.html
# ============================================================
# 第一级键:分支名(对 main 分支生效)
main:
# 第二级键:触发事件为定时任务(crontab)
# 以下为可选频率示例(保留注释,按需启用其一):
# 每 10 分钟拉取构建一次
# "crontab: */10 * * * *":
# 每 2 小时拉取构建一次
# "crontab: 0 */2 * * *":
# 每天 8 点拉取构建一次(当前启用)
"crontab: 0 8 * * *":
# 第三级:pipeline 列表项(- 开头,该流水线任务的配置块)
# imports / docker / stages 都必须是这个列表项里的子键
- imports:
# 从 KeyStore 仓库导入密钥/变量
# gitee.yml —— 导出 GITEE_USER、GITEE_TOKEN(用于克隆 Gitee 私有仓库)
# TencentCos.mywebsite-vitepress-deploy.yml —— 导出 COS 相关凭据
# (COS_SECRET_ID、COS_SECRET_KEY、COS_BUCKET、COS_REGION)
- https://cnb.cool/abcdefghijklmn/KeyStore/-/blob/main/gitee.yml
- https://cnb.cool/abcdefghijklmn/KeyStore/-/blob/main/TencentCos.修改为你的文件名称.yml
# 默认执行环境镜像(构建阶段使用的容器)
docker:
image: node:20
# 各阶段按顺序串行执行
stages:
# 阶段 1:拉取 Gitee 私有仓库
- name: 拉取 Gitee 私有仓库(master 分支)
script:
# 清空当前工作区(删除除 . 外的所有顶层文件/目录),避免旧文件残留
- find . -mindepth 1 -maxdepth 1 -exec rm -rf {} +
# 克隆 Gitee 私有仓库 master 分支到当前目录(.)
# 使用 KeyStore 注入的 GITEE_USER / GITEE_TOKEN 进行鉴权
# --depth=1 表示浅克隆(只取最新提交,加快构建)
- git clone --depth=1 -b master https://${GITEE_USER}:${GITEE_TOKEN}@gitee.com/abcdefghijklmnopqrstuvwxyz/仓库名称.git .
# 阶段 2:安装依赖
- name: 安装依赖(pnpm)
script:
- corepack enable # 启用 corepack,使 pnpm 可用(node:20 自带)
- pnpm install # 安装依赖
# 阶段 3:构建 VitePress 静态站点
- name: 构建 VitePress
script:
- pnpm run docs:build # 产物在 docs/.vitepress/dist/
# 阶段 4:同步到腾讯云 COS
- name: 同步到腾讯云 COS
image: tencentcom/coscli # 该阶段使用 coscli 专用镜像
script:
# 拼接 COS 访问域名:
# 常规地域用 cos.<region>.myqcloud.com;
# 若 COS_REGION 本身已是完整域名(以 myqcloud.com 结尾),则原样使用。
- EP="cos.$COS_REGION.myqcloud.com"; [ "${COS_REGION##*.}" = "myqcloud.com" ] && EP="$COS_REGION"; coscli --init-skip sync -r ./docs/.vitepress/dist/ cos://$COS_BUCKET --delete -i "$COS_SECRET_ID" -k "$COS_SECRET_KEY" -e "$EP"
# 说明:--delete 会删除 COS 中本地已不存在的多余文件,保持两边一致你的项目在推送到【gitee仓库】时,会触发CNB的流水线,自动拉取【gitee仓库】,自动构建网站并部署到腾讯 COS 上
4. 在腾讯 COS 绑定域名和证书
打开网站所属的存储桶,打开“域名与传输管理 ”,在“自定义源站域名”添加域名并绑定证书( Nginx 证书),需要在域名解析中配置“CNAME”记录。
绑定后需要等待一段时间才会生效,有延迟。
5. 工作流程回顾
你 push 到 Gitee
↓(根据需求配置定时间隔)
CNB 定时任务触发
↓
git clone Gitee 私有仓
↓
pnpm install → pnpm run docs:build
↓
coscli sync → 腾讯云 COS
↓
浏览器访问网站,内容已更新

