logo
0
0
WeChat Login
修正README里面的docker run命令漏了一个\符号

CNB Artifact Migrate(Dcoker 制品迁移)

功能介绍

  1. 支持Coding、Nexus、Jfrog、Tcr(腾讯云镜像仓库)、Other(自定义镜像列表)中的 Docker 类型制品迁移至 CNB

获取云原生构建令牌

  • 用户头像 -> 个人设置 -> 访问令牌 -> 添加访问令牌 -> 勾选制品库 -> 创建令牌

    cnb-2.png

获取云原生构建迁移路径

  • 获取方式: 代码仓选中 制品库
  • 存在制品的仓库 -> 制品地址

    cnb-docker-1.png

  • 不存在制品的仓库 -> Docker -> 推送制品 -> 云原生开发推送 ->推送仓库地址

    nb-docker-2.png

获取源仓库地址及账号密码

  • 获取 Nexus 源仓库地址

    Nexus-docker-1.png

  • 获取 Tcr 仓库地址及账号密码(个人版账号直接使用云控制台登陆的账号密码)

    Tcr-docker-1.png

    Tcr-docker-2.png

Docker 制品库迁移

一、Docker 命令行运行迁移工具

1. 命令行设置运行

docker run --rm \ -u root \ -e ARTIFACT_MIGRATE="parameter-mode" \ -e ARTIFACT_TYPE="docker" \ -e SRC_REGISTRY_TYPE="" \ -e SRC_INCLUDE_PACKAGE="" \ -e SRC_EXCLUDE_PACKAGE="" \ -e SRC_REGISTRY_URL="" \ -e SRC_NEXUS_REPO_URL="" \ -e SRC_REGISTRY_USERNAME="" \ -e SRC_REGISTRY_PASSWORD="" \ -e SRC_API_SECRET_ID="" \ -e SRC_API_SECRET_KEY="" \ -e SRC_REGISTRY_ISTLSVERIFY="" \ -e SRC_REGISTRY_REGION="" \ -e TAR_REGISTRY_URL="" \ -e TAR_REGISTRY_PASSWORD="" \ -v $(pwd):/app/log \ docker.cnb.cool/cnb/plugins/cnbcool/artifact-migrate:latest

参数说明

  1. 挂载当前目录为日志文件目录: -v $(pwd):/app/log
  2. 迁移工具会在 日志文件目录 生成 执行日志迁移成功的包版本列表迁移失败的包版本列表文件
  3. 增量迁移:SRC_EXCLUDE_PACKAGE 配置为 迁移成功版本列表路径, 则会跳过之前迁移成功的版本, 从而达到增量迁移的效果
参数说明
ARTIFACT_TYPEdocker
SRC_REGISTRY_TYPE源仓库类型(jfrog、nexus、coding、tcr、other)
SRC_INCLUDE_PACKAGE1.包含规则,只会迁移符合规则的包和相应版本
2.详情参考: config.yaml 参数介绍includePackageVersion规则说明
SRC_EXCLUDE_PACKAGE1.排除规则,命中规则的包和版本不进行迁移
2.具体配置参考: config.yaml 参数介绍excludePackageVersion规则说明
SRC_REGISTRY_URL源仓库地址,根据文档前面指引获取源仓库地址
SRC_NEXUS_REPO_URL非必填,nexus 平台的 docker 地址端口与控制台页面仓库地址端口可能域名端口不一样,需要提供实际使用的docker仓库地址
例如:9.134.79.157:8081/repository/docker
SRC_REGISTRY_USERNAME源仓库用户名
SRC_REGISTRY_PASSWORD源仓库密码
SRC_API_SECRET_ID1.Tcr云账号 API 访问令牌ID,SRC_REGISTRY_TYPE为 tcr 才设置,获取方法,API密钥管理
SRC_API_SECRET_KEYTcr云账号 API 访问令牌KEY,SRC_REGISTRY_TYPE为 tcr 才设置, 新建密钥时复制,API密钥管理
SRC_REGISTRY_ISTLSVERIFY非必填,源仓库是否加密通信(https),非必填,非加密通信仓库时需要设置为 false
SRC_REGISTRY_REGION源仓库地域编码,SRC_REGISTRY_TYPE为 tcr 才设置
如:ap-shanghai,ap-beijing。获取方式:腾讯云地域列表
TAR_REGISTRY_URLCNB 目标仓库地址
TAR_REGISTRY_PASSWORDCNB 目标仓库 token

2.指定 config.yaml 运行

