Skip to content
【腾讯云】WorkBuddy 全场景 AI 办公工作台,团队旗舰版低至198元/月
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中
【腾讯云】智能体开发平台ADP,新客首月专属价,最高直降 880 元,构建、分发、治理企业级 Agent,一站式开启智能体生产力。
广告位招租
在此投放您的广告内容
联系我

自动部署 ​

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-beijing

gitee.yml(可选),如果从 gitee 拉取项目,则需要配置 gitee 的用户名和个人令牌

yaml
# gitee的用户名和新建的个人令牌,用于将gitee上的代码同步过来,并构建到腾讯Cos上,作为静态网站,比如将vitepress构建成静态网站放在腾讯Cos上
# 组织名称/密钥仓库名称/-/blob/main/gitee.yml
# 以下两个值分别是gitee用户名,第一步新创建的私人令牌
# 用户名其实是点击你gitee头像-个人主页-然后看地址栏里https://gitee.com/这一串字符做为你gitee的用户名
GITEE_USER: 用户名
GITEE_TOKEN: gitee令牌

3. 创建【项目仓库】 ​

与【密钥仓库】不同,【项目仓库】是真正用于构建的仓库,比如 vitepress 博客站,与其它代码托管网站用法一样(比如 gitee)。

创建时 项目类型 选择【私有】或【公开】即可。

你的项目中需要创建 .cnb.yml 文件,内容如下

yaml
# ============================================================
# CNB 云原生构建配置文件 (.cnb.yml)
# 功能:推送代码到 main 分支时,自动构建 VitePress 网站并部署到腾讯云 COS
# 参考:https://docs.cnb.cool/zh/build/trigger-rule.html
# ============================================================

# 第一级键:分支名(这里表示只对 main 分支生效)
main:

  # 第二级键:触发事件(push = 代码推送时触发)
  push:

    # 第三级:pipeline 列表项(- 开头,表示该流水线任务的配置块)
    # imports / docker / stages 都必须是这个列表项里的子键,
    # 不能写成 main 的直接子键,否则 CNB 不会执行任何构建任务。
    - imports:
        # 从 KeyStore 仓库导入密钥/变量(COS 相关凭据)
        # 该文件需导出:COS_SECRET_ID、COS_SECRET_KEY、COS_BUCKET、COS_REGION
        - https://cnb.cool/abcdefghijklmn/KeyStore/-/blob/main/TencentCos.修改为你的文件名称.yml

      # 默认执行环境镜像(构建阶段使用的容器)
      docker:
        image: node:20

      # 构建与部署的各个阶段,按顺序串行执行
      stages:

        # 阶段 1:安装依赖
        - name: 安装依赖(pnpm)
          script:
            - corepack enable      # 启用 corepack,使 pnpm 可用(node:20 自带)
            - pnpm install         # 安装 package.json 中声明的依赖,命令根据你的项目类型来定,比如 vitepress 是 pnpm install

        # 阶段 2:构建 VitePress 静态站点,实际构建命令根据你的项目类型来定,比如 vitepress 是 pnpm run docs:build
        - name: 构建 VitePress
          script:
            - pnpm run docs:build  # 执行 vitepress build docs,产物在 docs/.vitepress/dist/

        # 阶段 3:同步到腾讯云 COS
        - name: 同步到腾讯云 COS
          image: tencentcom/coscli # 该阶段使用 coscli 专用镜像
          script:
            - |
              set -e   # 任一命令失败立即中止,避免静默失败

              # —— 变量校验:确保 KeyStore 已正确注入,缺失则明确报错 ——
              echo "== 调试变量 =="
              : "${COS_BUCKET:?COS_BUCKET 未注入,请检查 KeyStore 导出的变量名}"
              : "${COS_SECRET_ID:?COS_SECRET_ID 未注入}"
              : "${COS_SECRET_KEY:?COS_SECRET_KEY 未注入}"
              : "${COS_REGION:?COS_REGION 未注入}"
              echo "COS_BUCKET=$COS_BUCKET"
              echo "COS_REGION=$COS_REGION"

              # 确认构建产物目录存在,否则直接失败
              ls -la ./docs/.vitepress/dist/ || { echo "dist 目录不存在,构建可能未产出"; exit 1; }

              # 拼接 COS 访问域名:
              # 常规地域用 cos.<region>.myqcloud.com;
              # 若 COS_REGION 本身已是完整域名(以 myqcloud.com 结尾),则原样使用。
              EP="cos.$COS_REGION.myqcloud.com"
              [ "${COS_REGION##*.}" = "myqcloud.com" ] && EP="$COS_REGION"

              # 同步本地构建产物到 COS(--delete 表示删除 COS 中多余文件)
              coscli --init-skip sync -r ./docs/.vitepress/dist/ "cos://$COS_BUCKET" --delete -i "$COS_SECRET_ID" -k "$COS_SECRET_KEY" -e "$EP"

              # 列出 COS 根目录文件,便于确认上传结果
              echo "== 同步完成,COS 根目录文件 =="
              coscli ls "cos://$COS_BUCKET" -i "$COS_SECRET_ID" -k "$COS_SECRET_KEY" -e "$EP"

你的项目在推送到 main 分支时,会触发 CNB 的流水线,自动构建网站并部署到腾讯 COS 上

4. 在腾讯 COS 绑定域名和证书 ​

打开网站所属的存储桶,打开“域名与传输管理 ”,在“自定义源站域名”添加域名并绑定证书( Nginx 证书),需要在域名解析中配置“CNAME”记录。

绑定后需要等待一段时间才会生效,有延迟。

5. 工作流程回顾 ​

你 push 到 main 分支
   ↓
CNB 流水线任务触发
   ↓
pnpm install → pnpm run docs:build
   ↓
coscli sync → 腾讯云 COS
   ↓
浏览器访问网站,内容已更新
最近更新