教你如何获取Harbor的带tag的镜像清单

 更新时间:2022年04月08日 15:02:34   作者:农民工老王  
这篇文章主要介绍了如何利用Java语言实现获取harbor中全部镜像的带tag的清单,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一下

最近的工作中,需要批量处理harbor中的一些镜像,其中关键的一步就是获取harbor中全部镜像的带tag的清单。我在网上找了许久,没有找到可用的。

最后我自己写了一个java方法,成功实现了这一需求。

本文测试的harbor的版本是V2.3.3。

下列代码中,使用了一个叫HttpUtils.sendGet的方法。这是我自己实现的一个HTTP请求工具。其代码参见:Java原生HttpClient使用示例

public void getImages(String harborHost, String cookieStr) throws Exception {
    HttpResponse<String> catalogResp = HttpUtils.sendGet(harborHost + "/v2/_catalog", cookieStr);
    List<String> strings = JSONObject.parseObject(catalogResp.body()).getJSONArray("repositories").toJavaList(String.class);
    HashMap<String, List<String>> result = new HashMap<>();
    for (String image : strings) {
        ArrayList<String> tagList = new ArrayList<>();
        String[] split = image.split("/");
        String repositoryName = split[0];
        String imageName = split[1];
        String urlForImageInfo = harborHost + "/api/v2.0/projects/" + repositoryName + "/repositories/" + imageName;
        HttpResponse<String> infoResp = HttpUtils.sendGet(urlForImageInfo, cookieStr);
        Integer artifactCount = JSONObject.parseObject(infoResp.body()).getInteger("artifact_count");
        int pageNum = artifactCount / 15;
        pageNum = pageNum * 15 >= artifactCount ? pageNum : pageNum + 1;
        for (int i = 1; i <= pageNum; i++) {
            String urlForTags = urlForImageInfo + "/artifacts?with_tag=true&with_scan_overview=true&with_label=true&page_size=15&page=" + i;
            HttpResponse<String> tagsResp = HttpUtils.sendGet(urlForTags, cookieStr);
            JSONArray tagArray = JSONObject.parseArray(tagsResp.body());
            for (int j = 0; j < tagArray.size(); j++) {
                String tagsStr = tagArray.getJSONObject(j).getString("tags");
                if (!StrUtils.isEmpty(tagsStr)) {
                    JSONArray tags = tagArray.getJSONObject(j).getJSONArray("tags");
                    for (int k = 0; k < tags.size(); k++) {
                        tagList.add(tags.getJSONObject(k).getString("name"));
                    }
                }
            }
        }
        result.put(image, tagList);
    }
    for (String key : result.keySet()) {
        for (String t : result.get(key)) {
            System.out.println(key + ":" + t);
        }
    }
}

此方法需要传入两个参数。第一个是:harborHost为harbor的URL的字符串,比如:https://harbor.wja.cn
第二个也是一个字符串,需要手动登录harbor页面,在首页中,按F12,弹出开发工具,然后刷新页面,第一个请求的cookie的值就所需的字符串,如下图所示:

测试结果如下:

到此这篇关于教你如何获取Harbor的带tag的镜像清单的文章就介绍到这了,更多相关获取Harbor镜像清单内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Docker容器中运行flume及启动不输出运行日志问题

    Docker容器中运行flume及启动不输出运行日志问题

    这篇文章主要介绍了 Docker容器中运行flume及启动不输出运行日志问题及解决方法,需要的朋友参考下吧
    2018-03-03
  • 关于如何使用docker部署centos系统测试环境

    关于如何使用docker部署centos系统测试环境

    这篇文章主要介绍了关于如何使用docker部署centos系统测试环境,Docker属于操作系统虚拟化技术,本文图文讲解部署过程,需要的朋友可以参考下
    2023-03-03
  • docker centos7 安装ssh具体步骤

    docker centos7 安装ssh具体步骤

    这篇文章主要介绍了 docker centos7 安装ssh相关资料,这里提供了详细的具体安装步骤,需要的朋友可以参考下
    2016-11-11
  • 使用minikube安装使用单机版K8S方式(docker)

    使用minikube安装使用单机版K8S方式(docker)

    本文介绍了如何在centos7上使用minikube快速搭建单机版k8s,主要步骤包括:下载kubectl和docker,创建新用户,下载和安装minikube,验证安装情况,最后,通过执行minikube和minikubestop启停K8s,或使用minikubedelete彻底删除K8S的数据
    2024-10-10
  • Docker容器的概念及Docker容器是干什么的

    Docker容器的概念及Docker容器是干什么的

    Docker容器是一种轻量级、可移植的虚拟化技术,用于打包、运输和运行应用程序及其所有依赖项,Docker容器使得开发人员能够更轻松地构建、交付和运行应用程序,同时提高了资源利用率和部署的一致性,感兴趣的朋友跟随小编一起看看吧
    2024-02-02
  • 一文讲解如何查看一个docker镜像有哪些版本

    一文讲解如何查看一个docker镜像有哪些版本

    这篇文章主要给大家介绍了关于如何查看一个docker镜像有哪些版本的相关资料,文中通过图文介绍的非常详细,对大家学习或者使用docker具有一定的参考借鉴价值,需要的朋友可以参考下
    2024-04-04
  • 使用Docker compose启动自定义jar包的步骤详解

    使用Docker compose启动自定义jar包的步骤详解

    这篇文章主要介绍了使用Docker compose启动自定义jar包的步骤,首先我们需要编写一个docker-compose.yml文件来定义我们的服务传到我们的云服务器上,本文给大家分享示例代码,感兴趣的朋友一起看看吧
    2024-03-03
  • 通过Dockerfile构建Docker镜像的方法步骤

    通过Dockerfile构建Docker镜像的方法步骤

    这篇文章主要介绍了通过Dockerfile构建Docker镜像的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-02-02
  • Docker+keepalived+nginx实现主从热备的方法示例

    Docker+keepalived+nginx实现主从热备的方法示例

    这篇文章主要介绍了Docker+keepalived+nginx实现主从热备的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-11-11
  • Vue.js中的watch属性详解

    Vue.js中的watch属性详解

    在Vue.js中,watch属性是一种非常重要的属性,它可以监听Vue实例中指定的数据变化,并在数据发生变化时执行相应的操作,本文将对 Vue.js中的watch属性进行详细的介绍,并附上相关的代码示例,需要的朋友可以参考下
    2023-06-06

最新评论