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" ]; thenecho "错误: 必须提供 Artifactory 的 URL。"echo "用法: $0 <Artifactory URL>"exit 1
fi# Artifactory的用户名和密码
read -p "请输入用户名: " USERNAMEread -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 ];thenecho "请检查用户名 密码 Url 是否正确"exit 1
fi# 从output.txt文件中读取制品列表
ARTIFACTS=$(cat ./output.txt | cut -f2 -d']' | head -n -1)# 循环遍历制品列表,发送DELETE请求删除每个制品
for artifact in ${ARTIFACTS[@]}; dourl="${BASE_URL}/artifactory/${artifact}"response=$(curl -X DELETE -u "${USERNAME}:${PASSWORD}" "${url}" -s -o /dev/null -w "%{http_code}")if [[ $response -eq 204 ]]; thenecho "Deleted artifact: ${artifact}"elseecho "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" ]; thenecho "错误: 必须提供 Artifactory 的 URL。"echo "用法: $0 <Artifactory URL>"exit 1
fi# Artifactory的用户名和密码
read -p "请输入用户名: " USERNAMEread -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 ];thenecho "请检查用户名 密码 Url 是否正确"exit 1
fi# 读取文件并逐行处理
for repo in $(cat repo.txt | grep key | cut -f4 -d'"'); doecho "正在清理存储库: $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 ]; thenecho "Successfully processed $repo"elseecho "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
相关文章:

Artifactory清理二进制文件丢失的制品
一、摘要 当制品上传到 Artifactory 时,Artifactory 会在数据库中记录制品的相关元数据信息,包括文件路径、大小、校验和(如 MD5、SHA1)、上传时间、索引、依赖等。实际的制品二进制文件会存储在指定的存储后端,具体的…...
C#中的数组探索
在C#编程语言中,数组是一种基本的数据结构,用于存储固定大小的同类型元素序列。本文将深入探讨C#数组的各个方面,包括定义、赋值、范围操作、切片、多维数组(矩形与锯齿形)、简化初始化表达式以及边界检查。 数组定义…...

身份认证与口令攻击
身份认证与口令攻击 身份认证身份认证的五种方式口令认证静态口令动态口令(一次性口令)动态口令分类 密码学认证一次性口令认证S/KEY协议改进的S/KEY协议 其于共享密钥的认证 口令行为规律和口令猜测口令规律口令猜测 口令破解操作系统口令破解Windows密码存储机制Windows密码破…...

卷积网络迁移学习:实现思想与TensorFlow实践
摘要:迁移学习是一种利用已有知识来改善新任务学习性能的方法。 在深度学习中,迁移学习通过迁移卷积网络(CNN)的预训练权重,实现了在新领域或任务上的高效学习。 下面我将详细介绍迁移学习的概念、实现思想,…...

Ansible04-Ansible Vars变量详解
目录 写在前面6 Ansible Vars 变量6.1 playbook中的变量6.1.1 playbook中定义变量的格式6.1.2 举例6.1.3 小tip 6.2 共有变量6.2.1 变量文件6.2.1.1 变量文件编写6.2.1.2 playbook编写6.2.1.3 运行测试 6.2.2 根据主机组使用变量6.2.2.1 groups_vars编写6.2.2.2 playbook编写6.…...
Flutter 中的 SliverCrossAxisGroup 小部件:全面指南
Flutter 中的 SliverCrossAxisGroup 小部件:全面指南 Flutter 是一个功能丰富的 UI 开发框架,它允许开发者使用 Dart 语言来构建高性能、美观的移动、Web 和桌面应用。在 Flutter 的丰富组件库中,SliverCrossAxisGroup 是一个较少被使用的组…...
开源还是闭源这是一个问题
天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。…...

数据结构与算法笔记:基础篇 - 栈:如何实现浏览器的前进和后退功能?
概述 浏览器的前进、后退功能,你肯定很熟悉吧? 当依次访问完一串页面 a-b-c 之后,点击浏览器的后退按钮,就可以查看之前浏览过的页面 b 和 a。当后退到页面 a,点击前进按钮,就可以重新查看页面 b 和 c。但…...

【AIGC】大型语言模型在人工智能规划领域模型生成中的探索
大型语言模型在人工智能规划领域模型生成中的新应用 一、引言二、LLM在规划领域模型生成中的潜力三、实证分析:LLM在规划领域模型生成中的表现四、代码实例:LLM在规划领域模型生成中的应用五、结论与展望 一、引言 随着人工智能技术的迅猛发展࿰…...

从零开始学习Slam-旋转矩阵旋转向量四元组(二)
本文参考:计算机视觉life 仅作笔记用 书接上回,上回不清不楚的介绍了旋转矩阵&旋转向量和四元组 现在回顾一下重点: 本着绕谁谁不变的变则 假设绕z轴旋转θ,旋转矩阵为: 再回顾一下旋转向量的表示以及这个基本记不…...
基于Spring Security添加流控
基于Spring Security添加流控的过程: 步骤1: 添加依赖 确保项目中包含了Spring Security和Sentinel-Core的相关依赖。在Maven项目中,可以在pom.xml中添加如下依赖: <!-- Spring Security --> <dependency><groupId>org.…...

