Harbor api 2.0 操作

Harbor api 2.0 操作

   点关注不迷路,欢迎再访!	

精简博客内容,尽量已行业术语来分享。
努力做到对每一位认可自己的读者负责。
帮助别人的同时更是丰富自己的良机。

一.依赖

<dependency>
	<groupId>io.swagger</groupId>
	<artifactId>swagger-java-client</artifactId>
	<version>1.0.0</version>
	<scope>compile</scope>
</dependency>

二.常用操作API

2.1. 获取harbor中所有的项目
 /**
     *
     * @param env 环境
     * @return
     */
 public void getAllProject(String env) {
        ApiClient apiClient = new ApiClient();
        //指定环境
        apiClient.setBasePath(env);
        ArtifactApi apiInstance = new ArtifactApi(apiClient);
        try {
            List<io.swagger.client.model.Project> projects = apiInstance.listProjects();
            logger.info("获取harbor中所有的项目成功");
        } catch (ApiException e) {
            logger.error("连接harbor API异常");
            logger.error("异常:" + e);
        }
    }
2.2. 根据项目id获取该项目下所有的镜像仓库
 /**
     *
     * @param env 环境
     * @param projectId 项目id
     * @return
     */
public void getAllProjectDetail(String projectId, String env) {
        ApiClient apiClient = new ApiClient();
        apiClient.setBasePath(env);
        try {
            RepositoryApi repositoryApi = new RepositoryApi(apiClient);
            ArtifactApi apiInstance = new ArtifactApi(apiClient);
            //查询所有项目
            List<io.swagger.client.model.Project> projects= apiInstance.listProjects();
            //根据projectId过滤项目
            projects = projects.stream().filter(project -> project.getProjectId() == Integer.parseInt(projectId)).collect(Collectors.toList());
            if(projects != null && projects.size() > 0){
                Project project = projects.get(0);
                //分页查询
                List<Repository> repositorys = repositoryApi.listRepositories(project.getName(), null, null, 1L, 50L);
                logger.info("获取该项目下所有的镜像仓库成功");
            }
        } catch (ApiException e) {
            logger.error("连接harbor API异常");
            logger.error("异常:"+e);
        }

    }
2.3. 根据应用(镜像)名称查询harbor私有仓库镜像镜像
 /**
     *
     * @param env 环境
     * @param repoName 应用名
     * @return
     */
    public List<DockerHarborImage> getImagesRepoName(String env, String repoName) {
        List<HarborProject> projects = getAllProject(env);
        List<HarborProjectDetail> projectDetails = new ArrayList<HarborProjectDetail>();
        for (HarborProject project : projects) {
            for(String name:names){
                projectDetails.addAll(getAllProjectDetail(String.valueOf(project.getProjectId()), env));
            }
        }
        List<DockerHarborImage> harborImages = new ArrayList<DockerHarborImage>();
        for (HarborProjectDetail projectDetail : projectDetails) {
            String name = projectDetail.getName();
                if (repoName.equals(name.split(CommonConstant.IMAGE_SIGN_TWO)[1])) {
                    harborImages.addAll(getAllHarborImage(projectDetail.getName(), env));
                }
            
        }
        return harborImages;
    }
 /**
     *
     * @param projectId
     * @param env
     * @author andy
     * @return
     */
    private List<HarborProjectDetail> getAllProjectDetail(String projectId, String env) {
        List<HarborProjectDetail> harborProjectDetail = null;
        ApiClient apiClient = new ApiClient();
        apiClient.setBasePath(env);
        try {
            RepositoryApi repositoryApi = new RepositoryApi(apiClient);
            ArtifactApi apiInstance = new ArtifactApi(apiClient);
            List<io.swagger.client.model.Project> projects= apiInstance.listProjects();
            projects = projects.stream().filter(project -> project.getProjectId() == Integer.parseInt(projectId)).collect(Collectors.toList());
            if(projects != null && projects.size() > 0){
                Project project = projects.get(0);
                List<Repository> repositorys = repositoryApi.listRepositories(project.getName(), null, null, 1L, 200L);
                harborProjectDetail = changeRepository(repositorys);
                logger.info("获取该项目下所有的镜像仓库成功");
            }
        } catch (ApiException e) {
            logger.error("连接harbor API异常");
            logger.error("异常:"+e);
        }

        return harborProjectDetail;
    }


 /**
     *
     * @param projectDetailName 镜像仓库名称
     * @param env 环境
     * @author andy
     * @return
     */
    public List<DockerHarborImage> getAllHarborImage(String projectDetailName, String env) {
        List<DockerHarborImage> imageList = null;
        ApiClient apiClient = new ApiClient();
        apiClient.setBasePath(env);
        try {
            ArtifactApi apiInstance = new ArtifactApi(apiClient);
            if (StringUtils.isNotBlank(projectDetailName) && projectDetailName.contains(CommonConstant.IMAGE_SIGN_ONE)) {
                projectDetailName = projectDetailName.replace(CommonConstant.IMAGE_SIGN_ONE, CommonConstant.IMAGE_SIGN_TWO);
            }
            String projectName = projectDetailName.substring(CommonConstant.NUMBER_ZERO, projectDetailName.indexOf(CommonConstant.IMAGE_SIGN_TWO));
            String repositoryName = projectDetailName.substring(projectDetailName.indexOf(CommonConstant.IMAGE_SIGN_TWO)+CommonConstant.NUMBER_ONE);
            //分页
            List<Artifact> artifactlist = apiInstance.listArtifacts(projectName, repositoryName, null, null, 1L, 50L, null, null, null, null, null);
            //封装镜像信息,略过
            imageList = getImagesArtifact(artifactlist,projectDetailName);
            //过滤tag编号为空的镜像
            imageList = imageList.stream().filter(image -> image.getTag() != null).collect(Collectors.toList());
            logger.info("根据镜像仓库名称获取所有的镜像成功");
        } catch (ApiException e) {
            logger.error("连接harbor API异常");
            logger.error("异常:"+e);
        }

        return imageList;
    }
2.4. 删除镜像
/**
     * 
     *<p>
     *description: 删除 镜像
     *</p>
     *@param projectName 项目名,repositoryName 镜像仓库名
     *@param tag 镜像tag:2.0.0.1
     *@param env 环境
     * @author andy
     */
public Response<Object> deleteImage(String projectName,String repositoryName,String tag, String env) {
        ApiClient apiClient = new ApiClient();
        apiClient.setBasePath(env);
 		//连接harbor认证
        HttpBasicAuth basic = (HttpBasicAuth) apiClient.getAuthentication("basic");
         basic.setUsername(用户名);
         basic.setPassword(密码);
        ArtifactApi apiInstance = new ArtifactApi(apiClient);
        try {
            apiInstance.deleteTag(projectName, repositoryName, tag, tag, null);
        } catch (ApiException e) {
            logger.error("连接harbor API异常");
            logger.error("异常:"+e);
        }
        return new Response(1, "OK");
    }
2.5. 推送镜像到harbor仓库
 public Response<Object> pushImage(String name, String tag) {
      //从对应位置先拉取镜像,然后推送到指定的harbor环境
      docker push
       
      return new Response<Object>(1, "镜像:" + nameTag + "推送成功!");
 }

三.harbor api 2.0 源码分享

链接:https://pan.baidu.com/s/1TPiSy1SB6f42sbqizN9QJA
提取码:81yv

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值