Artifactory清理二进制文件丢失的制品

一、摘要

        当制品上传到 Artifactory 时,Artifactory 会在数据库中记录制品的相关元数据信息,包括文件路径、大小、校验和(如 MD5、SHA1)、上传时间、索引、依赖等。实际的制品二进制文件会存储在指定的存储后端,具体的存储位置可以配置artifactory的配置文件binarystore.xml来更改。如果二进制文件被意外删除或丢失的话,将无法在Artifactory使用和下载这些制品。而我们只能重新上传此制品文件或者删除掉Artifactory上的制品信息,今天我们讲如何删除这些二进制文件丢失的制品。

二、先查询出二进制文件丢失的制品

1、我们需要在下方Github链接中把此脚本下载下来,它可以查询出Artifactory中二进制文件丢失的制品:

https://github.com/jfrog/artifactory-scripts/blob/master/filestoreIntegrity/filestoreIntegrity.py

2、安装脚本运行需要的python3环境

yum -y install python3

3、授予权限

chmod +x filestoreIntegrity.py

4、运行此脚本

./filestoreIntegrity.py http(s)://{artifactory_url}/artifactory -u {user} -o output.txt

图片

5、运行完成后会在我们当前目录下多一个output.txt文件此文件里面的内容便是我们二进制文件丢失的制品信息。

图片

三、删除指定的制品

1、我们需要写一个脚本用来更快捷的删除制品,第一步我们要创建脚本文件。

touch delartifact.sh

2、编写脚本内容,此脚本可以循环遍历output.txt文件的制品信息来进行逐一删除。

#!/bin/bash

# Artifactory的基本URL
BASE_URL="$1"

#判断是否输入Url
if [ -z "$1" ]; then
    echo "错误: 必须提供 Artifactory 的 URL。"
    echo "用法: $0 <Artifactory URL>"
    exit 1
fi

# Artifactory的用户名和密码
read -p "请输入用户名: " USERNAME

read -s -p "请输入密码: " PASSWORD

#换行,防止判断输出和密码在同一行
echo

#判断用户名,密码和Url是否正确
CODE=$(curl -u "${USERNAME}:${PASSWORD}" "${BASE_URL}/artifactory/api/system/ping" -s -o /dev/null -w "%{http_code}")
if [ "$CODE" -ne 200 ];then
    echo "请检查用户名 密码 Url 是否正确"
    exit 1
fi

# 从output.txt文件中读取制品列表
ARTIFACTS=$(cat ./output.txt | cut -f2 -d']' | head -n -1)

# 循环遍历制品列表,发送DELETE请求删除每个制品
for artifact in ${ARTIFACTS[@]}; do
    url="${BASE_URL}/artifactory/${artifact}"
    response=$(curl -X DELETE -u "${USERNAME}:${PASSWORD}" "${url}" -s -o /dev/null -w "%{http_code}")
    if [[ $response -eq 204 ]]; then
        echo "Deleted artifact: ${artifact}"
    else
        echo "Failed to delete artifact: ${artifact}"
    fi
done

3、授予权限

chmod +x delartifact.sh

4、运行删除制品

sh delartifact.sh http(s)://{artifactory_url}

图片

5、删除完制品后,在我们存储库中可能会产生空目录,比如说maven-local/javax/annotation/javax.annotation-api/1.3.2/javax.annotation-api-1.3.2.jar的jar包被清理而且无其他文件,那么此目录将没有作用,7版本的artifactory会自动清理这些空目录,而6版本的则需要我们去安装个插件来统一清理。

四、清理空目录(7版本的artifactory会自动清理)

1、我们需要在下方Github链接中把此插件下载下来,它可以清理存储库中的空目录:

https://github.com/jfrog/artifactory-user-plugins/blob/master/cleanup/deleteEmptyDirs/deleteEmptyDirs.groovy

2、将此插件放到$ARTIFACT_HOME/var/etc/plugins目录下

3、重新加载插件

curl -X POST -u {admin}:{password} http(s)://{artifactory_url}/artifactory/api/plugins/reload

图片

4、下面是插件运行方式,需要指定存储库或者路径。

curl -X POST -v -u {admin}:{password} "http(s)://{artifactory_url}/artifactory/api/plugins/execute/deleteEmptyDirsPlugin?params=paths={repo},{path}"

图片

5、如果要清理所有空目录则要先获取所有存储库的信息,并整理到一个文件中,用脚本来进行统一清理。

curl -X POST -u {admin}:{password} http(s)://{artifactory_url}/artifactory/api/repositorie > repo.txt

图片

6、创建并编写脚本使其逐一清理所有存储库

touch delfolder.sh
#!/bin/bash

# Artifactory的基本URL
BASE_URL="$1"

#判断是否输入Url
if [ -z "$1" ]; then
    echo "错误: 必须提供 Artifactory 的 URL。"
    echo "用法: $0 <Artifactory URL>"
    exit 1
fi

