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]