logo
0
0
WeChat Login
feat(制品库): 新增并发迁移参数

Maven 制品迁移

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

1. 命令行设置运行

docker run --rm \
    -u root \
    -e ARTIFACT_MIGRATE="parameter-mode" \
    -e ARTIFACT_TYPE="maven" \
    -e SRC_REGISTRY_TYPE="" \
    -e SRC_INCLUDE_PACKAGE="" \
    -e SRC_EXCLUDE_PACKAGE="" \
    -e SRC_CLASSIFIER=""\
    -e SRC_REGISTRY_URL="" \
    -e SRC_REGISTRY_USERNAME="" \
    -e SRC_REGISTRY_PASSWORD="" \
    -e SRC_REGISTRY_TOKEN="" \
    -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_TYPEmaven
SRC_REGISTRY_TYPE源仓库类型(jfrog、nexus、coding、codeup、other)
SRC_CLASSIFIERcodeup或者other时有非默认文件格式需配置,配置格式:".xxx,-dddd.xxx" 默认支持:".pom,.jar,-plain.jar,.war,.ear,.aar,.rar,.par,.ejb,.apk,.klib,.bundle,.module,-sources.jar,-javadoc.jar,-assembly.zip,-shade.jar,-debug.aar,-debug-sources.jar,-official.aar,-kotlin-tooling-metadata.json"
SRC_POOL_SIZE按版本并发迁移,默认20并发,最大256并发
SRC_INCLUDE_PACKAGE1.包含规则,只会迁移符合规则的包和相应版本
2.详情参考: config.yaml 参数介绍includePackageVersion规则说明
SRC_EXCLUDE_PACKAGE1.排除规则,命中规则的包和版本不进行迁移
2.具体配置参考: config.yaml 参数介绍excludePackageVersion规则说明
SRC_REGISTRY_URL源仓库地址
SRC_REGISTRY_USERNAME源仓库用户名
SRC_REGISTRY_PASSWORD源仓库密码
SRC_REGISTRY_TOKEN1.Codeup 平台 API 访问令牌,SRC_REGISTRY_TYPE为 codeup 才设置
2.获取方法,请参考云效文档开发参考->API参考->获取个人访问令牌
TAR_REGISTRY_URLCNB 目标仓库地址
TAR_REGISTRY_PASSWORDCNB 目标仓库 token
OVERWRITE_POLICY是否覆盖,默认不覆盖。 false:不覆盖 true: 覆盖

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:
  # 仓库类型
  maven:
    - src:
        # 源仓库类型,可选: jfrog, nexus, coding, codeup, other
        # 源仓库是 other, includePackageVersion 必填
        type: coding
        # 包含规则,只会迁移符合规则的包和相应版本,多规则按"(|)"分隔,正则和其他规则互斥
        # 详情参考:包含和排除规则说明
        # 1. 源仓库类型 other ,只能配置指定版本规则,如:(com.example:app:5.8.1|com.example:app:{2.0.34,2.0.35})
        # 2. 源仓库类型不是 other,可配置范围规则和指定版本规则 或者 正则表达式规则,如:(com.example|com.example:app:{2.0.34,2.0.35})
        #   2.1 正则表达式规则示例(如: ^org 以 org 开头的包名 或者 ^.*coding.*$ 包含 coding 的包)
        # 3. 支持配置规则文件,如:/app/includePackageVersion.txt
        includePackageVersion:
        # 排除规则,命中规则的包和版本不进行迁移,多规则按"(|)"分隔,正则和其他规则互斥
        # 详情参考:包含和排除规则说明
        # 1. 支持所有匹配规则格式,如:(com.example|com.example:app:[2.0.34,2.0.35])
        # 2. 支持配置正则表达式,不迁移含 test 包。^.*test.*$
        # 3. 支持配置文件地址,如:/app/excludePackageVersion.txt
        excludePackageVersion:
        # 默认支持:".pom,.jar,-plain.jar,.war,.ear,.aar,.rar,.par,.ejb,.apk,.klib,.bundle,.module,-sources.jar,-javadoc.jar,-assembly.zip,-shade.jar,-debug.aar,-debug-sources.jar,-official.aar,-kotlin-tooling-metadata.json"
        # codeup或者other时有非默认文件格式需配置
        # 格式:".xxx,-dddd.xxx"  
        classifier:
        # 源仓库地址
        url: https://xxx-maven.pkg.coding.net/repository/xxx/xxx
        # 源仓库用户名
        username: xxx
        # 源仓库密码
        password: xxx
        # 1. Codeup 平台 API 访问令牌,type 为 codeup 才设置
        # 2. 获取方法,请参考云效文档 开发参考->API参考->获取个人访问令牌
        token:
      target:
        # 目标仓库地址
        url: https://maven.cnb.cool/xxx/maven/-/packages/
        # 目标仓库 token
        password: xxx
        # 非必填,默认不覆盖。 false:不覆盖 true: 覆盖
        overwritePolicy:

四、包含和排除规则说明

语法具体包版本匹配含义示例
groupid匹配任意版本的该 groupId匹配 com.example 所有版本
groupid:artifctid匹配该构件所有版本com.example:app 的所有版本
groupid:artifctid:1.0.0匹配精确版本仅 com.example:app:1.0.0
groupid:artifctid:{1.0.0,2.0.0}匹配多个指定版本仅匹配 com.example:app 的 1.0.0 和 2.0.0
groupid:artifctid:[1.0.0,5.0.0]匹配版本范围内所有版本(含端点)匹配 com.example:app 1.0.0 到 5.0.0 之间版本
规则示例:

# 源仓库类型 other 时,includePackageVersion,只支持具体包版本匹配规则格式
# 示例:
#全部版本
com.example:app
#单个版本
com.example:app:1.0.0
#多个版本号
com.example:app:{3.0.0,3.13.6}


# 源仓库类型不是 other,  includePackageVersion,支持所有匹配规则格式
# 示例:
#全部包版本
com.example
#全部版本
com.example:app
#多个版本号
com.example:app:{3.0.0,3.13.6}
#版本区间
com.example:app:[3.0.0,3.13.6]

# excludePackageVersion, 支持所有匹配规则格式
# 示例:
#全部包版本
com.example
#全部版本
com.example:app
#多个版本号
com.example:app:{3.0.0,3.13.6}
#版本区间
com.example:app:[3.0.0,3.13.6]