AI正在绞尽脑汁想思路ING···
AI摘要
HunYuan-Lite

CNB远程部署和EdgeOne Pages

​ 由于我目前已经把我的博客项目从GitHub迁移到腾讯云的CNB上了,并且最近也是在一直倒腾这个CNB。写这篇文章的主要目的是,去解决一些重复性的工作。在这之前我的站点,主要是依靠Hexo提供的hexo-deployer-git这个插件去部署的静态页面。既需要部署更新后的页面。又需要提交新的代码到GitHub,觉得有些繁琐,后面我看了青萍老哥写的一些devops的文章,就在想可以把页面打包成docker镜像,但是我发现我得自己去搭建持续集成和部署的那些平台。耗费服务器资源不说(没那么大的服务器),还费时费力。后来看到Liushen写了一篇『1Panel自动同步Github仓库』 的文章,我也尝试去操作了,但是我的工作流提示成功,静态产物也上传到CNB仓库了,不知道什么原因没同步到服务去上去。所以我索性把博客项目直接迁移到CNB上了。这样直接上传代码到CNB工作流自动部署。

​ 下面就介绍用cnb代码仓库+hexo+rsync远程部署项目,由hexo,hugo等框架生成的静态站点均可这样部署。

CNB远程部署站点

一、密钥仓库

CNB创建代码仓库,上传博客代码,这里省略。注意:博客项目配置文件需要一并上传,博客代码仓库私有化。

​ 密钥仓库是 云原生构建 提供的安全型代码仓库,专为存储敏感信息(如密码、API密钥、证书等)设计。 通过严格的访问控制、页面水印、审计追踪等机制,实现敏感数据的安全存储与合规使用。

1、创建密钥仓库

创建链接地址:https://cnb.cool/new/repos 。公开性选择:密钥仓库即可。如下:

image-20250824142837146

创建完仓库后,在仓库中新建env.yml。文件名称自拟,但时语法必须是yml或者是json。

密钥仓库还有按需使用,限定流水线引用等详细教程说明看这里:https://docs.cnb.cool/zh/repo/secret.html

2、配置ssh免密登录

在远程服务器创建ssh密钥。

1
ssh-keygen -t rsa  #后面一直回车即可

将公钥 id_rsa.pub 文件的内容添加到远程机器的 ~/.ssh/authorized_keys 文件中或者执行以下命令

1
ssh-copy-id -p 22 root@服务器ip

3、配置密钥仓库

复制私钥到密钥仓库的env.yml文件中,

1
cat /root/.ssh/id_rsa

~/.ssh/目录下的id_rsa文件内容复制到env.yml。格式如下

1
2
3
4
5
# env.yml
RSYNC_KEY: |
id_rsa的内容

RSYNC_USER: root

二、rsync插件使用

​ CNB还提供了还很多插件,包括之前讲到的知识库插件,还有webhook,微信\QQ小程序构建、CNB自动部署Edgeone Pages、Helm单元测试等等。更多的插件内容和用法看这里https://docs.cnb.cool/zh/plugins.html

