微服务模式:如何按清单从一个镜像仓库拉取镜像到另一个镜像仓库?

已邀请:

1、基于jenkins构建任务,进行批量拉取镜像

首先基于 http://nccloud.yytimes.com/q_132.html 配置单服务的拉取任务。修改jenkins任务的脚本部分如下

case $image_name in 

all)
echo "启动全量拉取..."
for image_name in `cat /data/patch/patch158/product.list | awk -F : '{print $1}' `
do

echo "正在拉取:"$image_name 
echo "版本号:"$image_version

#登录到开发环境的harbor仓库
docker login -uadmin -pHarbor12345 $dev_harbor_address

#拉取镜像
docker pull $dev_harbor_address/c87e2267-1001-4c70-bb2a-ab41f3b81aa3/$image_name:$image_version

#tag为测试环境的镜像

docker tag $dev_harbor_address/c87e2267-1001-4c70-bb2a-ab41f3b81aa3/$image_name:$image_version \
$test_harbor_address/c87e2267-1001-4c70-bb2a-ab41f3b81aa3/$image_name:$image_version.$detail

#登录到测试环境的harbor仓库
docker login -uadmin -pHarbor12345 $test_harbor_address

#将镜像推送到测试环境中

docker push $test_harbor_address/c87e2267-1001-4c70-bb2a-ab41f3b81aa3/$image_name:$image_version.$detail

#生成测试环境的开发中心镜像仓库记录
curl -X POST "http://$test_iuap_address/app-docker-registry/api/registry/push?providerId=c87e2267-1001-4c70-bb2a-ab41f3b81aa3&userName=%E7%AE%A1%E7%90%86%E5%91%98&userId=c87e2267-1001-4c70-bb2a-ab41f3b81aa3&imageName=reg.yyuap.io/c87e2267-1001-4c70-bb2a-ab41f3b81aa3/$image_name&tag=$image_version.$detail"



done
echo "全量拉取完成!"
exit

;;
*)
#登录到开发环境的harbor仓库
docker login -uadmin -pHarbor12345 $dev_harbor_address

#拉取镜像
docker pull $dev_harbor_address/c87e2267-1001-4c70-bb2a-ab41f3b81aa3/$image_name:$image_version

#tag为测试环境的镜像

docker tag $dev_harbor_address/c87e2267-1001-4c70-bb2a-ab41f3b81aa3/$image_name:$image_version \
$test_harbor_address/c87e2267-1001-4c70-bb2a-ab41f3b81aa3/$image_name:$image_version.$detail

#登录到测试环境的harbor仓库
docker login -uadmin -pHarbor12345 $test_harbor_address

#将镜像推送到测试环境中

docker push $test_harbor_address/c87e2267-1001-4c70-bb2a-ab41f3b81aa3/$image_name:$image_version.$detail

#生成测试环境的开发中心镜像仓库记录
curl -X POST "http://$test_iuap_address/app-docker-registry/api/registry/push?providerId=c87e2267-1001-4c70-bb2a-ab41f3b81aa3&userName=%E7%AE%A1%E7%90%86%E5%91%98&userId=c87e2267-1001-4c70-bb2a-ab41f3b81aa3&imageName=reg.yyuap.io/c87e2267-1001-4c70-bb2a-ab41f3b81aa3/$image_name&tag=$image_version.$detail"

;;
esac

释义:主要基于指定文件中的模块名及版本,基于函数循环进行了拉取。具体文件内容参考:

/data/patch/patch158/product.list
am-fa:20200407220834
am-manage:20200407220834
co-cm:20200407220834
co-resa:20200407220834
epm-epm:20200407220834
epm-epa:20200407220834
fi-fip:20200407220834
fi-gl:20200407220834
hr-core:20200407220834
front:20200407220834
scm-scm:20200407220834
ssc-imagivm:20200407220834
ssc-ssc:20200407220834
ftm:20200407220834
tm-tmc:20200407220834
uap-base:20200407220834
uap-fs:20200407220834
uap-search:20200407220834
intelliv:20200407220834
nmc-server:20200407220834
sidecar:20200407220834
websocket:20200407220834
uap-schedule:20200407220834


