logo
0
0
WeChat Login
fix:更新 pypi 文档

CNB Artifact Migrate(PyPI 制品迁移)

功能介绍

  1. 支持Coding、Nexus、Jfrog、codeup(云效)平台中的 PyPI 类型制品迁移至 CNB

获取云原生构建令牌

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

获取云原生构建迁移路径

  • 获取方式: 选中 PyPI 制品库 -> 制品库设置 -> 基础设置 -> PyPI registry img.png

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

使用 Docker 迁移

注意事项

  1. ⚠️开始迁移前,请确保CNB制品仓库已存在。
  2. ⚠️Nexus、Jfrog 主要支持local库。
  3. ⚠️主要迁移自有包,不要迁移三方包
Nexus 注意事项

因Nexus的列表查询api接口查询数量有限制,Nexus超过1W版本以上的仓库迁移,请配置迁移列表.否则只能迁移1W个版本数据

codeup迁移注意事项

暂不支持插件衍生的元数据文件迁移

指定参数迁移

  1. -v $(pwd):/app/log:/app/log 日志目录
  2. 日志文件包执行日志文件,迁移成功的包版本文件,迁移失败的包版本文件
  3. 增量迁移:挂载 迁移成功的包版本文件 并将文件路径配置到 SRC_EXCLUDE_PACKAGE 项
docker run --rm \
    -u root
    -e ARTIFACT_MIGRATE="parameter-mode" \
    -e ARTIFACT_TYPE="pypi" \
    -e SRC_REGISTRY_TYPE="" \
    -e SRC_INCLUDE_PACKAGE="" \
    -e SRC_EXCLUDE_PACKAGE="" \
    -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

参数说明

Docker 参数说明
ARTIFACT_TYPE固定值为 pypi
SRC_REGISTRY_TYPE源仓库类型(jfrog、nexus、coding、codeup、other), SRC_REGISTRY_TYPE 为 other 时必须配置 SRC_INCLUDE_PACKAGE
SRC_INCLUDE_PACKAGE指定需要迁移的包,具体配置参考:config.yaml中includePackageVersion
SRC_EXCLUDE_PACKAGE指定迁移时需要排除的包,支持包名及包名:版本,具体配置参考:config.yaml中excludePackageVersion
SRC_REGISTRY_URL源仓库地址
SRC_REGISTRY_USERNAME源仓库账号
SRC_REGISTRY_PASSWORD源仓库密码
SRC_REGISTRY_TOKEN制品仓库api访问令牌(codeup专用,请参考云效文档 开发参考->API参考->获取个人访问令牌)
SRC_TEMP_DIR迁移时产生的临时文件存储路径,默认为系统临时文件路径
TAR_REGISTRY_URLcnb目标仓库地址
TAR_REGISTRY_PASSWORDcnb目标仓库token

配置文件迁移

  1. 挂载日志文件目录: -v $(pwd):/app/log
  2. 日志文件包执行日志文件,迁移成功的包版本文件,迁移失败的包版本文件
  3. 增量迁移:挂载 迁移成功的包版本文件 并将文件路径配置到 config.yaml 中的 excludePackageVersion 项
docker run --rm  \
  -u root \
  -v /data/conf/config.yaml:/app/config.yaml  \
  # 迁移包列表文件挂载地址,需要挂载指定迁移包列表文件时使用,配置在config.yaml中includePackageVersion项
  -v /data/conf/config-pypi-includePackageName.txt:/app/config-pypi-includePackageName.txt  \
  # 迁移需排除的包列表文件挂载地址,需要挂载指定迁移需排除的包列表文件时使用,配置在config.yaml中excludePackageVersion项
  -v /data/conf/config-pypi-excludePackageName.txt:/app/config-pypi-excludePackageName.txt  \
  # 日志目录
  -v $(pwd):/app/log \
  docker.cnb.cool/cnb/plugins/cnbcool/artifact-migrate:latest

Docker 迁移示例:

以下所有密钥均已进行脱敏处理,不可直接使用

