清理harbor镜像

#!/bin/bash
set -e
HARBOR_URL=harbor.k8s-qa.eslink.net.cn
HARBOR_PASSWD=Harbor12345
OLD_VERSION_NUM=5
test_flag=0
function get_repos_list(){#repos_list:返回值为js格式,可以看到每一个仓库的portid等信息repos_list=$(curl -s -k -u admin:${HARBOR_PASSWD} http://${HARBOR_URL}/api/projects?page=1&page_size=50)mkdir -p $PWD/reposListecho "${repos_list}" | jq '.[]' | jq -r '.project_id' > $PWD/reposList/reposList.txt#把第一个命令作为第二个传入给下一个,获取 到有多少个镜像项目 1
}function get_images_list(){mkdir -p $PWD/imagesListfor repo in $(cat $PWD/reposList/reposList.txt);do#images_list:返回的是项目镜像里面的信息images_list=$(curl -s -k -u admin:${HARBOR_PASSWD} http://${HARBOR_URL}/api/repositories?project_id=${repo})echo "${images_list}" | jq '.[]' | jq -r '.name' > $PWD/imagesList/${repo}.txt#获取  每个项目下有多少个镜像 rancher/istio/examples-bookinfo-ratings-v1done
}function delete_images(){#=====初始化====#rm -fr delete_images_tagmkdir -p delete_images_flagmkdir -p delete_images_taglen=0num=0num_delete_p_row=0num_p_row=0num_all_row=0images_name_flag=$1all_images_tag=() test_flag=$[$test_flag+1]echo -e "\n \n第$test_flag镜像 ========== 执行镜像:  $images_name_flag =============="echo "第$test_flag镜像 ========== 执行镜像:  $images_name_flag =============="echo "第$test_flag镜像 ========== 执行镜像:  $images_name_flag =============="  #=====初始化====##读取harbor信息
#信息输出到 delete_images_flag/images-htmlinfo.txt上   htmlinfo=$(curl -s -k -u admin:${HARBOR_PASSWD} http://${HARBOR_URL}/api/repositories/$images_name_flag/tags)echo "${htmlinfo}" > $PWD/delete_images_flag/images-htmlinfo.txt#打印镜像信息,tag,统计总行数num_all_row
#将tag打印到 delete_images_tag/no_arrange_tag_time.txt
#统计总行数num_all_row 大于设置值就不需要清理tag=$(echo "${htmlinfo}"  |jq '.[]' | jq -r '.name') echo "${tag}" > $PWD/delete_images_tag/no_arrange_tag_time.txtnum_all_row=$( sed -n '$=' $PWD/delete_images_tag/no_arrange_tag_time.txt)echo "=====tag总行数 num_all_row=$num_all_row======="if [[ "${num_all_row}" -lt "${OLD_VERSION_NUM}" ]]; thenecho "$images_name_flag tag总行数小于设置值,不需要清理!!!"returnfi#打印的镜像排序,p-的不参与尽量,p-总行数num_delete_p_row
#将整理的 tag输出到  delete_images_tag/tag_time.txt,sort -n -k2 delete_images_tag/no_arrange_tag_time.txt |sed '/p-/d'  >   delete_images_tag/tag_time.txtecho "=====================检测是否能执行================="
echo "=====================检测是否能执行================="
echo "=====================检测是否能执行================="
echo "=====================检测是否能执行================="
#检测tag_time.txt一共多少行,num_delete_p_row,减去保留行数,还多少
#如果小于0,则不需要删除num_delete_p_row=$( sed -n '$=' $PWD/delete_images_tag/tag_time.txt) echo "=============$images_name_flag            num_delete_p_row=$num_delete_p_row          ==============="num=$[$num_delete_p_row - $OLD_VERSION_NUM]echo "=============$images_name_flag            num=$num          ==============="if [[ "${num}" -le "0" ]]; then   #判断是否大于 0echo "$images_name_flag has no need of cleanup!!!"returnfi#读取tag_time.txt数据,将数据存放在flag_i_row数组上
#数据存在在数组上,等待删除flag_i_row=0for i_row_tag in $(cat $PWD/delete_images_tag/tag_time.txt); doflag_i_row=$[$flag_i_row+1]all_images_tag[flag_i_row]="${i_row_tag}"donelen=${#all_images_tag[@]}num=$[$len-$OLD_VERSION_NUM]echo  "*******   总镜像数量len=$len   需要删除镜像数量 num=$num   *******"echo -e "\n\n" >> $PWD/delete_images_tag.txtfor index in $(seq 1 ${num}); do# tag=$(echo "${htmlinfo}" | jq ".[${index}]" | jq -r '.name')tag=${all_images_tag[index]}    echo "===需要删除的镜像 images=$images_name_flag   tag=${all_images_tag[index]}"echo "$images_name_flag:${all_images_tag[index]}" >> $PWD/delete_images_tag.txt#echo "images=$1 ************************** tag= ${tag}"  curl -s -k -u admin:${HARBOR_PASSWD} -X DELETE http://${HARBOR_URL}/api/repositories/$1/tags/${tag}done# if [[ test_flag -eq 100 ]]; then#   #statements#   exit 0# fi }function clean_registry(){#image_name:goharbor/registry-photon:v2.6.2-v1.7.5image_name=$(docker ps | grep registry | grep photon | awk -F " " '{print $2}')echo "===========image_name===================="echo ${image_name}export gcdockername=`date +'gcdocker-%Y%m%d%H%M'`docker run -it --name $gcdockername --rm --volumes-from registry ${image_name} garbage-collect  /etc/registry/config.yml
}function entrance(){serverip=`ip addr|grep inet|grep 192.168|grep -v inet6|awk '{print $2}'|cut -d/ -f1`#获取到serverip 是 ip:192.16.200.17# echo "${serverip}" > $PWD/test_serverip/images_serverip.txt##检测输入url是否与服务器的url相等##if [[ "$serverip" != "${HARBOR_URL}" ]]; then#  echo "harbor is not running in the machine!!!"#  exit 1  #fi# get_repos_list# 获取到harbor上有几个项目#返回值 reposList.txt--》 12345678get_repos_list#get_images_list#获取到项目里面的镜像#返回值  rancher/istio/examples-bookinfo-ratings-v1get_images_list#for循环
#从项目1到项目7,检测每一个项目地下的镜像,例如for(i=0;i<8;i++){#                                          for(j=0;j<镜像数量;j++) }
#rm -fr delete_images_tag.txtfor repo in $(cat $PWD/reposList/reposList.txt);dofor images in $(cat $PWD/imagesList/${repo}.txt); dodelete_images ${images}donedoneclean_registry
}
entrance