docker run --rm \ -u root \ -v /data/conf/config.yaml:/app/config.yaml \ # 详情参考:[config.yaml 参数介绍] 的 includePackageVersion 规则说明,config.yaml 中 includePackageVersion 配置为 /app/includePackageVersion.txt -v /data/conf/includePackageVersion.txt:/app/includePackageVersion.txt \ # 详情参考:[config.yaml 参数介绍] 的 excludePackageVersion 规则说明,config.yaml 中 includePackageVersion 配置为 /app/excludePackageVersion.txt -v /data/conf/excludePackageVersion.txt:/app/excludePackageVersion.txt \ # 日志目录 -v $(pwd):/app/log \ docker.cnb.cool/cnb/plugins/cnbcool/artifact-migrate:latest
  1. 挂载日志文件目录: -v $(pwd):/app/log
  2. 迁移工具会在 日志文件目录 生成 执行日志迁移成功的包版本列表迁移失败的包版本列表文件
  3. 增量迁移:config.yamlexcludePackageVersion 配置为 迁移成功版本列表, 则会跳过之前迁移成功的版本, 从而达到增量迁移的效果

二、在CNB流水线上使用

main: push: - services: - docker stages: - name: 制品迁移 script: | echo "制品迁移开始" docker pull docker.cnb.cool/cnb/plugins/cnbcool/artifact-migrate:latest docker run --rm \ -u root \ -v /workspace/config.yaml:/app/config.yaml \ -v $(pwd):/app/log \ docker.cnb.cool/cnb/plugins/cnbcool/artifact-migrate:latest echo "制品迁移完成"
  1. config.yaml 配置放在仓库根目录
  2. cnb 流水线中项目默认路径:/workspace

三、config.yaml 参数介绍

artifactory: # 仓库类型 docker: - src: # 源仓库类型,可选: coding,nexus,jfrog,tcr,other # 源仓库是 other, includePackageVersion 必填 type: coding # 包含规则,只会迁移符合规则的包和相应版本,多规则按"(|)"分隔,正则和其他规则互斥 # 详情参考:包含和排除规则说明 # 1. 源仓库类型 other ,只能配置指定版本规则,如:(mongodb:{4.17.2,5.9.2}|redis:4.7.1) # 2. 源仓库类型不是 other,可配置范围规则和指定版本规则 或者 正则表达式规则,如:(mongodb:[4.17.2,5.9.2]|redis:4.7.1) # 2.1 正则表达式规则示例(如: ^@tencent.*$ 以 @tencent 开头的包名 或者 ^.*coding.*$ 包含 coding 的包) # 3. 支持配置规则文件,如:/app/includePackageVersion.txt includePackageVersion: # 排除规则,命中规则的包和版本不进行迁移,多规则按"(|)"分隔,正则和其他规则互斥 # 详情参考:包含和排除规则说明 # 1. 支持所有匹配规则格式,如:(mongodb:{4.17.2,5.9.2}|redis:4.7.1) # 2. 支持配置正则表达式,不迁移含 test 包。^.*test.*$ # 3. 支持配置文件地址,如:/app/excludePackageVersion.txt excludePackageVersion: # 源仓库地址,根据文档前面指引获取源仓库地址 url: coding-test-docker.pkg.coding.net/coding-test/images # 非必填,nexus平台展示的docker地址端口与控制台页面仓库地址端口可能不一样,需要提供实际使用的docker仓库地址 nexusRepoUrl: 9.134.79.157:8081/repository/docker # 源仓库用户名 username: xxx # 源仓库密码或者token password: xxx # 源仓库是否加密通信(https),默认 true isTlsVerify: (true/false) # 腾讯云密钥,type 为 tcr 时必填,获取方法:[API密钥管理](https://console.cloud.tencent.com/cam/capi) secretId: # 腾讯云密钥,type 为 tcr 时必填,获取方法:[API密钥管理](https://console.cloud.tencent.com/cam/capi) secretKey: # 资源地域,type 为 tcr 时必填,如ap-shanghai,ap-beijing,[腾讯云地域列表](https://cloud.tencent.com/document/api/213/15692#.E5.9C.B0.E5.9F.9F.E5.88.97.E8.A1.A8) region: target: # 目标仓库地址,根据文档前面指引:获取云原生构建迁移路径 url: docker.cnb.cool/widelei/test # 目标仓库密码 password: xxx # 非必填,默认不覆盖。 false:不覆盖 true: 覆盖 overwritePolicy:

四、包含和排除规则说明

语法具体包版本匹配含义示例
name匹配任意版本的包匹配 example 所有版本
name:1.0.0匹配精确版本仅 example:1.0.0
name:{1.0.0,2.0.0}匹配指定版本集合(1.0.0 或 2.0.0)仅匹配 1.0.0 和 2.0.0
name:[1.0.0,5.0.0]匹配闭区间内的所有版本(含端点)匹配 1.0.0 到 5.0.0 之间版本

txt 包名列表

# excludePackageVersion 与 includePackageVersion .txt文件 支持所有匹配规则格式 # 示例: #全部包版本 name #单个版本 name:1.0.0 #多个版本号 name:{3.0.0,3.13.6} #版本区间 name:[3.0.0,3.13.6]