00:00:00
CNB云端构建
环境准备
- git 环境
- 云服务器
- teek 网站环境
创建组织
前往CNB网站,点击右上角登录,登录后点击右上角头像,选择“创建组织”。
或者加入 W3C 组织,也是本人加入的组织。欢迎加入联盟:https://cnb.cool/invitations/3QQ0173bdBHzyn5bZQv5iyyAtDB
创建仓库
点击访问,然后点击右上角的+号创建仓库,选择仓库归属
和仓库名称
;公开信息选择私有
,然后点击创建
。
创建令牌
初始化之前先去创建访问令牌,点击前往创建访问令牌,右上角点击添加访问令牌
,输入令牌名称
,到期时间选择永久
,使用范围选择仓库/制品库
,然后点击创建
。
警告
一定要记录好刚才生成的密钥,后续需用到!
初始仓库
提示
本次按 方式 3:空仓初始化 来初始化自己的本地仓库
bash
git init .
git remote add origin https://cnb.cool/W3C/Hyde/teek-hyde.git
git config --local user.name SeasirHyde
git config --local user.email "2429016980@qq.com" # 请修改为你的邮箱
git config credential.helper store # 保存凭证(凭证会被保存在 ~/.git-credentials 文件中)
推送仓库
由于本地仓库有暂存的更改,需要本地仓库所有的代码推送到 cnb 远程仓库,下面是详细步骤:
- 提交暂存的更改到本地仓库
bash
# 提交暂存的更改,-m 后面是提交说明(必填)
git commit -m "描述你的更改内容,例如:修复登录bug,优化首页样式"
- 推送本地分支到远程仓库 如果是第一次推送该分支(比如 master 或 main),需要关联远程分支并推送:
bash
# 推送本地当前分支到远程origin仓库,并建立关联
git push -u origin main
如果你用的是 master 分支:git push -u origin master
如果你用的是 main 分支:git push -u origin main
警告
- 首次推送需输入用户名/密码,
用户名(Username)和密码(Token)就是您创建的令牌
,后续会自动保存在 ~/.git-credentials。
-仅推荐在 安全环境 下使用(若为公共电脑,建议用 cache 临时存储)。
令牌示例:
bash
令牌名:teek
Git Username:cnb
Token:xxxxxxxxx
- 后续推送(已关联分支)
当分支已经和远程关联后,后续推送只需执行:
bash
git push
配置文件
以上代码推送到仓库后,在本地仓库根目录下,创建并编辑如下 2 个文件:
yml
# .cnb.yml
$:
# vscode 事件:专供页面中启动远程开发用
vscode:
- runner:
# 自定义CPU核心数,最大支持64核
cpus: 64
docker:
# 自定义开发环境
build:
# 指定构建镜像的 Dockerfile 文件
dockerfile: .ide/Dockerfile
services:
# 声明使用 vscode 服务
- vscode
# 声明在容器中支持 docker 命令
- docker
stages:
- name: 环境启动时执行以下命令
script:
# 安装pnpm并使用pnpm安装依赖
- npm install -g pnpm
- pnpm i
- pnpm docs:dev
# 云原生构建流程和自动部署
# main改成您实际的分支名称
main:
push:
- runner:
cpus: 16
services:
- docker
- git-clone-yyds
- imports: https://cnb.cool/W3C/Hyde/secret/-/blob/main/env.yml
settings:
user: ${SSH_USER} # SSH用户名(从环境变量获取,避免硬编码敏感信息)
key: ${SSH_KEY} # SSH私钥(用于免密登录目标服务器,从环境变量获取)
port: 22 # SSH端口(默认22)
hosts:
- 666.666.666.666 # (可选)目标服务器IP(要部署到的服务器地址,实际替换自己的服务器IP)
source: docs/.vitepress/dist/ # 待同步的本地文件目录(阶段3构建出的静态文件
target: /root/rsync/teek.seasir.top/dist/ # 目标服务器上的存放路径
delete: true # 同步时删除目标路径中不存在的文件(确保目标与本地完全一致,避免冗余文件)
docker:
image: docker.cnb.cool/znb/images/node:18
volumes:
- /data/.cache:copy-on-write #声明式的构建缓存
stages:
- name: 构建当前项目
script: echo -n $(date "+%Y-%m-%d %H:%M")
exports:
info: CUSTOM_ENV_DATE_INFO
- name: 🏠 设置淘宝源
script: |
npm config set registry https://registry.npmmirror.com
- name: 🖨️ 打印环境
if: |
[ "$CNB_COMMIT_MESSAGE_TITLE" = "BUILD" ]
script: |
npm install -g pnpm && node -v && npm -v && yarn -v && pnpm -v
- name: 💡 安装依赖
if: |
[ "$CNB_COMMIT_MESSAGE_TITLE" = "BUILD" ]
script: |
pnpm install
- name: 📦️ 编译项目
if: |
[ "$CNB_COMMIT_MESSAGE_TITLE" = "BUILD" ]
script: |
pnpm docs:build # VitePress 专用命令
- name: 🚚 部署到Pages
if: |
[ "$CNB_COMMIT_MESSAGE_TITLE" = "BUILD" ]
image: node:22
script: npx edgeone pages deploy ./docs/.vitepress/dist --name teek-hyde --token $EDGEONE_PAGES_API_TOKEN
#./docs/.vitepress/dist---静态打包路径,实际替换为自己的
#teek-hyde为edgeone的pages名称,实际替换为自己的
#同步仓库到gitee
- name: sync to gitee
image: tencentcom/git-sync
settings:
branch: master
auth_type: https
username: ${GIT_USERNAME}
password: ${GIT_ACCESS_TOKEN}
target_url: https://gitee.com/SeasirHyde/teek-hyde.git
# git_email: 'github-actions[bot]@users.noreply.github.com'
# 发布通知到钉钉
- name: 📢 发布通知到钉钉
image: tencentcom/dingtalk-bot-msg:latest
settings:
secret: $SECRET # 添加钉钉机器人的签名密钥
webhook: $WEBHOOK # 填写钉钉机器人的Webhook地址变量
at: "199********" # 多个用分号(;)分隔
isAtAll: true
debug: true # 新增: 是否启用调试模式
c_type: "markdown" # 支持: text, markdown, link, actionCard, multiActionCard, feedCard
content: |
> **🎉 Hyde Blog 又一次发布成功啦!**
> **构建时间:** $CUSTOM_ENV_DATE_INFO
> **构建id:** $CNB_BUILD_ID
> **提交id:** $CNB_COMMIT_SHORT
> **构建分支:** $CNB_BRANCH
> **提交信息:** $CNB_COMMIT_MESSAGE_TITLE
> **提交者:** $CNB_COMMITTER
> **仓库地址:** [$CNB_REPO_URL_HTTPS]($CNB_REPO_URL_HTTPS)
> **我的网站:** [teek.seasir.top](https://teek.seasir.top/)
yml
#在自己云服务器上生成ssh密钥,将私钥拷贝到env.yaml的SSH_KEY里。
#输入命令:
ssh-keygen
#运行后会出现一系列提示:
#密钥保存路径:默认是 /root/.ssh/id_rsa(私钥)和 /root/.ssh/id_rsa.pub(公钥),直接按回车使用默认路径即可。
#密码短语(passphrase):可选设置(推荐),相当于给私钥再加一层密码保护。如果直接回车则为空(无需额外密码)。
#输入命令:
cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys #将本地生成的公钥添加到服务器的 "授权列表" 中,允许持有对应私钥的客户端免密码登录。
#查看是否添加成功:
cat /root/.ssh/authorized_keys
# 查看SSH_KEY私钥内容:
cat /root/.ssh/id_rsa
#编辑env.yaml文件内容:
SSH_USER: root
SSH_KEY: |
-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEA1P55C7Hzn15bJlBeIkGuMkMSS2/JBQqe5iCuTGpPdvMSXMr+
# 省略,这里需要注意SSH密钥格式缩进问题,否则发布制品这个步骤会报错
2iRkQn/05IoX+MiDcmr1OjwSBXVD7+xR6hLjyiy7SmmEMkFPApw+
-----END RSA PRIVATE KEY-----
运行验证
- 以上编辑完成后,提交代码,第一次提交后,就可以看到已经触达流水线了:
bash
git add -A
git commit -m"更新cnb-cool配置,第一次构建测试"
git push