如何跨GCP项目迁移npm仓库?已尝试export与gcloud cp失败
GCP Artifact Registry npm仓库跨项目迁移方案
前提准备
- 确认源项目和目标项目均已开启Artifact Registry API
- 确保你拥有源项目的
roles/artifactregistry.reader权限,以及目标项目的roles/artifactregistry.writer权限 - 目标项目中需提前创建好同格式的npm仓库(若未创建,执行以下命令):
gcloud artifacts repositories create TARGET_REPO_NAME \ --location=TARGET_REGION \ --repository-format=npm \ --project=TARGET_PROJECT_ID
迁移步骤
1. 批量下载源仓库的npm包
首先创建本地存储目录,然后遍历源仓库的所有包及版本,下载对应的tgz文件:
# 配置源项目参数 SOURCE_PROJECT="你的源项目ID" SOURCE_REGION="源仓库所在区域" SOURCE_REPO="源仓库名称" LOCAL_DIR="./local-npm-packages" # 创建本地目录 mkdir -p $LOCAL_DIR # 遍历所有包 for package in $(gcloud artifacts packages list --repository=$SOURCE_REPO --location=$SOURCE_REGION --project=$SOURCE_PROJECT --format="value(name)"); do # 遍历当前包的所有版本 for version in $(gcloud artifacts versions list --package=$package --repository=$SOURCE_REPO --location=$SOURCE_REGION --project=$SOURCE_PROJECT --format="value(name)"); do # 下载包文件到本地 gcloud artifacts files download npm/${package}/-/$(basename $package)-${version}.tgz \ --repository=$SOURCE_REPO \ --location=$SOURCE_REGION \ --project=$SOURCE_PROJECT \ --destination=$LOCAL_DIR/ done done
2. 配置目标仓库的npm发布凭据
执行以下命令自动配置npm访问目标仓库的权限:
# 配置目标项目参数 TARGET_PROJECT="你的目标项目ID" TARGET_REGION="目标仓库所在区域" TARGET_REPO="目标仓库名称" # 自动配置npm凭据 gcloud artifacts print-settings npm \ --repository=$TARGET_REPO \ --location=$TARGET_REGION \ --project=$TARGET_PROJECT | bash
3. 批量发布包到目标仓库
进入本地目录,遍历所有下载的tgz文件并发布到目标仓库:
cd $LOCAL_DIR # 遍历本地包文件并发布 for pkg_file in *.tgz; do npm publish $pkg_file \ --registry=https://${TARGET_REGION}-npm.pkg.dev/${TARGET_PROJECT}/${TARGET_REPO}/ done
迁移验证
执行以下命令确认目标仓库的包和版本与源仓库一致:
gcloud artifacts packages list \ --repository=$TARGET_REPO \ --location=$TARGET_REGION \ --project=$TARGET_PROJECT
关于之前方法失败的说明
Artifact Registry的export命令仅支持容器镜像和部分语言包(如Maven、Python)的导出,暂不支持npm仓库;而gcloud cp直接操作存储对象会遗漏npm包的元数据和仓库索引,导致迁移后的包无法正常使用,因此推荐使用上述基于npm publish的迁移方式。
内容的提问来源于stack exchange,提问作者Igorov
相关产品推荐
相关产品推荐