# 我希望从腾讯云 PyPI 源上把 requests 的版本号在 0.8.0 到 2.32.0 之间的包迁移到 CNB 的 pypi-test 仓库中,同时我希望屏蔽 2.20.0-2.24.0 之间的版本
docker run --rm \
    -u root
    -e ARTIFACT_MIGRATE="parameter-mode" \
    -e ARTIFACT_TYPE="pypi" \
    -e SRC_REGISTRY_TYPE="other" \
    # 指定迁移的版本为 0.8.0 到 2.32.0 之间 
    -e SRC_INCLUDE_PACKAGE="(requests:[0.8.0,2.32.0])" \ 
    # 指定屏蔽的版本为 2.20.0 到 2.24.0 之间 
    -e SRC_EXCLUDE_PACKAGE="(requests:[2.20.0,2.24.0])" \
    -e SRC_REGISTRY_URL="https://mirrors.cloud.tencent.com/pypi/simple" \
    -e SRC_REGISTRY_USERNAME="" \
    -e SRC_REGISTRY_PASSWORD="" \
    -e SRC_REGISTRY_TOKEN="" \
    # 表示将迁移时产生的临时文件存储在 /data/temp/ 路径下
    -e SRC_TEMP_DIR="/data/temp/"
    # 目标 cnb 地址
    -e TAR_REGISTRY_URL="https://pypi.cnb.cool/orain-test/pypi-test/-/packages/transfer" \
    # 目标 cnb 地址的 password
    -e TAR_REGISTRY_PASSWORD="640b7253e151ee254d2d366b31ab6ea4" \
    -v $(pwd):/app/log \
    docker.cnb.cool/cnb/plugins/cnbcool/artifact-migrate:latest
# 我希望从 nexus 的 pypi2-hosted 仓库中把除了 1.7.2 和 1.8.0 版本的 numpy 包迁移到 CNB 的 pypi-test 仓库中
docker run --rm \
    -u root
    -e ARTIFACT_MIGRATE="parameter-mode" \
    -e ARTIFACT_TYPE="pypi" \
    -e SRC_REGISTRY_TYPE="nexus" \
    -e SRC_INCLUDE_PACKAGE="numpy" \ 
    -e SRC_EXCLUDE_PACKAGE="(numpy:{1.7.2,1.8.0})" \
    -e SRC_REGISTRY_URL="https://nexushub.com:8081/repository/pypi2-hosted/" \
    -e SRC_REGISTRY_USERNAME="test" \
    -e SRC_REGISTRY_PASSWORD="test1" \
    -e SRC_REGISTRY_TOKEN="" \
    # 表示将临时文件存储在默认临时文件路径
    -e SRC_TEMP_DIR=""
    # 目标 cnb 地址
    -e TAR_REGISTRY_URL="https://pypi.cnb.cool/orain-test/pypi-test/-/packages/transfer" \
    # 目标 cnb 地址的 password
    -e TAR_REGISTRY_PASSWORD="640b7253e151ee254d2d366b31ab6ea4" \
    -v $(pwd):/app/log \
    docker.cnb.cool/cnb/plugins/cnbcool/artifact-migrate:latest
# 我希望将我的 Coding 的 py-demo 制品库中除了 1.2.1 到 2.0.0 之间所有的 requests 包,版本在 1.5.1 与 1.10.4 之间的 numpy 包,1.9.3 的 django 包迁移至 cnb 的 pypi-test 仓库中
docker run --rm \
    -u root
    -e ARTIFACT_MIGRATE="parameter-mode" \
    -e ARTIFACT_TYPE="pypi" \
    -e SRC_REGISTRY_TYPE="coding" \
    -e SRC_INCLUDE_PACKAGE="(requests|numpy:[1.5.1,1.10.4]|django:{1.8.13,1.9.3})" \ 
    -e SRC_EXCLUDE_PACKAGE="(requests:[1.2.1,2.0.0],django:1.8.13)" \
    # coding 仓库地址
    -e SRC_REGISTRY_URL="https://demo-pypi.pkg.coding.net/demo/py-demo" \
    # coding 个人令牌名称
    -e SRC_REGISTRY_USERNAME="py-test-123456789" \
    # coding 个人令牌密码
    -e SRC_REGISTRY_PASSWORD="2bf35d65c254efad0ac6e6bcea245324" \
    -e SRC_REGISTRY_TOKEN="" \
    # 表示将临时文件存储在默认临时文件路径
    -e SRC_TEMP_DIR=""
    # 目标 cnb 地址
    -e TAR_REGISTRY_URL="https://pypi.cnb.cool/orain-test/pypi-test/-/packages/transfer" \
    # 目标 cnb 地址的 password
    -e TAR_REGISTRY_PASSWORD="640b7253e151ee254d2d366b31ab6ea4" \
    -v $(pwd):/app/log \
    docker.cnb.cool/cnb/plugins/cnbcool/artifact-migrate:latest