Python | Leetcode Python题解之第119题杨辉三角II
题目: 题解: class Solution:def getRow(self, rowIndex: int) -> List[int]:row [1, 1]if rowIndex < 1:return row[:rowIndex 1]elif rowIndex > 2:for i in range(rowIndex - 1):row [row[j] row[j 1] for j in range(i 1)]row.inser…...

物联网应用系统与网关
一. 传感器底板相关设计 1. 传感器设计 立创EDA传感器设计举例。 2. 传感器实物图 3. 传感器测试举例 测试激光测距传感器 二. 网关相关设计 1. LORA,NBIOT等设计 2. LORA,NBIOT等实物图 3. ZigBee测试 ZigBee测试 4. NBIoT测试 NBIoT自制模块的测试…...
系统稳定性概览
系统稳定性 系统稳定性,包括:监控、 告警、性能优化、慢sql、耗时接口等。 系统的稳定性的治理,可以围绕这几方面展开。 监控 Prometheus 监控并收集数据。监控 qps,tps, rt , cpu使用率,cpu load&#…...

Redis-Cluster模式基操篇
一、场景 1、搞一套6个主节点的Cluster集群 2、模拟数据正常读写 3、模拟单点故障 4、在不停服务的情况下将集群架构改为3主3从 二、环境规划 6台独立的服务器,端口18001~18006 192.169.14.121 192.169.14.122 192.169.14.123 192.169.14.124 192.169.14.125 192…...

Golang | Leetcode Golang题解之第113题路径总和II
题目: 题解: type pair struct {node *TreeNodeleft int }func pathSum(root *TreeNode, targetSum int) (ans [][]int) {if root nil {return}parent : map[*TreeNode]*TreeNode{}getPath : func(node *TreeNode) (path []int) {for ; node ! nil; no…...

云计算与 openstack
文章目录 一、 虚拟化二、云计算2.1 IT系统架构的发展2.2 云计算2.3 云计算的服务类型 三、Openstack3.1 OpenStack核心组件 一、 虚拟化 虚拟化使得在一台物理的服务器上可以跑多台虚拟机,虚拟机共享物理机的 CPU、内存、IO 硬件资源,但逻辑上虚拟机之…...

golang语言的gofly快速开发框架如何设置多样的主题说明
本节教大家如何用gofly快速开发框架后台内置设置参数,配置出合适项目的布局及样式、主题色,让你您的项目在交互上加分,也是能帮你在交付项目时更容易得到客户认可,你的软件使用客户他们一般都是不都技术的,所以当他们拿…...

lynis安全漏洞扫描工具
Lynis是一款Unix系统的安全审计以及加固工具,能够进行深层次的安全扫描,其目的是检测潜在的时间并对未来的系统加固提供建议。这款软件会扫描一般系统信息,脆弱软件包以及潜在的错误配置。 安装 方式1 git下载使用git clone https://github…...

C++ 多重继承的内存布局和指针偏移
在 C 程序里,在有多重继承的类里面。指向派生类对象的基类指针,其实是指向了派生类对象里面,该基类对象的起始位置,该位置相对于派生类对象可能有偏移。偏移的大小,等于派生类的继承顺序表里面,排在该类前面…...

【OSG学习笔记】Day 18: 碰撞检测与物理交互
物理引擎(Physics Engine) 物理引擎 是一种通过计算机模拟物理规律(如力学、碰撞、重力、流体动力学等)的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互,广泛应用于 游戏开发、动画制作、虚…...

遍历 Map 类型集合的方法汇总
1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...
Java如何权衡是使用无序的数组还是有序的数组
在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...

Psychopy音频的使用
Psychopy音频的使用 本文主要解决以下问题: 指定音频引擎与设备;播放音频文件 本文所使用的环境: Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...
Axios请求超时重发机制
Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式: 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...

dify打造数据可视化图表
一、概述 在日常工作和学习中,我们经常需要和数据打交道。无论是分析报告、项目展示,还是简单的数据洞察,一个清晰直观的图表,往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server,由蚂蚁集团 AntV 团队…...
【生成模型】视频生成论文调研
工作清单 上游应用方向:控制、速度、时长、高动态、多主体驱动 类型工作基础模型WAN / WAN-VACE / HunyuanVideo控制条件轨迹控制ATI~镜头控制ReCamMaster~多主体驱动Phantom~音频驱动Let Them Talk: Audio-Driven Multi-Person Conversational Video Generation速…...

基于江科大stm32屏幕驱动,实现OLED多级菜单(动画效果),结构体链表实现(独创源码)
引言 在嵌入式系统中,用户界面的设计往往直接影响到用户体验。本文将以STM32微控制器和OLED显示屏为例,介绍如何实现一个多级菜单系统。该系统支持用户通过按键导航菜单,执行相应操作,并提供平滑的滚动动画效果。 本文设计了一个…...

JDK 17 序列化是怎么回事
如何序列化?其实很简单,就是根据每个类型,用工厂类调用。逐个完成。 没什么漂亮的代码,只有有效、稳定的代码。 代码中调用toJson toJson 代码 mapper.writeValueAsString ObjectMapper DefaultSerializerProvider 一堆实…...

2.3 物理层设备
在这个视频中,我们要学习工作在物理层的两种网络设备,分别是中继器和集线器。首先来看中继器。在计算机网络中两个节点之间,需要通过物理传输媒体或者说物理传输介质进行连接。像同轴电缆、双绞线就是典型的传输介质,假设A节点要给…...