@cnbcool/cnb-cli 1.0.0 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -37
- package/package.json +26 -6
- package/.cnb.yml +0 -37
- package/DEVELOPMENT.md +0 -345
- package/cag.config.js +0 -57
- package/downloads/1773729361207-dsfgely.png +0 -0
- package/skills/artifact-migrate/README.md +0 -79
- package/skills/artifact-migrate/SKILL.md +0 -674
- package/skills/auto-code/SKILL.md +0 -71
- package/skills/auto-code/hooks/hooks.json +0 -15
- package/skills/cnb-code-import/LICENSE +0 -20
- package/skills/cnb-code-import/README.md +0 -311
- package/skills/cnb-code-import/SKILL.md +0 -368
- package/skills/cnb-code-import/scripts/migrate.sh +0 -371
- package/skills/cnb-skill/SKILL.md +0 -100
- package/skills/code-review/README.md +0 -3
- package/skills/code-review/SKILL.md +0 -131
- package/skills/code-review/hooks/hooks.json +0 -15
- package/skills/diagnose-pr-pipeline/README.md +0 -3
- package/skills/diagnose-pr-pipeline/SKILL.md +0 -88
- package/skills/dialog-ci-log/README.md +0 -16
- package/skills/dialog-ci-log/SKILL.md +0 -41
- package/skills/dialog-ci-log/scrips/get-failed-stage-logs.js +0 -124
- package/skills/pr-diff/README.md +0 -3
- package/skills/pr-diff/SKILL.md +0 -97
- package/skills/pr-summary/README.md +0 -3
- package/skills/pr-summary/SKILL.md +0 -70
- package/skills/tapd-resource-fetcher/README.md +0 -3
- package/skills/tapd-resource-fetcher/SKILL.md +0 -97
- package/skills/text-path-converter/README.md +0 -3
- package/skills/text-path-converter/SKILL.md +0 -30
- package/skills/text-path-converter/scripts/convertLink.js +0 -148
- package/test.js +0 -1
|
@@ -1,674 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: artifact-migrate
|
|
3
|
-
description: CNB 制品批量迁移工具。支持从 CODING、CNB、CodeUp、Nexus、Jfrog、TCR 等平台迁移 Maven、NPM、Docker、NuGet、Composer、PyPI、Conan、Cargo 制品到 CNB 平台。通过 Docker 运行迁移工具,支持全量迁移、正则过滤、指定包版本和断点续传。
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# CNB 制品批量迁移工具 - Skill 文档
|
|
7
|
-
|
|
8
|
-
---
|
|
9
|
-
|
|
10
|
-
## 🔧 环境准备
|
|
11
|
-
|
|
12
|
-
### 依赖工具
|
|
13
|
-
|
|
14
|
-
| 工具 | 版本要求 | 安装方式 | 说明 |
|
|
15
|
-
|------|----------|----------|------|
|
|
16
|
-
| Docker | 19.03+ | [官方文档](https://docs.docker.com/get-docker/) | 用于运行迁移工具容器 |
|
|
17
|
-
| Podman(可选) | 3.0+ | `brew install podman` 或系统包管理器 | Docker 的替代方案 |
|
|
18
|
-
|
|
19
|
-
> **说明**:迁移工具以 Docker 镜像方式分发,镜像地址为 `docker.cnb.cool/cnb/plugins/cnbcool/artifact-migrate:latest`,镜像内已内置所有运行时依赖(Go 编译产物、skopeo、Python3、Conan 等)。
|
|
20
|
-
|
|
21
|
-
### 权限要求
|
|
22
|
-
|
|
23
|
-
- **源制品库**:需要 **读取** 权限(用户名 + 密码/Token);公开仓库可不填用户名密码
|
|
24
|
-
- **目标制品库(CNB)**:需要 **写入** 权限(仅需 `TAR_REGISTRY_PASSWORD`,用户名固定为 `cnb`)
|
|
25
|
-
|
|
26
|
-
---
|
|
27
|
-
|
|
28
|
-
## ⚙️ 参数说明
|
|
29
|
-
|
|
30
|
-
### 核心参数(必填)
|
|
31
|
-
|
|
32
|
-
| 参数名 | 类型 | 必填 | 默认值 | 说明 |
|
|
33
|
-
|--------|------|:----:|--------|------|
|
|
34
|
-
| `ARTIFACT_TYPE` | string | ✅ | - | 制品类型,可选:`maven`、`npm`、`docker`、`nuget`、`composer`、`pypi`、`conan`、`cargo` |
|
|
35
|
-
| `SRC_REGISTRY_TYPE` | string | ✅ | - | 源仓库平台类型,可选:`coding`、`cnb`、`codeup`、`nexus`、`jfrog`、`tcr`、`other` |
|
|
36
|
-
| `SRC_REGISTRY_URL` | string | ✅ | - | 源仓库地址 |
|
|
37
|
-
| `TAR_REGISTRY_URL` | string | ✅ | - | 目标仓库地址(CNB 仓库地址) |
|
|
38
|
-
| `TAR_REGISTRY_PASSWORD` | string | ✅ | - | 目标仓库(CNB)密码/Token |
|
|
39
|
-
|
|
40
|
-
### 源仓库认证参数
|
|
41
|
-
|
|
42
|
-
| 参数名 | 类型 | 必填 | 默认值 | 说明 |
|
|
43
|
-
|--------|------|:----:|--------|------|
|
|
44
|
-
| `SRC_REGISTRY_USERNAME` | string | 条件必填 | - | 源仓库用户名(公开仓库可不填) |
|
|
45
|
-
| `SRC_REGISTRY_PASSWORD` | string | 条件必填 | - | 源仓库密码(公开仓库可不填) |
|
|
46
|
-
|
|
47
|
-
### 过滤与筛选参数
|
|
48
|
-
|
|
49
|
-
| 参数名 | 类型 | 必填 | 默认值 | 说明 |
|
|
50
|
-
|--------|------|:----:|--------|------|
|
|
51
|
-
| `INCLUDE_REGX` | string | ❌ | - | 包含正则(多个用 `,` 分隔),匹配格式为 `包名#版本`;为空则包含所有 |
|
|
52
|
-
| `EXCLUDE_REGX` | string | ❌ | - | 排除正则(多个用 `,` 分隔),匹配格式为 `包名#版本`;为空则不排除 |
|
|
53
|
-
| `PACKAGE_VERSIONS_FILE_NAME` | string | ❌ | - | 包版本配置文件路径(容器内路径),用于迁移少量指定包版本 |
|
|
54
|
-
| `PACKAGE_VERSIONS_EXT` | string | ❌ | - | Maven 额外文件扩展名(多个用 `,` 分隔),仅 Other 源 Maven 使用 |
|
|
55
|
-
|
|
56
|
-
### 高级参数
|
|
57
|
-
|
|
58
|
-
| 参数名 | 类型 | 必填 | 默认值 | 说明 |
|
|
59
|
-
|--------|------|:----:|--------|------|
|
|
60
|
-
| `CONCURRENCY` | uint | ❌ | `5` | 并发数(最大 256) |
|
|
61
|
-
| `LOG_LEVEL` | string | ❌ | `info` | 日志等级,可选:`trace`、`debug`、`info`、`warn`、`error`、`fatal`、`panic` |
|
|
62
|
-
| `SRC_PAGE_SIZE` | int | ❌ | `500` | 源仓库分页大小 |
|
|
63
|
-
| `IS_STRICT_VERSION_ORDER` | bool | ❌ | `false` | 是否按版本排序后再上传(多版本场景) |
|
|
64
|
-
|
|
65
|
-
### 平台专用参数
|
|
66
|
-
|
|
67
|
-
| 参数名 | 类型 | 专用平台 | 说明 |
|
|
68
|
-
|--------|------|----------|------|
|
|
69
|
-
| `SRC_CODING_DISABLE_THIRD_PACKAGE` | bool | CODING | 是否过滤第三方包(**强烈推荐 `true`**) |
|
|
70
|
-
| `SRC_DOCKER_ISTLSVERIFY` | bool | Docker | 源仓库是否使用 HTTPS(HTTPS 时设 `true`) |
|
|
71
|
-
| `TAR_DOCKER_ISTLSVERIFY` | bool | Docker | 目标仓库是否使用 HTTPS(HTTPS 时设 `true`) |
|
|
72
|
-
| `SRC_NEXUS_DOCKER_REPO_URL` | string | Nexus+Docker | Nexus 平台 Docker 仓库实际地址 |
|
|
73
|
-
| `SRC_CODEUP_TOKEN` | string | CodeUp | CodeUp 平台 API 访问令牌 |
|
|
74
|
-
| `SRC_CODEUP_LOGIN_ALIYUNID_TICKET` | string | CodeUp+Maven | CodeUp Maven 文件列表令牌(需单引号包裹) |
|
|
75
|
-
| `SRC_TCR_REGION` | string | TCR | TCR 平台地域编码,如 `ap-shanghai` |
|
|
76
|
-
| `SRC_TCR_SECRET_ID` | string | TCR | TCR 云账号 API 访问令牌 ID |
|
|
77
|
-
| `SRC_TCR_SECRET_KEY` | string | TCR | TCR 云账号 API 访问令牌 Key |
|
|
78
|
-
| `TAR_NPM_API_VERSION` | string | NPM | 目标仓库 NPM API 版本,可选 `v1`、`v2`,默认 `v2` |
|
|
79
|
-
| `SRC_TEMP_DIR` | string | PyPI | PyPI 临时目录 |
|
|
80
|
-
|
|
81
|
-
---
|
|
82
|
-
|
|
83
|
-
## 🚀 使用步骤
|
|
84
|
-
|
|
85
|
-
### Step 1:拉取迁移工具镜像
|
|
86
|
-
|
|
87
|
-
```bash
|
|
88
|
-
docker pull docker.cnb.cool/cnb/plugins/cnbcool/artifact-migrate:latest
|
|
89
|
-
```
|
|
90
|
-
|
|
91
|
-
### Step 2:准备访问凭证
|
|
92
|
-
|
|
93
|
-
1. **源仓库**:获取源制品仓库的地址、用户名、密码(各平台获取方式不同,参考项目文档 `docs/certificate.md`)
|
|
94
|
-
2. **目标仓库(CNB)**:在 CNB 创建制品仓库,获取仓库地址和访问 Token
|
|
95
|
-
|
|
96
|
-
### Step 3:执行迁移
|
|
97
|
-
|
|
98
|
-
#### 模式一:迁移仓库下所有制品
|
|
99
|
-
|
|
100
|
-
```bash
|
|
101
|
-
docker run --rm \
|
|
102
|
-
-e ARTIFACT_TYPE=npm \
|
|
103
|
-
-e SRC_REGISTRY_TYPE=coding \
|
|
104
|
-
-e SRC_REGISTRY_URL="https://example-npm.pkg.coding.net/my-project/my-repo/" \
|
|
105
|
-
-e SRC_REGISTRY_USERNAME="my-username" \
|
|
106
|
-
-e SRC_REGISTRY_PASSWORD=xxx \
|
|
107
|
-
-e SRC_CODING_DISABLE_THIRD_PACKAGE=true \
|
|
108
|
-
-e TAR_REGISTRY_URL="https://npm.cnb.cool/my-project2/my-repo2/-/packages/" \
|
|
109
|
-
-e TAR_REGISTRY_PASSWORD=xxx \
|
|
110
|
-
-u root \
|
|
111
|
-
-v $(pwd)/log:/app/log \
|
|
112
|
-
docker.cnb.cool/cnb/plugins/cnbcool/artifact-migrate:latest
|
|
113
|
-
```
|
|
114
|
-
|
|
115
|
-
#### 模式二:使用正则过滤迁移
|
|
116
|
-
|
|
117
|
-
```bash
|
|
118
|
-
docker run --rm \
|
|
119
|
-
-e ARTIFACT_TYPE=npm \
|
|
120
|
-
-e INCLUDE_REGX="^@myorg,^mypackage" \
|
|
121
|
-
-e EXCLUDE_REGX="^third-party" \
|
|
122
|
-
-e SRC_REGISTRY_TYPE=coding \
|
|
123
|
-
-e SRC_REGISTRY_URL="https://example-npm.pkg.coding.net/my-project/my-repo/" \
|
|
124
|
-
-e SRC_REGISTRY_USERNAME="my-username" \
|
|
125
|
-
-e SRC_REGISTRY_PASSWORD=xxx \
|
|
126
|
-
-e SRC_CODING_DISABLE_THIRD_PACKAGE=true \
|
|
127
|
-
-e TAR_REGISTRY_URL="https://npm.cnb.cool/my-project2/my-repo2/-/packages/" \
|
|
128
|
-
-e TAR_REGISTRY_PASSWORD=xxx \
|
|
129
|
-
-u root \
|
|
130
|
-
-v $(pwd)/log:/app/log \
|
|
131
|
-
docker.cnb.cool/cnb/plugins/cnbcool/artifact-migrate:latest
|
|
132
|
-
```
|
|
133
|
-
|
|
134
|
-
#### 模式三:迁移指定包版本(文件模式)
|
|
135
|
-
|
|
136
|
-
1. 创建本地文件 `package-versions.txt`,格式示例:
|
|
137
|
-
```
|
|
138
|
-
@coding/migrate#1.0.0
|
|
139
|
-
lodash#4.17.21
|
|
140
|
-
lodash
|
|
141
|
-
```
|
|
142
|
-
- `包名#版本`:迁移指定版本
|
|
143
|
-
- `包名`(不带版本):迁移该包所有版本
|
|
144
|
-
|
|
145
|
-
2. 执行迁移命令:
|
|
146
|
-
```bash
|
|
147
|
-
docker run --rm \
|
|
148
|
-
-e ARTIFACT_TYPE=npm \
|
|
149
|
-
-e PACKAGE_VERSIONS_FILE_NAME=/app/config.txt \
|
|
150
|
-
-e SRC_REGISTRY_TYPE=coding \
|
|
151
|
-
-e SRC_REGISTRY_URL="https://example-npm.pkg.coding.net/my-project/my-repo/" \
|
|
152
|
-
-e SRC_REGISTRY_USERNAME="my-username" \
|
|
153
|
-
-e SRC_REGISTRY_PASSWORD=xxx \
|
|
154
|
-
-e SRC_CODING_DISABLE_THIRD_PACKAGE=true \
|
|
155
|
-
-e TAR_REGISTRY_URL="https://npm.cnb.cool/my-project2/my-repo2/-/packages/" \
|
|
156
|
-
-e TAR_REGISTRY_PASSWORD=xxx \
|
|
157
|
-
-u root \
|
|
158
|
-
-v $(pwd)/log:/app/log \
|
|
159
|
-
-v $(pwd)/package-versions.txt:/app/config.txt \
|
|
160
|
-
docker.cnb.cool/cnb/plugins/cnbcool/artifact-migrate:latest
|
|
161
|
-
```
|
|
162
|
-
|
|
163
|
-
### Step 4:查看迁移结果
|
|
164
|
-
|
|
165
|
-
迁移结束后,终端会自动输出统计报告:
|
|
166
|
-
|
|
167
|
-
```
|
|
168
|
-
INFO[0042] ----------------- MigrateRecord Print Start-----------------
|
|
169
|
-
INFO[0042] Migrate success ✅ ✅ ✅ ✅
|
|
170
|
-
INFO[0042] 迁移制品类型: npm
|
|
171
|
-
INFO[0042] 源仓库类型: coding
|
|
172
|
-
INFO[0042] 源仓库地址: https://example-npm.pkg.coding.net/my-project/my-repo/
|
|
173
|
-
INFO[0042] 目标仓库地址: https://npm.cnb.cool/my-project2/my-repo2/-/packages/
|
|
174
|
-
INFO[0042] 开始时间: 2025-01-01T10:00:00+08:00
|
|
175
|
-
INFO[0042] 结束时间: 2025-01-01T10:00:42+08:00
|
|
176
|
-
INFO[0042] 耗时: 42s
|
|
177
|
-
INFO[0042] 总数: 120, 成功数: 118, 存在数: 2, 忽略数: 0, 错误数: 0
|
|
178
|
-
INFO[0042] ----------------- Migrate Print End -----------------
|
|
179
|
-
```
|
|
180
|
-
|
|
181
|
-
---
|
|
182
|
-
|
|
183
|
-
## 📝 完整示例
|
|
184
|
-
|
|
185
|
-
### 示例 1:从 CODING 迁移全量 NPM 制品
|
|
186
|
-
|
|
187
|
-
```bash
|
|
188
|
-
docker run --rm \
|
|
189
|
-
-e ARTIFACT_TYPE=npm \
|
|
190
|
-
-e SRC_REGISTRY_TYPE=coding \
|
|
191
|
-
-e SRC_REGISTRY_URL="https://example-npm.pkg.coding.net/my-project/my-repo/" \
|
|
192
|
-
-e SRC_REGISTRY_USERNAME="my-username" \
|
|
193
|
-
-e SRC_REGISTRY_PASSWORD=xxx \
|
|
194
|
-
-e SRC_CODING_DISABLE_THIRD_PACKAGE=true \
|
|
195
|
-
-e TAR_REGISTRY_URL="https://npm.cnb.cool/my-project2/my-repo2/-/packages/" \
|
|
196
|
-
-e TAR_REGISTRY_PASSWORD=xxx \
|
|
197
|
-
-u root \
|
|
198
|
-
-v $(pwd)/log:/app/log \
|
|
199
|
-
docker.cnb.cool/cnb/plugins/cnbcool/artifact-migrate:latest
|
|
200
|
-
```
|
|
201
|
-
|
|
202
|
-
**预期输出**:
|
|
203
|
-
```
|
|
204
|
-
INFO[0000] Load config from environment variables success
|
|
205
|
-
INFO[0000] migrate start artifactType=npm
|
|
206
|
-
INFO[0042] migrate end artifactType=npm
|
|
207
|
-
INFO[0042] ----------------- MigrateRecord Print Start-----------------
|
|
208
|
-
INFO[0042] Migrate success ✅ ✅ ✅ ✅
|
|
209
|
-
INFO[0042] 迁移制品类型: npm
|
|
210
|
-
INFO[0042] 总数: 50, 成功数: 48, 存在数: 2, 忽略数: 0, 错误数: 0
|
|
211
|
-
INFO[0042] ----------------- Migrate Print End -----------------
|
|
212
|
-
```
|
|
213
|
-
|
|
214
|
-
### 示例 2:从 Nexus 迁移 Maven 制品(正则过滤)
|
|
215
|
-
|
|
216
|
-
```bash
|
|
217
|
-
docker run --rm \
|
|
218
|
-
-e ARTIFACT_TYPE=maven \
|
|
219
|
-
-e INCLUDE_REGX="^com\.myorg" \
|
|
220
|
-
-e EXCLUDE_REGX="^com\.myorg\.test" \
|
|
221
|
-
-e SRC_REGISTRY_TYPE=nexus \
|
|
222
|
-
-e SRC_REGISTRY_URL="https://nexus.example.com:8081/repository/maven-releases/" \
|
|
223
|
-
-e SRC_REGISTRY_USERNAME="admin" \
|
|
224
|
-
-e SRC_REGISTRY_PASSWORD=xxx \
|
|
225
|
-
-e TAR_REGISTRY_URL="https://maven.cnb.cool/my-project/my-repo/-/packages/" \
|
|
226
|
-
-e TAR_REGISTRY_PASSWORD=xxx \
|
|
227
|
-
-u root \
|
|
228
|
-
-v $(pwd)/log:/app/log \
|
|
229
|
-
docker.cnb.cool/cnb/plugins/cnbcool/artifact-migrate:latest
|
|
230
|
-
```
|
|
231
|
-
|
|
232
|
-
**预期输出**:
|
|
233
|
-
```
|
|
234
|
-
INFO[0000] Load config from environment variables success
|
|
235
|
-
INFO[0000] migrate start artifactType=maven
|
|
236
|
-
INFO[0120] migrate end artifactType=maven
|
|
237
|
-
INFO[0120] ----------------- MigrateRecord Print Start-----------------
|
|
238
|
-
INFO[0120] Migrate success ✅ ✅ ✅ ✅
|
|
239
|
-
INFO[0120] 迁移制品类型: maven
|
|
240
|
-
INFO[0120] 包括包名规则: ^com\.myorg
|
|
241
|
-
INFO[0120] 排除包名规则: ^com\.myorg\.test
|
|
242
|
-
INFO[0120] 总数: 200, 成功数: 195, 存在数: 5, 忽略数: 0, 错误数: 0
|
|
243
|
-
INFO[0120] ----------------- Migrate Print End -----------------
|
|
244
|
-
```
|
|
245
|
-
|
|
246
|
-
### 示例 3:从 Jfrog 迁移 Docker 镜像
|
|
247
|
-
|
|
248
|
-
```bash
|
|
249
|
-
docker run --rm \
|
|
250
|
-
-e ARTIFACT_TYPE=docker \
|
|
251
|
-
-e SRC_REGISTRY_TYPE=jfrog \
|
|
252
|
-
-e SRC_REGISTRY_URL="https://jfrog.example.com/artifactory/docker-repo/" \
|
|
253
|
-
-e SRC_REGISTRY_USERNAME="admin" \
|
|
254
|
-
-e SRC_REGISTRY_PASSWORD=xxx \
|
|
255
|
-
-e SRC_DOCKER_ISTLSVERIFY=true \
|
|
256
|
-
-e TAR_REGISTRY_URL="docker.cnb.cool/my-project/my-repo" \
|
|
257
|
-
-e TAR_REGISTRY_PASSWORD=xxx \
|
|
258
|
-
-e TAR_DOCKER_ISTLSVERIFY=true \
|
|
259
|
-
-u root \
|
|
260
|
-
-v $(pwd)/log:/app/log \
|
|
261
|
-
docker.cnb.cool/cnb/plugins/cnbcool/artifact-migrate:latest
|
|
262
|
-
```
|
|
263
|
-
|
|
264
|
-
### 示例 4:断点续传
|
|
265
|
-
|
|
266
|
-
```bash
|
|
267
|
-
# 第一次迁移(中途失败/中断)
|
|
268
|
-
docker run --rm \
|
|
269
|
-
-e ARTIFACT_TYPE=npm \
|
|
270
|
-
-e SRC_REGISTRY_TYPE=coding \
|
|
271
|
-
-e SRC_REGISTRY_URL="https://example-npm.pkg.coding.net/my-project/my-repo/" \
|
|
272
|
-
-e SRC_REGISTRY_USERNAME="my-username" \
|
|
273
|
-
-e SRC_REGISTRY_PASSWORD=xxx \
|
|
274
|
-
-e SRC_CODING_DISABLE_THIRD_PACKAGE=true \
|
|
275
|
-
-e TAR_REGISTRY_URL="https://npm.cnb.cool/my-project2/my-repo2/-/packages/" \
|
|
276
|
-
-e TAR_REGISTRY_PASSWORD=xxx \
|
|
277
|
-
-u root \
|
|
278
|
-
-v $(pwd)/log:/app/log \
|
|
279
|
-
docker.cnb.cool/cnb/plugins/cnbcool/artifact-migrate:latest
|
|
280
|
-
|
|
281
|
-
# 第二次迁移(自动从断点继续,且优先重试上次失败的制品)
|
|
282
|
-
# 使用完全相同的命令即可
|
|
283
|
-
docker run --rm \
|
|
284
|
-
-e ARTIFACT_TYPE=npm \
|
|
285
|
-
-e SRC_REGISTRY_TYPE=coding \
|
|
286
|
-
-e SRC_REGISTRY_URL="https://example-npm.pkg.coding.net/my-project/my-repo/" \
|
|
287
|
-
-e SRC_REGISTRY_USERNAME="my-username" \
|
|
288
|
-
-e SRC_REGISTRY_PASSWORD=xxx \
|
|
289
|
-
-e SRC_CODING_DISABLE_THIRD_PACKAGE=true \
|
|
290
|
-
-e TAR_REGISTRY_URL="https://npm.cnb.cool/my-project2/my-repo2/-/packages/" \
|
|
291
|
-
-e TAR_REGISTRY_PASSWORD=xxx \
|
|
292
|
-
-u root \
|
|
293
|
-
-v $(pwd)/log:/app/log \
|
|
294
|
-
docker.cnb.cool/cnb/plugins/cnbcool/artifact-migrate:latest
|
|
295
|
-
```
|
|
296
|
-
|
|
297
|
-
### 示例 5:在 CNB 云原生构建中使用
|
|
298
|
-
|
|
299
|
-
```yaml
|
|
300
|
-
main:
|
|
301
|
-
push:
|
|
302
|
-
- services:
|
|
303
|
-
- docker
|
|
304
|
-
stages:
|
|
305
|
-
- name: 拉取镜像
|
|
306
|
-
script: |
|
|
307
|
-
docker pull docker.cnb.cool/cnb/plugins/cnbcool/artifact-migrate:latest
|
|
308
|
-
|
|
309
|
-
- name: 开始迁移
|
|
310
|
-
script: |
|
|
311
|
-
mkdir -p /workspace/log
|
|
312
|
-
docker run --rm \
|
|
313
|
-
-e ARTIFACT_TYPE=npm \
|
|
314
|
-
-e SRC_REGISTRY_TYPE=coding \
|
|
315
|
-
-e SRC_REGISTRY_URL="https://example-npm.pkg.coding.net/my-project/my-repo/" \
|
|
316
|
-
-e SRC_REGISTRY_USERNAME="my-username" \
|
|
317
|
-
-e SRC_REGISTRY_PASSWORD=xxx \
|
|
318
|
-
-e SRC_CODING_DISABLE_THIRD_PACKAGE=true \
|
|
319
|
-
-e TAR_REGISTRY_URL="https://npm.cnb.cool/my-project2/my-repo2/-/packages/" \
|
|
320
|
-
-e TAR_REGISTRY_PASSWORD=xxx \
|
|
321
|
-
-e LOG_LEVEL=info \
|
|
322
|
-
-u root \
|
|
323
|
-
-v /workspace/log:/app/log \
|
|
324
|
-
docker.cnb.cool/cnb/plugins/cnbcool/artifact-migrate:latest
|
|
325
|
-
tar czf /workspace/artifact-migrate.tar.gz -C /workspace log
|
|
326
|
-
|
|
327
|
-
- name: 上传迁移日志到commit附件
|
|
328
|
-
image: cnbcool/attachments:latest
|
|
329
|
-
settings:
|
|
330
|
-
commit: ${CNB_COMMIT}
|
|
331
|
-
attachments:
|
|
332
|
-
- "./artifact-migrate.tar.gz"
|
|
333
|
-
```
|
|
334
|
-
|
|
335
|
-
---
|
|
336
|
-
|
|
337
|
-
## 🔄 迁移流程图
|
|
338
|
-
|
|
339
|
-
```
|
|
340
|
-
┌──────────────────────┐
|
|
341
|
-
│ 加载环境变量配置 │
|
|
342
|
-
│ (Config.LoadConfig) │
|
|
343
|
-
└──────────┬───────────┘
|
|
344
|
-
│
|
|
345
|
-
┌──────────▼───────────┐
|
|
346
|
-
│ 初始化迁移管理器 │
|
|
347
|
-
│ (MigrateManager) │
|
|
348
|
-
│ - 解析制品类型 │
|
|
349
|
-
│ - 编译正则表达式 │
|
|
350
|
-
│ - 加载断点续传记录 │
|
|
351
|
-
│ - 初始化 HTTP 客户端 │
|
|
352
|
-
│ - 初始化工作池 │
|
|
353
|
-
└──────────┬───────────┘
|
|
354
|
-
│
|
|
355
|
-
┌───────────────┼───────────────┐
|
|
356
|
-
│ │ │
|
|
357
|
-
┌────────▼────────┐ │ ┌─────────▼─────────┐
|
|
358
|
-
│ 创建 Producer │ │ │ 创建 N 个 Consumer │
|
|
359
|
-
│ (源仓库适配器) │ │ │ (并发消费者) │
|
|
360
|
-
└────────┬────────┘ │ └─────────┬─────────┘
|
|
361
|
-
│ │ │
|
|
362
|
-
└───────┬───────┘───────────────┘
|
|
363
|
-
│
|
|
364
|
-
┌──────────▼───────────┐
|
|
365
|
-
│ 启动迁移 Pipeline │
|
|
366
|
-
│ Producer → Channel → │
|
|
367
|
-
│ → N × Consumer │
|
|
368
|
-
└──────────┬───────────┘
|
|
369
|
-
│
|
|
370
|
-
┌────────────▼────────────┐
|
|
371
|
-
│ Producer 生产流程 │
|
|
372
|
-
│ │
|
|
373
|
-
│ 1. 重试上次失败的制品 │
|
|
374
|
-
│ (FailedTask) │
|
|
375
|
-
│ 2. 从断点分页继续拉取 │
|
|
376
|
-
│ (RegxTask) │
|
|
377
|
-
│ ─── 或 ─── │
|
|
378
|
-
│ 文件模式: 按配置文件拉取 │
|
|
379
|
-
│ (FileTask) │
|
|
380
|
-
└────────────┬────────────┘
|
|
381
|
-
│
|
|
382
|
-
│ chan *MigrateParam
|
|
383
|
-
│
|
|
384
|
-
┌────────────▼────────────┐
|
|
385
|
-
│ Consumer 消费流程 │
|
|
386
|
-
│ │
|
|
387
|
-
│ 1. 从 channel 取任务 │
|
|
388
|
-
│ 2. 从源仓库下载制品 │
|
|
389
|
-
│ 3. 上传至 CNB 目标仓库 │
|
|
390
|
-
│ 4. 返回 MigrateResult │
|
|
391
|
-
│ 5. Record 统一记录结果 │
|
|
392
|
-
└────────────┬────────────┘
|
|
393
|
-
│
|
|
394
|
-
┌────────────▼────────────┐
|
|
395
|
-
│ 迁移结束 & 收尾 │
|
|
396
|
-
│ │
|
|
397
|
-
│ 1. 剩余任务写入失败文件 │
|
|
398
|
-
│ 2. 全部记录刷入日志文件 │
|
|
399
|
-
│ 3. 打印统计报告 │
|
|
400
|
-
│ (总/成功/存在/忽略/错误)│
|
|
401
|
-
└─────────────────────────┘
|
|
402
|
-
```
|
|
403
|
-
|
|
404
|
-
---
|
|
405
|
-
|
|
406
|
-
## 🧩 核心架构与逻辑说明
|
|
407
|
-
|
|
408
|
-
### 架构设计
|
|
409
|
-
|
|
410
|
-
工具采用 **生产者-消费者** 模式:
|
|
411
|
-
|
|
412
|
-
- **Producer**:负责从源仓库拉取制品元数据列表,通过 Channel 发送给 Consumer
|
|
413
|
-
- **Consumer**:并发消费任务,负责下载制品文件并上传至目标仓库
|
|
414
|
-
- **MigrateManager**:核心调度器,管理配置、正则匹配、迁移记录
|
|
415
|
-
- **MigrateRecord**:迁移状态记录器,实现断点续传和结果统计
|
|
416
|
-
|
|
417
|
-
### 三种迁移模式
|
|
418
|
-
|
|
419
|
-
| 模式 | 触发条件 | 说明 |
|
|
420
|
-
|------|----------|------|
|
|
421
|
-
| **全量模式** | 不配置 `INCLUDE_REGX`、`EXCLUDE_REGX`、`PACKAGE_VERSIONS_FILE_NAME` | 迁移源仓库所有制品 |
|
|
422
|
-
| **正则模式** | 配置 `INCLUDE_REGX` 和/或 `EXCLUDE_REGX` | 按正则匹配过滤迁移 |
|
|
423
|
-
| **文件模式** | 配置 `PACKAGE_VERSIONS_FILE_NAME` | 仅迁移配置文件中指定的包版本 |
|
|
424
|
-
|
|
425
|
-
### 关键函数 / 模块
|
|
426
|
-
|
|
427
|
-
| 函数/模块名 | 功能描述 | 输入 | 输出 |
|
|
428
|
-
|-------------|----------|------|------|
|
|
429
|
-
| `config.LoadConfig()` | 从环境变量加载并验证配置 | 环境变量 | `*Config` |
|
|
430
|
-
| `manager.NewMigrateManager()` | 创建迁移管理器(初始化正则、记录、工作池) | `*Config` | `*MigrateManager` |
|
|
431
|
-
| `producer.NewProducer()` | 创建生产者(绑定源仓库适配器) | `*MigrateManager` | `Producer` |
|
|
432
|
-
| `consumer.NewConsumer()` | 按制品类型创建消费者实例 | `*MigrateManager` | `Consumer` |
|
|
433
|
-
| `Producer.Product()` | 生产待迁移任务(断点续传 + 分页拉取 或 文件模式) | `ctx`, `chan` | 通过 Channel 发送 `*MigrateParam` |
|
|
434
|
-
| `Consumer.DoMigrate()` | 消费一个迁移任务(下载 → 上传) | `ctx`, `*MigrateParam` | `*MigrateResult` |
|
|
435
|
-
| `MigrateRecord.RecordMigrateResult()` | 记录迁移结果(成功/失败/已存在/忽略) | `TaskType`, `*MigrateResult` | - |
|
|
436
|
-
| `MigrateManager.Print()` | 打印最终迁移统计报告 | - | 日志输出 |
|
|
437
|
-
| `repository.NewRepository()` | 按源仓库类型创建仓库适配器 | `*MigrateManager` | `Repository` |
|
|
438
|
-
| `Repository.GetArtifactsByPage()` | 分页获取制品列表 | `ctx`, `page` | `*FetchResult`, 页码, 是否最后一页, error |
|
|
439
|
-
| `Repository.GetArtifactsByPackageOrVersion()` | 按包名/版本获取制品列表 | `ctx`, `pkgName`, `versions` | `*FetchResult`, error |
|
|
440
|
-
|
|
441
|
-
### 断点续传机制
|
|
442
|
-
|
|
443
|
-
1. 每次迁移结束(正常或异常),所有状态信息写入 `log/` 目录下的 7 个文件
|
|
444
|
-
2. 下次启动时自动读取这些文件,恢复上次迁移状态
|
|
445
|
-
3. **优先重试上次失败的制品**(`failed-files.txt`),然后从分页断点(`pagination.txt`)继续拉取
|
|
446
|
-
4. 文件模式(`PACKAGE_VERSIONS_FILE_NAME`)不支持断点续传,每次都会清空历史记录
|
|
447
|
-
|
|
448
|
-
### 信号处理
|
|
449
|
-
|
|
450
|
-
工具监听 `SIGINT`(Ctrl+C)和 `SIGTERM` 信号,收到信号后会:
|
|
451
|
-
|
|
452
|
-
1. 取消 context,通知 Producer 和 Consumer 停止
|
|
453
|
-
2. 将 Channel 中未处理的任务写入失败文件
|
|
454
|
-
3. 将迁移记录刷入日志文件
|
|
455
|
-
4. 打印统计报告
|
|
456
|
-
|
|
457
|
-
---
|
|
458
|
-
|
|
459
|
-
## ⚠️ 注意事项
|
|
460
|
-
|
|
461
|
-
1. **强烈建议不迁移第三方包**:CNB 有加速源可直接拉取第三方包,CODING 源请设置 `SRC_CODING_DISABLE_THIRD_PACKAGE=true`,其他平台可通过 `EXCLUDE_REGX` 正则过滤
|
|
462
|
-
2. **Docker 迁移必须关注 TLS 配置**:迁移 Docker 时,如果源/目标仓库使用 HTTPS,必须设置 `SRC_DOCKER_ISTLSVERIFY=true` 和 `TAR_DOCKER_ISTLSVERIFY=true`
|
|
463
|
-
3. **断点续传依赖日志目录**:断点续传功能依赖工作目录下的 `log` 文件夹,请确保 `-v $(pwd)/log:/app/log` 挂载正确,且不要手动删除日志文件
|
|
464
|
-
4. **文件模式不支持断点续传**:使用 `PACKAGE_VERSIONS_FILE_NAME` 时,每次运行都是全量迁移该文件中的包
|
|
465
|
-
5. **云原生构建中不支持断点续传**:在 CNB 云原生构建流水线中运行时,每次构建环境都是全新的,日志可在附件中查看
|
|
466
|
-
6. **Nexus 平台限制**:当仓库下总版本数大于 10,000 条时,只能采用文件模式(`PACKAGE_VERSIONS_FILE_NAME`)迁移
|
|
467
|
-
7. **Other 源仅支持文件模式**:`SRC_REGISTRY_TYPE=other` 只支持通过 `PACKAGE_VERSIONS_FILE_NAME` 指定包版本迁移
|
|
468
|
-
8. **目标仓库用户名固定**:目标仓库用户名统一为 `cnb`(代码中硬编码),仅需配置 `TAR_REGISTRY_PASSWORD`
|
|
469
|
-
9. **并发数计算规则**:消费者数量 = `CONCURRENCY / 2`(至少为 1),默认并发数为 5,最大 256
|
|
470
|
-
|
|
471
|
-
---
|
|
472
|
-
|
|
473
|
-
## ❌ 常见错误与解决方案
|
|
474
|
-
|
|
475
|
-
| 错误信息 | 原因 | 解决方案 |
|
|
476
|
-
|----------|------|----------|
|
|
477
|
-
| `ARTIFACT_TYPE is required` | 未配置制品类型 | 添加 `-e ARTIFACT_TYPE=<type>` |
|
|
478
|
-
| `SRC_REGISTRY_TYPE is required` | 未配置源仓库类型 | 添加 `-e SRC_REGISTRY_TYPE=<type>` |
|
|
479
|
-
| `SRC_REGISTRY_URL is required` | 未配置源仓库地址 | 添加 `-e SRC_REGISTRY_URL=<url>` |
|
|
480
|
-
| `TAR_REGISTRY_URL is required` | 未配置目标仓库地址 | 添加 `-e TAR_REGISTRY_URL=<url>` |
|
|
481
|
-
| `TAR_REGISTRY_PASSWORD is required` | 未配置目标仓库密码 | 添加 `-e TAR_REGISTRY_PASSWORD=<token>` |
|
|
482
|
-
| `The current scope does not support access to this API` | CODING 迁移 Docker 时未配置 TLS | 添加 `-e SRC_DOCKER_ISTLSVERIFY=true` |
|
|
483
|
-
| `artifact type xxx is not supported` | 制品类型不在支持列表中 | 检查 `ARTIFACT_TYPE` 拼写是否正确 |
|
|
484
|
-
| `packageVersionFile must be a .txt file` | 文件模式配置文件不是 .txt 格式 | 确保配置文件以 `.txt` 结尾 |
|
|
485
|
-
| `packageVersionFile is empty` | 配置文件为空或格式不正确 | 检查文件内容,格式为 `包名#版本` 或 `包名` |
|
|
486
|
-
| 迁移 0 个包 | CODING 配置了 `SRC_CODING_DISABLE_THIRD_PACKAGE` 后全为三方包 | 确认是否确实有自有包需要迁移 |
|
|
487
|
-
|
|
488
|
-
---
|
|
489
|
-
|
|
490
|
-
## 📊 输出说明
|
|
491
|
-
|
|
492
|
-
### 迁移结果统计
|
|
493
|
-
|
|
494
|
-
| 输出项 | 说明 |
|
|
495
|
-
|--------|------|
|
|
496
|
-
| `Migrate success ✅` | 总数 = 成功数 + 存在数 + 忽略数(无失败) |
|
|
497
|
-
| `Migrate failed ❌` | 存在迁移失败的制品 |
|
|
498
|
-
| 迁移制品类型 | 当前迁移的制品类型(如 npm、maven) |
|
|
499
|
-
| 包括/排除包名规则 | 本次使用的正则过滤规则 |
|
|
500
|
-
| 源仓库/目标仓库地址 | 迁移的源和目标 |
|
|
501
|
-
| 开始/结束时间、耗时 | 迁移总耗时 |
|
|
502
|
-
| 本次迁移错误列表 | 逐条列出失败的包名和错误信息 |
|
|
503
|
-
| **总数** | 需要迁移的制品版本总数 |
|
|
504
|
-
| **成功数** | 本次成功上传的制品版本数 |
|
|
505
|
-
| **存在数** | 目标仓库已存在的制品版本数(无需重复上传) |
|
|
506
|
-
| **忽略数** | 被正则/规则过滤跳过的制品版本数 |
|
|
507
|
-
| **错误数** | 迁移失败的制品版本数 |
|
|
508
|
-
|
|
509
|
-
### 日志文件
|
|
510
|
-
|
|
511
|
-
所有日志文件存储在 `log/{平台}-{制品类型}-{源仓库}-{目标仓库}/` 目录下:
|
|
512
|
-
|
|
513
|
-
| 文件 | 格式 | 说明 |
|
|
514
|
-
|------|------|------|
|
|
515
|
-
| `versions.txt` | 每行一个 `包名#版本` | 所有需迁移的制品版本列表 |
|
|
516
|
-
| `success-versions.txt` | 每行一个 `包名#版本` | 成功迁移的制品版本 |
|
|
517
|
-
| `exist-versions.txt` | 每行一个 `包名#版本` | 目标仓库已存在的版本 |
|
|
518
|
-
| `ignore-versions.txt` | 每行一个 `包名#版本` | 被忽略的版本 |
|
|
519
|
-
| `failed-versions.txt` | 每行一个 `包名#版本` | 失败的制品版本(断点续传依赖) |
|
|
520
|
-
| `failed-files.txt` | 每行 `包名#版本#URL` | 失败的制品文件详情(断点续传依赖) |
|
|
521
|
-
| `pagination.txt` | JSON | 分页断点信息 `{"latestPage":"...", "isLastPage":false}` |
|
|
522
|
-
|
|
523
|
-
### 迁移输出示例
|
|
524
|
-
|
|
525
|
-
#### 成功场景
|
|
526
|
-
|
|
527
|
-
```log
|
|
528
|
-
INFO ----------------- MigrateRecord Print Start-----------------
|
|
529
|
-
INFO Migrate success ✅ ✅ ✅ ✅
|
|
530
|
-
INFO 迁移制品类型: npm
|
|
531
|
-
INFO 包括包名规则: ^@myorg
|
|
532
|
-
INFO 排除包名规则: ^third-party
|
|
533
|
-
INFO 迁移包版本文件路径:
|
|
534
|
-
INFO 迁移包版本: map[]
|
|
535
|
-
INFO maven专用 文件ext:
|
|
536
|
-
INFO 是否使用严格上传模式: false
|
|
537
|
-
INFO 源仓库类型: coding
|
|
538
|
-
INFO 源仓库地址: https://example-npm.pkg.coding.net/my-project/my-repo/
|
|
539
|
-
INFO coding专用 是否不迁移源仓库第三方包: true
|
|
540
|
-
INFO docker专用 源仓库是否使用https: false
|
|
541
|
-
INFO nexus专用 源仓库docker地址:
|
|
542
|
-
INFO 目标仓库地址: https://npm.cnb.cool/my-project2/my-repo2/-/packages/
|
|
543
|
-
INFO docker专用 目标仓库是否使用https: false
|
|
544
|
-
INFO 开始时间: 2025-01-15T10:00:00+08:00
|
|
545
|
-
INFO 结束时间: 2025-01-15T10:02:30+08:00
|
|
546
|
-
INFO 耗时: 2m30s
|
|
547
|
-
INFO 本次迁移错误列表:
|
|
548
|
-
INFO 总数: 120, 成功数: 115, 存在数: 5, 忽略数: 0, 错误数: 0
|
|
549
|
-
INFO ----------------- Migrate Print End -----------------
|
|
550
|
-
```
|
|
551
|
-
|
|
552
|
-
#### 部分失败场景
|
|
553
|
-
|
|
554
|
-
```log
|
|
555
|
-
INFO ----------------- MigrateRecord Print Start-----------------
|
|
556
|
-
INFO Migrate failed ❌ ❌ ❌ ❌
|
|
557
|
-
INFO 迁移制品类型: maven
|
|
558
|
-
INFO 源仓库类型: nexus
|
|
559
|
-
INFO 源仓库地址: https://nexus.example.com:8081/repository/maven-releases/
|
|
560
|
-
INFO 目标仓库地址: https://maven.cnb.cool/my-project/my-repo/-/packages/
|
|
561
|
-
INFO 开始时间: 2025-01-15T14:00:00+08:00
|
|
562
|
-
INFO 结束时间: 2025-01-15T14:15:42+08:00
|
|
563
|
-
INFO 耗时: 15m42s
|
|
564
|
-
INFO 本次迁移错误列表:
|
|
565
|
-
INFO pkgName: com.example:broken-lib, errorMsg: upload failed: 502 Bad Gateway
|
|
566
|
-
INFO pkgName: com.example:large-artifact, errorMsg: context deadline exceeded
|
|
567
|
-
INFO 总数: 500, 成功数: 490, 存在数: 3, 忽略数: 5, 错误数: 2
|
|
568
|
-
INFO ----------------- Migrate Print End -----------------
|
|
569
|
-
```
|
|
570
|
-
|
|
571
|
-
### 智能体输出总结模板
|
|
572
|
-
|
|
573
|
-
当迁移完成后,智能体应使用以下模板对迁移结果进行结构化总结:
|
|
574
|
-
|
|
575
|
-
```markdown
|
|
576
|
-
## 迁移结果总结
|
|
577
|
-
|
|
578
|
-
**状态**: [成功 ✅ / 部分失败 ⚠️ / 失败 ❌]
|
|
579
|
-
|
|
580
|
-
| 指标 | 数量 |
|
|
581
|
-
|------|------|
|
|
582
|
-
| 总计 | {总数} |
|
|
583
|
-
| 成功 | {成功数} |
|
|
584
|
-
| 已存在 | {存在数} |
|
|
585
|
-
| 忽略 | {忽略数} |
|
|
586
|
-
| 失败 | {错误数} |
|
|
587
|
-
|
|
588
|
-
**耗时**: {耗时}
|
|
589
|
-
**源仓库**: {源仓库类型} - {源仓库地址}
|
|
590
|
-
**目标仓库**: {目标仓库地址}
|
|
591
|
-
|
|
592
|
-
{如有失败项,逐条列出失败原因}
|
|
593
|
-
|
|
594
|
-
{如有失败,建议:重新运行相同命令即可自动断点续传(仅全量/正则模式)}
|
|
595
|
-
```
|
|
596
|
-
|
|
597
|
-
**状态判定规则**:
|
|
598
|
-
|
|
599
|
-
```
|
|
600
|
-
若 总数 == 成功数 + 存在数 + 忽略数 → 成功 ✅
|
|
601
|
-
若 错误数 > 0 且 成功数 > 0 → 部分失败 ⚠️
|
|
602
|
-
若 错误数 == 总数 → 失败 ❌
|
|
603
|
-
```
|
|
604
|
-
|
|
605
|
-
---
|
|
606
|
-
|
|
607
|
-
## 🔗 快速参考
|
|
608
|
-
|
|
609
|
-
### 最小化命令模板
|
|
610
|
-
|
|
611
|
-
```bash
|
|
612
|
-
docker run --rm \
|
|
613
|
-
-e ARTIFACT_TYPE=<制品类型> \
|
|
614
|
-
-e SRC_REGISTRY_TYPE=<源平台> \
|
|
615
|
-
-e SRC_REGISTRY_URL="<源仓库地址>" \
|
|
616
|
-
-e SRC_REGISTRY_USERNAME="<用户名>" \
|
|
617
|
-
-e SRC_REGISTRY_PASSWORD=<密码> \
|
|
618
|
-
-e TAR_REGISTRY_URL="<目标仓库地址>" \
|
|
619
|
-
-e TAR_REGISTRY_PASSWORD=<CNB Token> \
|
|
620
|
-
-u root \
|
|
621
|
-
-v $(pwd)/log:/app/log \
|
|
622
|
-
docker.cnb.cool/cnb/plugins/cnbcool/artifact-migrate:latest
|
|
623
|
-
```
|
|
624
|
-
|
|
625
|
-
### 制品类型 × 目标仓库 URL 格式
|
|
626
|
-
|
|
627
|
-
| 制品 | ARTIFACT_TYPE | 目标仓库 URL 格式 |
|
|
628
|
-
|------|---------------|-------------------|
|
|
629
|
-
| Maven | `maven` | `https://maven.cnb.cool/<project>/<repo>/-/packages/` |
|
|
630
|
-
| NPM | `npm` | `https://npm.cnb.cool/<project>/<repo>/-/packages/` |
|
|
631
|
-
| Docker | `docker` | `docker.cnb.cool/<project>/<repo>` |
|
|
632
|
-
| NuGet | `nuget` | `https://nuget.cnb.cool/<project>/<repo>/-/packages/` |
|
|
633
|
-
| Composer | `composer` | `https://composer.cnb.cool/<project>/<repo>/-/packages/` |
|
|
634
|
-
| PyPI | `pypi` | `https://pypi.cnb.cool/<project>/<repo>/simple` |
|
|
635
|
-
| Conan | `conan` | `https://conan.cnb.cool/<project>/<repo>/-/packages/` |
|
|
636
|
-
| Cargo | `cargo` | `https://cargo.cnb.cool/<project>/<repo>/-/packages/` |
|
|
637
|
-
|
|
638
|
-
### 源平台 × 额外参数速查
|
|
639
|
-
|
|
640
|
-
| 平台 | SRC_REGISTRY_TYPE | 额外必填参数 |
|
|
641
|
-
|------|-------------------|--------------|
|
|
642
|
-
| CODING | `coding` | `SRC_CODING_DISABLE_THIRD_PACKAGE=true`(推荐) |
|
|
643
|
-
| CNB | `cnb` | - |
|
|
644
|
-
| CodeUp | `codeup` | `SRC_CODEUP_TOKEN` |
|
|
645
|
-
| Nexus | `nexus` | Docker 额外需要 `SRC_NEXUS_DOCKER_REPO_URL` |
|
|
646
|
-
| Jfrog | `jfrog` | - |
|
|
647
|
-
| TCR | `tcr` | `SRC_TCR_REGION` + `SRC_TCR_SECRET_ID` + `SRC_TCR_SECRET_KEY` |
|
|
648
|
-
| Other | `other` | 必须配合 `PACKAGE_VERSIONS_FILE_NAME` 使用 |
|
|
649
|
-
|
|
650
|
-
### 常用正则示例
|
|
651
|
-
|
|
652
|
-
```bash
|
|
653
|
-
# 只迁移特定前缀的包
|
|
654
|
-
-e INCLUDE_REGX="^@myorg"
|
|
655
|
-
|
|
656
|
-
# 排除第三方包
|
|
657
|
-
-e EXCLUDE_REGX="^third-party"
|
|
658
|
-
|
|
659
|
-
# 只迁移特定包的特定版本范围
|
|
660
|
-
-e INCLUDE_REGX="^myapp#[1-7].*$"
|
|
661
|
-
|
|
662
|
-
# 组合多个规则(逗号分隔)
|
|
663
|
-
-e INCLUDE_REGX="^@myorg,^mypackage"
|
|
664
|
-
-e EXCLUDE_REGX="^@myorg/test,^@myorg/dev"
|
|
665
|
-
```
|
|
666
|
-
|
|
667
|
-
---
|
|
668
|
-
|
|
669
|
-
## 🔗 相关资源
|
|
670
|
-
|
|
671
|
-
- **镜像地址**:`docker.cnb.cool/cnb/plugins/cnbcool/artifact-migrate:latest`
|
|
672
|
-
- **快速开始**:`docs/usage.md`
|
|
673
|
-
- **参数说明**:`docs/parameters.md`
|
|
674
|
-
- **访问凭证获取**:`docs/certificate.md`
|