# Artifactory的用户名和密码
read -p "请输入用户名: " USERNAME

read -s -p "请输入密码: " PASSWORD

#换行,防止下面判断输出和密码在同一行
echo

#判断用户名,密码和Url是否正确
CODE=$(curl -u "${USERNAME}:${PASSWORD}" "${BASE_URL}/artifactory/api/system/ping" -s -o /dev/null -w "%{http_code}")
if [ "$CODE" -ne 200 ];then
    echo "请检查用户名 密码 Url 是否正确"
    exit 1
fi

# 读取文件并逐行处理
for repo in $(cat repo.txt | grep key | cut -f4 -d'"'); do
  echo "正在清理存储库: $repo"
  response=$(curl -X POST -u $USERNAME:$PASSWORD "${BASE_URL}/artifactory/api/plugins/execute/deleteEmptyDirsPlugin?params=paths=$repo" -s -o /dev/null -w "%{http_code}")
  if [ $response -eq 200 ]; then
    echo "Successfully processed $repo"
  else
    echo "Failed to process $repo: HTTP status $response"
  fi
done

7、授予权限

chmod +x delfolder.sh

8、运行脚本

sh delfolder.sh http(s):{artifactory_url}

图片

9、清空垃圾桶

curl -u {admin}:{password} -X POST http://{artifactory_url}/artifactory/api/trash/empty

图片

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/664602.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【NumPy】掌握NumPy的divide函数:执行高效的数组除法操作

&#x1f9d1; 博主简介&#xff1a;阿里巴巴嵌入式技术专家&#xff0c;深耕嵌入式人工智能领域&#xff0c;具备多年的嵌入式硬件产品研发管理经验。 &#x1f4d2; 博客介绍&#xff1a;分享嵌入式开发领域的相关知识、经验、思考和感悟&#xff0c;欢迎关注。提供嵌入式方向…

2年go蓝炎科技、爱诗科技面试经历,期望薪资22K

广州蓝炎科技一面 1、简单自我介绍&#xff1f;用的什么技术栈&#xff1f; 2、go的map是线程安全的吗&#xff1f; 3、Channel一般会在什么场景下使用&#xff1f;往一个未初始化的channel发送数据&#xff0c;会怎样&#xff1f; 4、关于go里头的随机数是线程安全的吗&am…

不同厂商SOC芯片在视频记录仪领域的应用

不同SoC公司芯片在不同产品上的应用信息&#xff1a; 大唐半导体 芯片型号: LC1860C (主控) LC1160 (PMU)产品应用: 红米2A (399元)大疆晓Spark技术规格: 28nm工艺&#xff0c;4个ARM Cortex-A7处理器&#xff0c;1.5GHz主频&#xff0c;2核MaliT628 GPU&#xff0c;1300万像…

基于51单片机多功能防盗报警proteus仿真( proteus仿真+程序+设计报告+原理图+讲解视频)

基于51单片机多功能防盗报警系统 1. 主要功能&#xff1a;2. 讲解视频&#xff1a;3. 仿真4. 程序代码5. 设计报告6. 原理图7. 设计资料内容清单&&下载链接 基于51单片机多功能防盗报警系统( proteus仿真程序设计报告原理图讲解视频&#xff09; 仿真图proteus8.9及以上…

打开C语言常用的内存函数大门(二)—— memmove()函数 (内含memmove的讲解和模拟实现)

文章目录 1. 前言2. memmove()函数2.1 memmove()函数与memcpy()函数的差异2.2 memmove()函数的原型2.3 memmove()函数的使用案例 3. memmove()函数的模拟实现4. 总结 1. 前言 在之前&#xff0c;我向大家介绍了C语言中的一个常用的内存函数memcpy函数。如果你还没看的话&#…

Check Point 安全网关任意文件读取漏洞复现(CVE-2024-24919)

Check Point 安全网关任意文件读取漏洞复现(CVE-2024-24919) 1.漏洞描述 Check Point Security Gateways 是 Check Point Sofware 提供的一系列 网络安全Q解决方案。这些解决方案包括下一代防火墙(NGFW)、数据中心安全网关和 A1驱动的量子网关&#xff0c;旨在为企业提供针对…

反思 GTC 和 OFC 2024:没有一刀切的方法,但上市时间是关键!

在GTC 2024期间&#xff0c;英伟达宣布了最新的Blackwell B200张量核心GPU&#xff0c;旨在为万亿参数的AI大型语言模型提供支持。Blackwell B200需要先进的800Gbps网络&#xff0c;完全符合在AI工作负载的AI网络报告中概述的预测。随着人工智能工作负载的流量预计每两年增长10…

销量逆袭!敦煌店铺如何靠自养号测评轻松引爆市场?

对于众多卖家而言&#xff0c;踏入中国领先的B2B跨境电商平台&#xff0c;如同步入了充满无尽机会的金矿。然而&#xff0c;有些卖家在平台上努力经营&#xff0c;但订单却寥寥无几。那么&#xff0c;究竟是什么原因导致了这种情况&#xff1f;接下来&#xff0c;我们将结合实际…

