shell脚本获取harbor仓库特定项目所有镜像
·
一、脚本
# cat harbor-image-listk-v2.sh
#!/bin/bash
Harbor_Address=192.168.110.30 #Harbor主机地址
Harbor_User=admin #登录Harbor的用户
Harbor_Passwd=Harbor12345 #登录Harbor的用户密码
Images_File=harbor-images-`date '+%Y-%m-%d'`.txt # 镜像清单文件
Tar_File=/tmp/Harbor-backup #镜像tar包存放路径
if [ -d $Tar_File ];then
rm -rf $Tar_File
mkdir $Tar_File/jiaoda -p
else
mkdir $Tar_File/jiaoda -p
fi
set -x
# 获取Harbor中所有的项目(Projects)
Project_List=$(curl -u admin:Harbor12345 -H "Content-Type: application/json" -X GET http://192.168.110.30/api/v2.0/projects -k | python -m json.tool | grep name | awk '/"name": /' | awk -F '"' '{print $4}')
for Project in $Project_List;do
# 循环获取项目下所有的镜像
Image_Names=$(curl -u admin:Harbor12345 -H "Content-Type: application/json" -X GET http://192.168.110.30/api/v2.0/projects/$Project/repositories?page_size=100 -k | python -m json.tool | grep name | awk '/"name": /' | awk -F '"' '{print $4}')
for Image in $Image_Names;do
if [ $Image == jiaoda/rabbitmq ]
then
continue
elif [ $Image == jiaoda/os-shell ]
then
continue
elif [ $Image == jiaoda/nginx ]
then
continue
elif [ $Image == jiaoda/rocketmq ]
then
continue
elif [ $Image == jiaoda/python3.8 ]
then
continue
elif [ $Image == jiaoda/python3.8-requests ]
then
continue
elif [ $Image == jiaoda/centos7 ]
then
continue
elif [ $Image == jiaoda/mqtt ]
then
continue
elif [ $Image == jiaoda/jdk17 ]
then
continue
elif [ $Image == jiaoda/admin-ui ]
then
continue
elif [ $Image == jiaoda/test ]
then
continue
elif [ $Image == jiaoda/jdk ]
then
continue
elif [ $Image == jiaoda/vue ]
then
continue
else
# 循环获取镜像的版本(tag)
Image_Tags=$(curl -u admin:Harbor12345 -H "Content-Type: application/json" -X GET http://192.168.110.30/v2/$Image/tags/list?page_size=100 -k | awk -F '"]}' '{print $1}'| awk -F '"' '{print $NF}')
# 格式化输出镜像信息
echo "$Harbor_Address/$Image:$Image_Tags" >> images-`date '+%Y-%m-%d'`.txt
docker pull $Harbor_Address/$Image:$Image_Tags
docker tag $Harbor_Address/$Image:$Image_Tags harbor.test.com/$Image:$Image_Tags
docker rmi $Harbor_Address/$Image:$Image_Tags
docker save -o $Tar_File/$Image$Image_Tags.tar harbor.test.com/$Image:$Image_Tags
docker rmi harbor.test.com/$Image:$Image_Tags
fi
done
done
二、效果

三、改进后的脚本
# cat images.sh
# cat harbor-image-listk-v2.sh
#!/bin/bash
Harbor_Address=192.168.110.30 #Harbor主机地址
Harbor_User=admin #登录Harbor的用户
Harbor_Passwd=Harbor12345 #登录Harbor的用户密码
Images_File=harbor-images-`date '+%Y-%m-%d'`.txt # 镜像清单文件
Tar_File=/tmp/Harbor-backup #镜像tar包存放路径
if [ -d $Tar_File ];then
rm -rf $Tar_File
mkdir $Tar_File/jiaoda -p
else
mkdir $Tar_File/jiaoda -p
fi
set -x
# 获取Harbor中所有的项目(Projects)
Project_List=$(curl -u admin:Harbor12345 -H "Content-Type: application/json" -X GET http://192.168.110.30/api/v2.0/projects -k | python -m json.tool | grep name | awk '/"name": /' | awk -F '"' '{print $4}')
for Project in $Project_List;do
# 循环获取项目下所有的镜像
Image_Names=$(curl -u admin:Harbor12345 -H "Content-Type: application/json" -X GET http://192.168.110.30/api/v2.0/projects/$Project/repositories?page_size=100 -k | python -m json.tool | grep name | awk '/"name": /' | awk -F '"' '{print $4}'|awk -F "/" '{print $NF}')
for Image in $Image_Names;do
if [ $Image == rabbitmq ]
then
continue
elif [ $Image == os-shell ]
then
continue
elif [ $Image == nginx ]
then
continue
elif [ $Image == rocketmq ]
then
continue
elif [ $Image == python3.8 ]
then
continue
elif [ $Image == python3.8-requests ]
then
continue
elif [ $Image == centos7 ]
then
continue
elif [ $Image == mqtt ]
then
continue
elif [ $Image == jdk17 ]
then
continue
elif [ $Image == admin-ui ]
then
continue
elif [ $Image == test ]
then
continue
elif [ $Image == jdk ]
then
continue
elif [ $Image == vue ]
then
continue
else
# 循环获取镜像的版本(tag)
Image_Tages=$(curl -s -k -u "admin:Harbor12345" -X GET -H "Content-Type: application/json" "http://192.168.110.30/api/v2.0/projects/$Project/repositories/$Image/artifacts"|jq -r '.[]| .tags[]?.name as $tag|"'$Image':\($tag)"'|head -n 1|awk -F ":" '{print $NF}')
# 格式化输出镜像信息
echo "$Harbor_Address/$Project/$Image:$Image_Tages" >> images-`date '+%Y-%m-%d'`.txt
docker pull $Harbor_Address/$Project/$Image:$Image_Tages
docker tag $Harbor_Address/$Project/$Image:$Image_Tages harbor.test.com/$Project/$Image:$Image_Tages
docker rmi $Harbor_Address/$Project/$Image:$Image_Tages
docker save -o $Tar_File/$Project/$Image$Image_Tages.tar harbor.test.com/$Project/$Image:$Image_Tages
docker rmi harbor.test.com/$Project/$Image:$Image_Tages
fi
done
done
需要安装jq命令。
jq下载地址:
## 下载地址
# https://jqlang.github.io/jq/download/
# mv jq-linux-amd64 jq
# chmod 755 /usr/bin/jq
四、push images 到harbor仓库
# cat daoru.sh
#!/bin/bash
#app_version="/opt/softs/jiaoda"
app_version="/tmp/test"
cd $app_version
for i in `ls`
do
#echo $i
image=`docker load < $app_version/$i | grep -E "Loaded image" | awk -F "/" '{print $NF}'`
#version=`echo $image| awk -F ":" '{print $NF}'`
#echo $image
#echo $version
app_images=harbor.test.com/jiaoda/$image
echo $app_images
docker push $app_images
done
更多推荐
所有评论(0)