在CNB流水线上迁移

注意事项

  1. 将config.yaml 配置放在项目根目录
  2. cnb流水线中项目默认路径:/workspace
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 "制品迁移完成"

config.yaml 参数介绍

# 我希望从 codeup 上把 pypi-demo 仓库中所有的包迁移到 CNB 的 pypi-test 仓库中

artifactory:
  # 仓库类型
  pypi:
    - src:
        # 源仓库类型,可选:jfrog、nexus、coding、codeup(云效)、other(其他仓库)
        type: codeup
        # 按包名迁移,支持配置批量,按包名或者包名:版本号,按"(|)"分隔,如:(xxx|xxxx:1.0.0)
        # 支持配置正则表达式,按包名迁移规则(正则表达式,如:^org 以org开头的包名)
        # 支持批量,配置文件地址,支持文件名.txt:/app/config-pypi-includePackageName.txt
        includePackageVersion:
        # 排除包名迁移,支持配置批量,按包名或者包名:版本号,按"(|)"分隔,如:(xxx|xxxx:1.0.0|xxxx:[1.0.0,2.0.0])
        # 支持配置正则表达式,按包名迁移规则(正则表达式)
        # 支持批量,配置文件地址,支持文件名.txt:/app/config-pypi-excludePackageName.txt
        excludePackageVersion:
        # 源仓库地址
        url: https://packages.aliyun.com/2a8a812400df8963b2e2ac0ed01b07b8/pypi/pypi-demo
        # 源仓库账号
        username: "55eda7ddd85ab342b862844fd3cdd71a"
        # 源仓库密码
        password: "c32daSW212s("
        # 制品仓库api访问令牌(codeup专用,请参考云效文档 开发参考->API参考->获取个人访问令牌)
        token: "pt-ZYx8f7Rq23NpLm9Kj6HsDcBw_7b3c221a-9f82-4dac-b6e1-8c9a0b7d5f6c"
        tempDir:
      target:
        # 目标仓库地址
        url: https://pypi.cnb.cool/orain-test/pypi-test/-/packages/transfer
        # 目标仓库密码
        password: 640b7253e151ee254d2d366b31ab6ea4


配置规则详解

注意事项,使用字符串配置,最外层需要用 () 包起来, 配置之间使用 | 分割

语法具体包版本匹配含义示例
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 之间版本

配置规则示例:

 # 以下配置表示我希望将当前制品库中除了 1.2.1 到 2.0.0 之间所有的 requests 包,版本在 1.5.1 与 1.10.4 之间的 numpy 包,1.9.3 的 django 包迁移至 cnb 中
 SRC_INCLUDE_PACKAGE: (requests|numpy:[1.5.1,1.10.4]|django:{1.8.13,1.9.3})
 SRC_EXCLUDE_PACKAGE: (requests:[1.2.1,2.0.0],django:1.8.13)

txt 包名列表

# SRC_REGISTRY_TYPE == other 时,includePackageVersion .txt文件 支持具体包版匹配规则格式
# 示例:
#单个版本号
monolog/monolog:0.37.0
#多个版本号
monolog/monolog:{0.37.0,0.38.0}


# SRC_REGISTRY_TYPE != other 时,includePackageVersion .txt文件 支持所有匹配规则格式
# 示例:
#配置 包名 迁移包下所有版本。示例:
monolog/monolog
#配置 包名:版本号 迁移具体版本,示例:
monolog/monolog:0.37.0
#配置 包名:版本号批量 迁移具体版本,示例:
monolog/monolog:{0.37.0,0.38.0}
#配置 包名:[开始版本号,结束版本好] 迁移具体版本区间 0.0.1 <= 版本 <= 2.0.0,示例:
monolog/monolog:[0.0.1,2.0.0]


# excludePackageVersion  .txt文件 支持所有匹配规则格式
# 示例:
#配置 包名 迁移包下所有版本。示例:
monolog/monolog
#配置 包名:版本号 迁移具体版本,示例:
monolog/monolog:0.37.0
#配置 包名:版本号批量 迁移具体版本,示例:
monolog/monolog:{0.37.0,0.38.0}
#配置 包名:[开始版本号,结束版本好] 迁移具体版本区间 0.0.1 <= 版本 <= 2.0.0,示例:
monolog/monolog:[0.0.1,2.0.0]