2、如果是基于SHELL脚本进行,参考脚本如下:

注:本脚本仍取了上面的“/data/patch/patch158/product.list”,可自行修改

#!/bin/bash
ulimit -n 88888
stty erase '^H' 

read -p "请输入源仓库的ip,有端口请输入ip:端口:" dev_harbor_address
read -p "请输入目标仓库的ip,有端口请输入ip:端口:" test_harbor_address
read -p "请输入目标环境的开发者中心ip,有端口请输入ip:端口:" test_iuap_address
read -p "请输入要拉取的镜像名,拉取全部请输入all:" image_name
read -p "请输入要拉取的镜像版本号:" image_version


case $image_name in 

all)
echo "启动全量拉取..."
for image_name in `cat /data/patch/patch158/product.list | awk -F : '{print $1}' `
do

echo "正在拉取:"$image_name 
echo "版本号:"$image_version

#登录到开发环境的harbor仓库
docker login -uadmin -pHarbor12345 $dev_harbor_address

#拉取镜像
docker pull $dev_harbor_address/c87e2267-1001-4c70-bb2a-ab41f3b81aa3/$image_name:$image_version

#tag为测试环境的镜像

docker tag $dev_harbor_address/c87e2267-1001-4c70-bb2a-ab41f3b81aa3/$image_name:$image_version \
$test_harbor_address/c87e2267-1001-4c70-bb2a-ab41f3b81aa3/$image_name:$image_version

#登录到测试环境的harbor仓库
docker login -uadmin -pHarbor12345 $test_harbor_address

#将镜像推送到测试环境中

docker push $test_harbor_address/c87e2267-1001-4c70-bb2a-ab41f3b81aa3/$image_name:$image_version.$detail

#生成测试环境的开发中心镜像仓库记录
curl -X POST "http://$test_iuap_address/app-docker-registry/api/registry/push?providerId=c87e2267-1001-4c70-bb2a-ab41f3b81aa3&userName=%E7%AE%A1%E7%90%86%E5%91%98&userId=c87e2267-1001-4c70-bb2a-ab41f3b81aa3&imageName=reg.yyuap.io/c87e2267-1001-4c70-bb2a-ab41f3b81aa3/$image_name&tag=$image_version"



done
echo "全量拉取完成!"
exit

;;
*)
#登录到开发环境的harbor仓库
docker login -uadmin -pHarbor12345 $dev_harbor_address

#拉取镜像
docker pull $dev_harbor_address/c87e2267-1001-4c70-bb2a-ab41f3b81aa3/$image_name:$image_version

#tag为测试环境的镜像

docker tag $dev_harbor_address/c87e2267-1001-4c70-bb2a-ab41f3b81aa3/$image_name:$image_version \
$test_harbor_address/c87e2267-1001-4c70-bb2a-ab41f3b81aa3/$image_name:$image_version.$detail

#登录到测试环境的harbor仓库
docker login -uadmin -pHarbor12345 $test_harbor_address

#将镜像推送到测试环境中

docker push $test_harbor_address/c87e2267-1001-4c70-bb2a-ab41f3b81aa3/$image_name:$image_version.$detail

#生成测试环境的开发中心镜像仓库记录
curl -X POST "http://$test_iuap_address/app-docker-registry/api/registry/push?providerId=c87e2267-1001-4c70-bb2a-ab41f3b81aa3&userName=%E7%AE%A1%E7%90%86%E5%91%98&userId=c87e2267-1001-4c70-bb2a-ab41f3b81aa3&imageName=reg.yyuap.io/c87e2267-1001-4c70-bb2a-ab41f3b81aa3/$image_name&tag=$image_version.$detail"

;;
esac


要回复问题请先登录注册