harbor镜像清理脚本相关推荐

  1. harbor镜像清理:使用registry:2.6.2-photon garbage-collect

    试运行: docker run -it --name gc --rm --volumes-from registry 192.168.101.123:1603/lego/vmware/registry ...

  2. centos卸载harbor_【Harbor】Harbor镜像仓库的安装与历史版本镜像的清理

    CentOS7.x上用harbor安装docker镜像仓库 Harbor私有仓库中如何彻底删除镜像释放存储空间? https://blog.51cto.com/10321203/2096294 通过A ...

  3. Harbor中镜像清理

    Harbor中镜像清理 背景 项目的每日构建中,由于微服务比较多,每天会产生比较多的镜像,导致Harbor服务器很快被占满.所以要定期去清理不需要的镜像来释放存储空间. 使用的Harbor版本是2.5 ...

  4. 一:部署harbor镜像仓库

    Docker容器应用的开发和运行离不开可靠的镜像管理,虽然Docker官方也提供了公共的镜像仓库,但是从安全和效率等方面考虑,部署我们私有环境内的Registry 也是非常必要的.之前介绍了Docke ...

  5. docker部署harbor镜像仓库

    Docker私有仓库Harbor介绍和部署记录 Docker容器应用的开发和运行离不开可靠的镜像管理,虽然Docker官方也提供了公共的镜像仓库,但是从安全和效率等方面考虑,部署我们私有环境内的Reg ...

  6. 在Kubernetes集群上部署高可用Harbor镜像仓库

    这里主要介绍使用kubectl部署Harbor镜像仓库到Kubernetes集群中. 使用Helm部署,参考: https://my.oschina.net/u/2306127/blog/181969 ...

  7. 5. harbor镜像私服

    操作节点:node200.hzw.com 172.10.10.200 harbor镜像私服 下载harbor包 从github上获取:https://github.com/goharbor/harbo ...

  8. podman加速配置、harbor镜像仓库部署

    podman镜像加速配置 镜像加速可以使用阿里云.清华大学.网易等多个镜像加速,这里我们使用阿里云的镜像加速. 前提需要你先登录,才可以获取你的镜像加速的地址 阿里云镜像加速 // 修改配置文件 ce ...

  9. k8s和harbor的集成_在Kubernetes集群上部署高可用Harbor镜像仓库

    在Kubernetes集群上部署高可用Harbor镜像仓库 一.Kubernetes上的高可用Harbor方案 首先,我可以肯定给出一个回答:Harbor支持在Kubernetes部署.只不过Harb ...

最新文章

  1. java xftp_IDEA使用Xshell利用Xftp部署javaweb项目
  2. 十种工具审核网络安全
  3. c语言直接插入排序步骤,经典排序之直接插入排序(C语言)
  4. nodejs(1)---mongodb
  5. visual studio code 修改工具栏风格
  6. HDU - 5394 Trie in Tina Town(回文自动机+字典树)
  7. VC维与DNN的Boundary
  8. 区块链开发公司谈区块链与大数据的关系
  9. linux下c 编译脚本,Linux下编译C语言与makefile脚本语言
  10. Qt 程序获取程序所在路径、用户目录路径、临时文件夹等特殊路径的方法
  11. OJ1000: A+B Problem
  12. Python基础(使用print()函数输出格式化字符串)
  13. 业务用例模型涉及的主要概念
  14. 关于Symantec企业级防病毒软件的版本历史
  15. 质量管理体系和行业标准
  16. 迅盘从入门到精通 彻底告别WIN7关机烦恼 T400亲测
  17. 【office 2007~office 2019】Excel日期选择控件插件安装
  18. Python —对象的浅拷贝和深拷贝
  19. 初学者在VMware上搭建自己的CentOS8
  20. 在anaconda中安装tensorflow

热门文章

  1. Python使用OpenCV拼接图片
  2. ios放大镜效果始终不能去掉
  3. 汇编-输入8位二进制串并转换为16进制数显示到屏幕(利用8421转换)
  4. 高并发情况下解决单用户超领优惠券问题
  5. cad转jpg怎样才能非常清晰?
  6. 论文阅读:MAVL: Multiresolution Analysis of Voice Localization
  7. nft数字藏品如何卖出去(浅谈数字藏品的合规交易流程
  8. 【兴趣书签】近视眼从800度降到100度是怎样的体验
  9. JS无形装逼,最为致命
  10. 【Appium】如何配置真机连接及定位元素