一、脚本

# 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

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