将Coding仓库转移到云原生开发(CNB)

146 阅读4分钟

Coding 要收费了

今天登录Coding,准备找找以前的工程,有一个消息弹窗一下子吸引了我:截图没了,大概意思是:2025年9月1日,基础版服务取消,点开详情一看,这不扯犊子了吗,用了这么多年的免费仓库,不给用了?

image.png

看一下了解详情,9月1日之后,不付费真不给用了,而且以前的免费用户限制登录了。

3.  **2025.9.1日后,原标准版用户是否可以继续登录?**

不可以的。新版订购方案生效后,原标准版用户无法登录,只能付费升级到高级版或旗舰版。

幸好也给了解决方案,可以切换到新产品:云原生构建(Cloud Native Build,简称 CNB),免费容量更大,没有功能限制。

2.  **新版订购方案生效后,CODING 是否取消了免费版本-标准版,只能付费使用?**

是的。新版订购方案取消了标准版,只能付费使用,免费用户可以切换到新产品:云原生构建(Cloud Native Build,简称 CNB),免费容量更大,没有功能限制。

> 新产品(云原生构建)入口信息

-   地址:<https://cnb.cool/>
-   信息差介绍:<https://mp.weixin.qq.com/s/3QoeXyRilzFJ8mry55ctDA>
-   官方示例:<https://cnb.cool/examples/showcase>
-   帮助文档:<https://docs.cnb.cool/zh/>

那能怎么办呢, 白嫖的用户,只能多动手,该转移就转移。

仓库转移

按照官方的代码转移介绍

6.  **切换到新产品云原生构建(Cloud Native Build,简称 CNB)之后, CODING 的数据是否可以迁移过去?**

部分可迁移。「云原生构建」是新一代生产力工具,与原 CODING 有着不同的设计理念和架构升级,所以目前只有代码仓库和项目协同的数据可以迁移。

- 代码仓库迁移:  https://cnb.cool/cnb/plugins/cnbcool/code-import
- 项目协同:  https://cnb.cool/CODING/tool/migrate-collaboration

打开代码仓库迁移,这是啥玩意,有源码,有命令,但是不知道怎么用。。。。。。。😭。。。。。。

还是借助deepseek帮助,然后一个一个尝试,算是成功了。

重要提示:CNB仓库单个文件限制100M。 目前没找到有设置文件大小限制的地方。
对我个人来讲,TMD,我的工程引用的第三方。一个文件有超过500M的(穿山甲广告的SDK,用过的都会感叹一句wc),怎么办?
暂时只能被动接受。。。
look in my eyes,tall me why?baby,why?

1、完善CNB

1、微信扫码登录:正常微信扫码登录即可

2、创建组织: 所有的仓库都依赖组织,所以需要先创建组织, 创建组织的过程中,还需要实名认证,按照提示,微信扫码即可。

image.png

2、使用docker

下载docker

去官方下载docker,安装的时候,按默认设置即可。

下载镜像

搜索cnb的docker镜像 cnbcool/code-import

image.png

先pull下来,然后run

image.png

此时准备工作已完成

转移前配置

根据官方介绍,持CODING、Github、Gitlab、Gitee、阿里云以及通用第三方代码托管平台的代码仓库批量导入至CNB,但是前期大多数都是从Coding转移过来,不然其他平台用的好好的,谁会闲着🥚疼把仓库往其他平台转?

这里以Coding为例:
此时,可以将这个命令复制到记事本上,接下来配置一个参数,就可以改一个参数。

docker run --rm  \
  -e PLUGIN_SOURCE_TOKEN="xxx"  \
  -e PLUGIN_SOURCE_URL="https://coding.example.com" \
  -e PLUGIN_CNB_ROOT_ORGANIZATION="xxx" \
  -e PLUGIN_CNB_TOKEN="xxx"  \
  -v $(pwd):$(pwd) -w $(pwd) \
  cnbcool/code-import

需要的参数如下,其他平台的参数在底部也有详细描述:

参数名类型必填默认值说明
PLUGIN_SOURCE_URL字符串-代码托管平台URL
PLUGIN_MIGRATE_USE_LFS_MIGRATE 字符串否 false是否使用lfs migrate处理历史提交中超过CNB单文件最大限制错误
⚠️如开启该配置,迁移后commit ID会与源仓库不一致  
PLUGIN_SOURCE_TOKEN字符串-调用源代码托管平台 API 的 token
- CODING权限:用户信息-只读、项目信息-只读、代码仓库-只读
PLUGIN_CNB_ROOT_ORGANIZATION字符串-迁移后,CNB对应的根组织名称,请确保根组织已提前创建
PLUGIN_CNB_TOKEN字符串-CNB 授权令牌,权限要求:
- repo-code 读写
- repo-basic-info 只读
- account-profile 只读
- account-engage 只读
- group-resource 读写
- group-manage 读写
- repo-content 读写

PLUGIN_SOURCE_URL:

代码托管平台的url,也就是你的Coding主页地址,截止到coding.net为止

image.png

复制coding的主页地址,截止到。net, 比如*www.xxx.coding.net*, 将其替换到PLUGIN_SOURCE_URL项上

PLUGIN_SOURCE_TOKEN:

coding的访问令牌

image.png

在新建令牌的时候,注意权限选择,需要:用户信息-只读、项目信息-只读、代码仓库-只读

创建好之后,将令牌复制,替换到刚才保存到记事本的命令的PLUGIN_SOURCE_TOKEN

PLUGIN_CNB_ROOT_ORGANIZATION:

CNB平台上的组织名称:

image.png

创建好的组织名称,将其复制,替换到刚才保存到记事本的命令的PLUGIN_CNB_ROOT_ORGANIZATION

PLUGIN_CNB_TOKEN:

CNB上的令牌,

image.png

image.png

注意创建过程中,设置相应的权限:

 CNB 授权令牌,权限要求:  
 - repo-code 读写  
 - repo-basic-info 只读  
 - account-profile 只读  
 - account-engage 只读  
 - group-resource 读写  
 - group-manage 读写  
 - repo-content 读写

创建完成,保存CNB的令牌,将其复制,替换到刚才保存到记事本的命令的PLUGIN_CNB_TOKEN

好了,此时需要的配置信息就配置完成

docker run --rm  \
  -e PLUGIN_SOURCE_TOKEN="Coding平台上配置的令牌"  \
  -e PLUGIN_SOURCE_URL="coding的主页url,比如https://xxxx.coding.net" \
  -e PLUGIN_CNB_ROOT_ORGANIZATION="CNB组织名称" \
  -e PLUGIN_CNB_TOKEN="CNB口令"  \
  -v $(pwd):$(pwd) -w $(pwd) \
  cnbcool/code-import

转移

上一步中,将所有的参数项都替换完成之后,将其复制。切换到Docker,

image.png

垃圾CNB 在命令行中输入之前的命令行,等待即可。

异常处理

1、超大文件

我在执行转移命令时,只遇到一个问题: 项目中的单个文件过大(超过100M),被跳过转移了。

如果工程中确实存在大文件,而且依然想转移的,查看官方介绍底部的参数,可在命令中加入PLUGIN_MIGRATE_USE_LFS_MIGRATE,完整命令为:

 docker run --rm  \
   -e PLUGIN_SOURCE_TOKEN="Coding平台上配置的令牌"  \
   -e PLUGIN_SOURCE_URL="coding的主页url,比如https://xxxx.coding.net" \
   -e PLUGIN_CNB_ROOT_ORGANIZATION="CNB组织名称" \
   -e PLUGIN_CNB_TOKEN="CNB口令"  \
   -e PLUGIN_MIGRATE_USE_LFS_MIGRATE=true \
   -v $(pwd):$(pwd) -w $(pwd) \
   cnbcool/code-import

2、第一次同步失败,第二次直接跳过

因为第一次同步时,有一些大文件的问题,导致同步失败,第二次加PLUGIN_MIGRATE_USE_LFS_MIGRATE之后继续同步,之前同步异常的项目直接跳过, 此时可以根据情况,

  • 1、如果大部分仓库已经同步成功,只有少量的同步失败,可以在CNB里面将同步失败的仓库删掉,重新同步。

  • 2、如果之后少量同步成功,大多数仓库都同步失败,可以在命令中加入PLUGIN_MIGRATE_SKIP_EXISTS_REPO=false

image.png