在博客代码仓库中添加流水线.cnb.yml内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
master:  #master分支,写分支名就行了
push: #push操作后触发流水线
- docker:
image: node:20 #镜像版本
volumes:
- /root/.npm:cow
stages:
- name: yarn install
script: yarn install
- name: build
script: yarn build
- name: rsync 上传到服务器
image: tencentcom/rsync
#引用密钥仓库配置文件,导入环境变量:https://docs.cnb.cool/build/env.html#dao-ru-huan-jing-bian-liang
imports: https://cnb.cool/***/-/blob/main/envs.yml
settings:
user: $RSYNC_USER #密钥仓库中的值通过$符号引用。
key: $RSYNC_KEY
port: 22
hosts:
- 服务器IP
- 服务器IP
#相对路径末尾带斜线表示同步文件夹里面的内容。不带斜线表示通过这个目录
source: ./public/*
target: /root/hexo/
script:
- echo "after script" #该操作是指文件同步完成后的操作,当然若是还有后续操做,可以继续添加 -name script 再去指定相关命令。
- ls /root/hexo

上面的配置文件只需要修改以下内容:

1、imports:引用密钥仓库配置文件,修改成你的密码仓库路径即可 例如 https://cnb.cool/hudi22/hudikey/-/blob/main/env.yml

2、hosts:服务器的IP列表 注意:远程主机中需要已安装 rsync

3、source:表示你的博客项目静态构建产物的目录 例如 ./dist

4、target:需要部署到服务的哪个目录下 例如 /root/hexo

完成上述并提交修改后,就会自动触发构建静态产物并同步到远程服务器的相应目录中了。🎉🎉🎉

CNB部署到EdgeOne Pages

​ 最简单的就是再EdgeOne Pages控制台界面去关联CNB仓库,但是也可以通过CNB的流水线去部署产物到Pages。下面就通过CNB的流水线去部署。

前提:已有 EdgeOne 账号并创建了 Pages 项目, 注意这个项目必须是 直接上传 类型。(有点鸡肋既然都要登录EdgeOne Pages创建项目,为什么不直接关联仓库🤣)。API Token不能直接创建项目吗?

1、在Pages创建一个直接上传类型的项目。上传一个空文件夹就行,它会自动部署,如下 项目名字:自定义即可。

image-20250824155457707

2、创建API Token,并添加到cnb的密钥仓库中。

image-20250824155755511

密钥仓库信息如下:

1
EDGEONE_API_TOKEN: sn8dgNgl**********n4Gy7Cs=

3、创建.cnb.yml流水线。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 触发器:推送到main分支
main:
push:
# 从私有仓库导入环境变量:
- imports: https://cnb.cool/***/-/blob/main/envs.yml
stages:
# 构建当前项目
- name: Build Current Project
image: node:20
script: node -v && npm install && npm run build
# 将构建输出部署到 EdgeOne Pages
- name: Deploy to EdgeOne Pages
image: node:20
script: npx edgeone pages deploy <outputDirectory> -n <projectName> -t $EDGEONE_API_TOKEN

: 项目构建后产物所在的文件夹(必填) 例如我的是 ./public

-n, –name: 需要部署的项目名称 ,例如 blogc根据第一步创建的为准。项目必须存在,他官方说的没有会自动创建,但是我试过了没有创建时会出错,应该是个api的bug还没有修复,要不然就是文档给错了。

构建完成后,就会把构建产物部署到EdgeOne Pages上了。进去控制台通过临时域名就能访问。

cnb的部署EdgeOne Pages插件还提供了预发以及生产两个环境部署方法有需要的可以看一下这里:https://docs.cnb.cool/zh/plugin/#public/tencentcom/deploy-eopages

​ 其实很早就在看EdgeOne Pages,因为我想部署一些由前端编写的工具。但是我前段时间使用流水线去部署到Pages的时候,一直提示获取项目ID错误,如下图。但是官方给出的说是没有项目会自动创建项目,手动创建以后就不会报这个错误❌了。

image-20250824170339443

多条流水线

​ 有的时候时候,我们会需要一次提交代码做好几个任务,比如修改完源码提交仓库以后,需要把当前的项目构建的产物部署到Edgo Pages上。并且帮我打包成一个docker镜像。这时候我们可以使用多流水线去完成这个操作。更多关于流水线的内容看这里: https://docs.cnb.cool/zh/build/grammar.html

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
main:
push:
- services:
- docker #声明后,流水线内可以直接使用docker命令
stages:
- name: set docker tag
script: echo -n "${CNB_DOCKER_REGISTRY}/${CNB_REPO_SLUG_LOWERCASE}:latest"
exports:
info: IMAGE_TAG
- name: docker build
script: docker build -t $IMAGE_TAG .
- name: push image
script: docker push $IMAGE_TAG
- imports: https://cnb.cool/***/-/blob/main/envs.yml
stages:
# 构建当前项目
- name: Build Current Project
image: node:20
script: node -v && npm install && npm run build
# 将构建输出部署到 EdgeOne Pages
- name: Deploy to EdgeOne Pages
image: node:20
script: npx edgeone pages deploy ./public -n blogc -t $EDGEONE_API_TOKEN

构建信息如下:可以看到pipeline-1和pipeline-2两条流水线。一条流水线是将产物打包成docker镜像,一条流水线将产物发布到EdgeOne Pages上。

image-20250824165706896

总结

​ 比起GitHub国内限制,CNB确实要快的多,又有免费的云开发环境。免费的制品库,最近还免费白嫖到了EdgeOne的CDN加速,还有Pages可以用,那既然要白嫖,那就贯彻到底咯🤣。尤其是CNB和EdgeOne才起步难免还会有很多问题。但是我还是坚信,他能够做的更好。

​ 再哔哔一下,CNB有一个云原生桌面项目,我fork了一个看这里:https://cnb.cool/hudi22/Desktop 。就是直接在浏览器使用Debian桌面版开发环境。有兴趣的朋友可以看看。但是注意免费额度🤣。