小程序webView 实现小程序内嵌H5页面

web-view | 微信开放文档 本案例新建了一个 webView页面 只渲染webView组件 配置路由,跳转页面的时候 前缀使用‘/subPages/webView/index?weburlhttps://xxxxx’ componentDidMount 的时候 获取路由中的 weburl 地址参数 async componentDidMount() {const router getCurre…

Coolmuster Android Assistant: 手机数据管理的全能助手

在数字化时代&#xff0c;智能手机不仅是通讯工具&#xff0c;更是个人数据的中心。随着数据量的不断增加&#xff0c;如何有效管理和保护这些数据成为了一个重要议题。Coolmuster Android Assistant应运而生&#xff0c;它是一款专为安卓用户设计的综合数据管理软件&#xff0…

九部门联合发文知识产权保护体系建设,微版权打造全链条知产保护

近日&#xff0c;国家知识产权局会同中央宣传部、最高人民法院、最高人民检察院、公安部、司法部、商务部、海关总署、国家市场监督管理总局等八部门联合印发《知识产权保护体系建设工程实施方案》(以下简称《方案》)&#xff0c;共同加强知识产权保护体系建设。 《方案》是新时…

使用vscode调试c++、python、torchrun、deepspeed程序

目录 调试模式启动(Launch)模式调试c++launch.jsontasks.json附加(Attach)模式调试pythondebug torchrun和deepspeedlaunch.json参考VSCode通过其强大的扩展生态系统和灵活的调试配置,为C++、Python以及特定工具链如TorchRun和DeepSpeed的调试提供了便捷的方式。通过合理配…

初识Spring Cloud Gateway

文章目录 一、网关简介1.1 网关提出的背景1.2 网关在微服务中的位置1.3 网关的技术选型1.4 补充 二、Spring Cloud Gateway的简介2.1 核心概念&#xff1a;路由&#xff08;Route&#xff09;2.2 核心概念&#xff1a;断言&#xff08;Predicate&#xff09;2.3 核心概念&#…

手机文件管理软件哪个好?巧用文件命名分类工具,文件清晰醒目!

随着智能手机功能的日益强大&#xff0c;我们日常使用手机存储的文件也越来越多&#xff0c;如何高效地管理这些文件成为了许多人的需求。因此&#xff0c;手机文件管理软件应运而生&#xff0c;它们能够帮助我们更好地组织、查找和编辑手机中的文件。在众多手机文件管理软件中…

结构体(C保姆级讲解)

前言&#xff1a; 为什么会有结构体&#xff0c;结构体可以用来面熟一个复杂对象&#xff0c;我们知道C语言中有哪些数据类型&#xff0c;有整型&#xff0c;有浮点型&#xff0c;有字符型&#xff0c;但是在生活中&#xff0c;我们需要描述一些比较复杂的东西&#xff0c;比如…

Vitalik:Layer2 是以太坊社区文化的延伸

原文标题&#xff1a;《Layer 2s as cultural extensions of Ethereum》 撰文&#xff1a;Vitalik Buterin&#xff0c;以太坊联合创始人 编译&#xff1a;Chris&#xff0c;Techub News 在我最近关于 L1 和 L2 扩容差异的文章中&#xff0c;我最终得出的结论是&#xff0c; …

java——网络编程套接字

T04BF &#x1f44b;专栏: 算法|JAVA|MySQL|C语言 &#x1faf5; 今天你敲代码了吗 目录 2.网络编程套接字2.1 socket api2.2 TCP和UDP之间的区别有连接 vs 无连接可靠传输 vs 不可靠传输面向字节流vs面向数据报全双工 vs 半双工 2.3UDP数据报套接字编程UDP 回显服务器UDP客户端…

Mariadb操作命令指南

MariaDB简介 ​ 以下内容仅是站长或网友个人学习笔记、总结和研究收藏。不保证正确性&#xff0c;因使用而带来的风险与本站无关&#xff01; 数据库应用程序与主应用程序分开存在&#xff0c;并存储数据集合。 每个数据库都使用一个或多个API来创建&#xff0c;访问&#xf…

ch4网络层---计算机网络期末复习(持续更新中)

网络层概述 将分组从发送方主机传送到接收方主机 发送方将运输层数据段封装成分组 接收方将分组解封装后将数据段递交给运输层网络层协议存在于每台主机和路由器上 路由器检查所有经过它的IP分组的分组头 注意路由器只有3层(网络层、链路层、物理层) 网络层提供的服务 一…

ArcGIS教程(02):创建多模式网络数据集

启动“新建网络数据集”向导 命名网络并选择源要素类 输入网络数据集名称【ParisMultimodal_ND】&#xff0c;点击【下一页】 点击【全选】网络数据集中的要素类 点击【下一页】 设置连通性和高程策略 点击【连通性】 Metro_Entrances 的每个要素与街道要素类的折点重…