背景
腾讯退出了云原生(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
|