博客迁移云原生

背景

腾讯退出了云原生(cnb.cool),给个人用户提供了不少免费的额度。包含100G代码仓库、160核时的构建和1600核时的云开发。
云开发可以用来加速docker拉取,而160核时的构建资源可以用来自动化部署博客,所以打算从gitee迁移至cnb.cool了。

迁移

新建代码仓库

新建代码仓库比较简单,和其他代码托管服务没什么太大的区别。

公开性有3种选择,其中秘钥仓库是为存储秘钥而准备的,在之后的自动构建、部署、通知上会使用一些秘钥,例如服务器证书、通知token等等

git本地管理

一开始卡在了这一步,cnb.cool的代码仓库只有https访问方式,地址就是浏览器上的地址

1
https://cnb.cool/[组织名]/[仓库名]

问题在于没有传统的SSH私钥访问方式。

那就只能使用账密的方式访问了,但cnb.cool采用微信扫码方式登录,也没有设置密码的地方。为了这个问题一路找到了官网的issue上,发现不少人问了相同的问题。
原来git访问的方式是采用token的方式,用户名固定位cnb,密码就是创建的令牌。

push代码

迁移也遇到了一点问题,原本以为只要把代码搬过来,然后push到新仓库地址就可以了,结果发生了http500错误。

经过多次尝试,如果只提交少量文件,是可以正常push上去的,但是全量就不行,怀疑是一次性提交的内容太多了。(虽说代码只有8M而已)
通过设置git属性来解决这个问题

1
git config --global http.postBuffer 524288000

再次尝试push就成功了。

自动构建部署

和gitee有点差异,构建部署没有提供可视化界面,只能通过代码操作

在根目录位置创建一个.cnb.yml文件

将使用到的主机host、端口、用户、私钥、token全都采用变量占位,最后在私钥仓库中填写对应的值

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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
dev:
push:
- runner:
cpus: 1
imports:
- https://cnb.cool/shellingford/sfenv/-/blob/main/alihost.yml
- https://cnb.cool/shellingford/sfblog/-/blob/dev/release.yml
docker:
image:
name: docker.cnb.cool/shellingford/my_hexo:latest
stages:
- name: 设置环境变量
script: echo -n $(date "+%Y-%m-%d")
exports:
code: CUSTOM_ENV_DATE_CODE
info: CUSTOM_ENV_DATE_INFO
- name: 打包 public 目录
script: |
# 将源码复制到docker镜像中的工作目录
cp -r . /usr/app
cd /usr/app
# 使用hexo构建
hexo -v
hexo gen
# 将静态资源复制到static目录中
cp -r static/ public/static
# 压缩成制品
tar -czf /workspace/build.tar.gz public/
# https://docs.cnb.cool/plugin/#public/tencentcom/rsync
- name: 使用 rsync 复制文件
image: tencentcom/rsync
settings:
hosts:
- ${REMOTE_HOST}
user: ${REMOTE_USERNAME}
key: ${PRIVATE_KEY}
port: ${REMOTE_PORT}
target: /home/sync/
source: ./build.tar.gz
log_level: info
# https://docs.cnb.cool/plugin/#public/tencentcom/ssh
- name: 通过 ssh 执行命令
image: tencentcom/ssh
settings:
host:
- ${REMOTE_HOST}
username: ${REMOTE_USERNAME}
key: ${PRIVATE_KEY}
port: ${REMOTE_PORT}
command_timeout: 2m
script: |
cd /home/sync/
# 清空原网站目录
rm -rf /data/1panel/www/sites/www.iasuna.com/index
mkdir /data/1panel/www/sites/www.iasuna.com/index
# 清空临时目录
rm -rf /data/1panel/www/sites/www.iasuna.com/temp1
mkdir /data/1panel/www/sites/www.iasuna.com/temp1
# 解压缩文件
tar zxvf /home/sync/build.tar.gz -C /data/1panel/www/sites/www.iasuna.com/temp1
# 移动文件
mv /data/1panel/www/sites/www.iasuna.com/temp1/public/* /data/1panel/www/sites/www.iasuna.com/index/
# 重新设置权限
chmod -R 0755 /data/1panel/www/sites/www.iasuna.com/index
chown -R www:www /data/1panel/www/sites/www.iasuna.com/index
# 删除临时目录
rm -rf /data/1panel/www/sites/www.iasuna.com/temp1
# 删除制品包
rm /home/sync/build.tar.gz
- name: 通知
image: cnbcool/webhook
settings:
urls:
- https://www.pushplus.plus/send
method: POST
content_type: application/json
template: |
{
"token":"${PUSH_TOKEN}",
"title":"博客部署成功",
"content":"博客由{{ CNB_BUILD_USER }}部署成功",
"owner": "{{ CNB_BUILD_USER }}",
"repo": "{{ CNB_REPO_SLUG }}",
"url": "{{ CNB_REPO_URL_HTTPS }}",
"event": "{{ CNB_EVENT }}"
}
- name: 上传release
type: git:release
options:
tag: ${RELEASE_VERSION}
title: ${RELEASE_VERSION} ${CUSTOM_ENV_DATE_INFO}
latest: true
description: "发布"

main:
"crontab: 30 1 * * *":
- name: release clean
stages:
- name: release clean
image: docker.cnb.cool/cnb/plugins/cnbcool/release-clean:latest
settings:
filter: "RECENT_N_DAYS_RETAIN_N=10,5"
debug: false