Hexo从Coding迁移到CNB并配置云原生构建
由于腾讯云的CODING DevOps系列产品即将下线,详情见封面;所以原本托管到coding上的博客静态文件代码库需要另寻他路,尝试使用公告中推荐的云原生构建,此篇博客记录下迁移配置的全过程,同样,如果你的hexo博客只托管在github,国内没有托管到其他平台,想要尝试在CNB上托管加快国内访问速度,这篇博客同样会对你有所帮助。
一、在CNB上托管你的hexo静态文件代码库
这里将介绍两种情况,方便你把代码弄到CNB的代码仓库
I、从Coding/Github等的代码仓库迁移到CNB代码仓库
如果你看过我之前的博客Hexo双线部署到Coding和Github(最新版),在github,coding上托管过博客静态文件代码,那么这个方式很适合你
- 首先你需要扫码登录CNB,并创建一个组织
- 然后参考迁移工具文档,使用CNB Code Import来迁移你的代码库,工具中的引导文档已经写得很详细了,这里就不再赘述了。
II、在CNB上新建代码仓库
二、配置token通过hexo初始化&推送你本地代码仓库
有了代码仓库需要配置使得可以在本地推送代码到CNB。 注意:CNB暂不支持上传本地公钥的方式进行ssh(后续可能也不会支持)
- 在访问令牌中新建一个token用来作为git拉取推送的凭据,常见场景选择Git客户端凭据,提交即可。注意:保存好弹窗生成的token,后续使用git拉取推送,用户名为cnb,密码就是此token
- 修改博客根目录下配置:打开
Blog\_config.yml
文件,在github推送配置下面加上CNB代码仓库推送设置hexo的one-command-deployment支持使用token的方式进行配置推送部署1
2
3
4
5
6
7
8
9
10deploy:
- type: git
repo:
github: https://github.com/ds6666/ds6666.github.io.git
branch: master
- type: git
repo:
cnb: https://cnb.cool/ds6666.fun/blog/ds6666.git # CNB的仓库地址
branch: master
token: # 上面新生成的token
CNB的仓库地址可以在你新建的仓库下点击克隆复制
- 按顺序执行下述hexo命令来测试推送部署,或者初始化代码仓库由于国内访问github问题,没有梯子手段建议先将github的推送配置注掉,这里着重测试推送CNB是否成功
1
2
3hexo clean
hexo g
hexo d
中间会弹窗提示输入用户名密码,用户名是cnb,密码是上面生成的token
三、配置云原生构建自动更新腾讯云存储桶文件
在Hexo双线部署到Coding和Github(最新版)中第二步里提到可以通过在coding的项目中的持续集成添加jenkins pipeline来自动更新腾讯云cos存储桶;具体配置见腾讯云官方文档COS 自建静态网站,在CNB中这一流程需要配置云原生构建即.cnb.yml
来实现
- 在CNB仓库底部找到云原生构建,编辑,填写如下内容;进行测试coscmd命令是否正确可用,参考腾讯云 COS 命令行工具CNB插件
1
2
3
4
5
6
7
8
9master:
push:
- stages:
- name: run with tencentyun-coscmd
image: tencentcom/tencentyun-coscmd
commands: |
coscmd --version
coscmd -h
ls - 点击提交到master分支后立即生效,且本次修改也会触发该构建,可在仓库云原生构建中查看构建记录,点击记录可查看详细日志
- 新建密钥类型仓库存储私密环境变量,参照官方文档环境变量,可通过imports导入组织下其他仓库的yml文件中设置的环境变量;
- 然后再新建的密钥仓库下新建yml文件,用于存储环境变量,这里需要存储的就是上面COS 自建静态网站文档中提到的四个变量。
其中访问密钥 ID 与 KEY 填写上文中在「腾讯云控制台」->「访问管理」->「访问密钥」 中获取的参数。1
2
3
4
5
6
7
8#腾讯云访问密钥 ID
COS_SECRET_ID:
#腾讯云访问密钥 KEY
COS_SECRET_KEY:
#腾讯云对象存储桶
COS_BUCKET_NAME:
#腾讯云对象存储区域
COS_BUCKET_REGION: - 在
博客根目录下Blog\themes\yilia\source
,添加.cnb.yml
后经尝试发现hexo g
生成文件时无法处理source文件夹下以.
或_
开头的文件,且yml
类型文件会自动处理为json格式
可以在Blog
根目录(与_config.yml
同级)下添加js脚本来将.cnb.yml
复制进hexo g
生成的public
目录下,具体操作如下
5-1. 在Blog
根目录下运行以下命令安装fs-extra
模块5-2. 在1
npm install fs-extra
Blog
根目录下新建scripts
文件夹(hexo g
生成文件时会自动运行scripts
下的js脚本文件),并在scripts
文件夹下新建copy-cnb.js
文件,内容如下5-3. 在1
2
3
4
5
6
7
8
9// scripts/copy-cnb.js
const fs = require('fs-extra');
const path = require('path');
hexo.extend.filter.register('after_generate', () => {
const fromDir = path.join(__dirname, '../.cnb.yml');
const toDir = path.join(hexo.public_dir, '.cnb.yml');
fs.copySync(fromDir, toDir);
});Blog
根目录下(与_config.yml
同级)新建.cnb.yml
云原生构建文件,因为此配置文件是存储在仓库根目录下,需要每次推送携带才会生效,内容如下(命令与coding中的pipeline的一致)其中的imports设置为上面你新建的密钥库中的yml环境变量配置文件链接(在仓库中打开此文件复制浏览器链接地址即可)1
2
3
4
5
6
7
8
9
10master:
push:
- imports: https://cnb.cool/ds6666.fun/blog/secret/-/blob/main/cos_envs.yml
- stages:
- name: update tencentyun-cos
image: tencentcom/tencentyun-coscmd
commands: |
coscmd config -a $env.COS_SECRET_ID -s $env.COS_SECRET_KEY -b $env.COS_BUCKET_NAME -r $env.COS_BUCKET_REGION
rm -rf .git
coscmd upload -r ./ /
5-4. 在Blog
根目录下执行hexo clean
,hexo g
生成新的public
文件夹,查看其中存在.cnb.yml
文件,即js脚本运行成功
5-5. 后又发现自动复制文件进public
文件夹后,hexo d
推送仍没有.cnb.yml
文件,需要手动把文件复制到Blog\.deploy_git
目录下,再次推送才会携带 - 确认配置好密钥仓库中yml里的各个环境变量值,然后通过
hexo d -g
推送本地代码测试,在代码仓库的云原生构建中查看日志,最后在腾讯云cos存储桶中查看相应文件是否更新。 - 最后参考Hexo双线部署到Coding和Github(最新版)的二-2及之后的内容配置域名,ssl证书,cdn加速,以及每次更新后一定要刷新缓存!
至此即完成了博客托管迁移到CNB,并通过云原生构建自动更新存储桶,有什么疑问,或遇到什么问题可以通过评论或右下角的信息标志给我留言,我会及时回复。