当前位置: 首页 > news >正文

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 时&#xff0c;Artifactory 会在数据库中记录制品的相关元数据信息&#xff0c;包括文件路径、大小、校验和&#xff08;如 MD5、SHA1&#xff09;、上传时间、索引、依赖等。实际的制品二进制文件会存储在指定的存储后端&#xff0c;具体的…...

C#中的数组探索

在C#编程语言中&#xff0c;数组是一种基本的数据结构&#xff0c;用于存储固定大小的同类型元素序列。本文将深入探讨C#数组的各个方面&#xff0c;包括定义、赋值、范围操作、切片、多维数组&#xff08;矩形与锯齿形&#xff09;、简化初始化表达式以及边界检查。 数组定义…...

身份认证与口令攻击

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

卷积网络迁移学习:实现思想与TensorFlow实践

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

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 小部件&#xff1a;全面指南 Flutter 是一个功能丰富的 UI 开发框架&#xff0c;它允许开发者使用 Dart 语言来构建高性能、美观的移动、Web 和桌面应用。在 Flutter 的丰富组件库中&#xff0c;SliverCrossAxisGroup 是一个较少被使用的组…...

开源还是闭源这是一个问题

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…...

数据结构与算法笔记:基础篇 - 栈:如何实现浏览器的前进和后退功能?

概述 浏览器的前进、后退功能&#xff0c;你肯定很熟悉吧&#xff1f; 当依次访问完一串页面 a-b-c 之后&#xff0c;点击浏览器的后退按钮&#xff0c;就可以查看之前浏览过的页面 b 和 a。当后退到页面 a&#xff0c;点击前进按钮&#xff0c;就可以重新查看页面 b 和 c。但…...

【AIGC】大型语言模型在人工智能规划领域模型生成中的探索

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

从零开始学习Slam-旋转矩阵旋转向量四元组(二)

本文参考&#xff1a;计算机视觉life 仅作笔记用 书接上回&#xff0c;上回不清不楚的介绍了旋转矩阵&旋转向量和四元组 现在回顾一下重点&#xff1a; 本着绕谁谁不变的变则 假设绕z轴旋转θ&#xff0c;旋转矩阵为&#xff1a; 再回顾一下旋转向量的表示以及这个基本记不…...

基于Spring Security添加流控

基于Spring Security添加流控的过程&#xff1a; 步骤1: 添加依赖 确保项目中包含了Spring Security和Sentinel-Core的相关依赖。在Maven项目中&#xff0c;可以在pom.xml中添加如下依赖&#xff1a; <!-- Spring Security --> <dependency><groupId>org.…...

Python | Leetcode Python题解之第119题杨辉三角II

题目&#xff1a; 题解&#xff1a; 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&#xff0c;NBIOT等设计 2. LORA&#xff0c;NBIOT等实物图 3. ZigBee测试 ZigBee测试 4. NBIoT测试 NBIoT自制模块的测试…...

系统稳定性概览

系统稳定性 系统稳定性&#xff0c;包括&#xff1a;监控、 告警、性能优化、慢sql、耗时接口等。 系统的稳定性的治理&#xff0c;可以围绕这几方面展开。 监控 Prometheus 监控并收集数据。监控 qps&#xff0c;tps&#xff0c; rt , cpu使用率&#xff0c;cpu load&#…...

Redis-Cluster模式基操篇

一、场景 1、搞一套6个主节点的Cluster集群 2、模拟数据正常读写 3、模拟单点故障 4、在不停服务的情况下将集群架构改为3主3从 二、环境规划 6台独立的服务器&#xff0c;端口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

题目&#xff1a; 题解&#xff1a; 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核心组件 一、 虚拟化 虚拟化使得在一台物理的服务器上可以跑多台虚拟机&#xff0c;虚拟机共享物理机的 CPU、内存、IO 硬件资源&#xff0c;但逻辑上虚拟机之…...

golang语言的gofly快速开发框架如何设置多样的主题说明

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

lynis安全漏洞扫描工具

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

C++ 多重继承的内存布局和指针偏移

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

以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:

一、属性动画概述NETX 作用&#xff1a;实现组件通用属性的渐变过渡效果&#xff0c;提升用户体验。支持属性&#xff1a;width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项&#xff1a; 布局类属性&#xff08;如宽高&#xff09;变化时&#…...

多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验

一、多模态商品数据接口的技术架构 &#xff08;一&#xff09;多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如&#xff0c;当用户上传一张“蓝色连衣裙”的图片时&#xff0c;接口可自动提取图像中的颜色&#xff08;RGB值&…...

页面渲染流程与性能优化

页面渲染流程与性能优化详解&#xff08;完整版&#xff09; 一、现代浏览器渲染流程&#xff08;详细说明&#xff09; 1. 构建DOM树 浏览器接收到HTML文档后&#xff0c;会逐步解析并构建DOM&#xff08;Document Object Model&#xff09;树。具体过程如下&#xff1a; (…...

数据链路层的主要功能是什么

数据链路层&#xff08;OSI模型第2层&#xff09;的核心功能是在相邻网络节点&#xff08;如交换机、主机&#xff09;间提供可靠的数据帧传输服务&#xff0c;主要职责包括&#xff1a; &#x1f511; 核心功能详解&#xff1a; 帧封装与解封装 封装&#xff1a; 将网络层下发…...

基于Docker Compose部署Java微服务项目

一. 创建根项目 根项目&#xff08;父项目&#xff09;主要用于依赖管理 一些需要注意的点&#xff1a; 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件&#xff0c;否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...

PL0语法,分析器实现!

简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…...

力扣-35.搜索插入位置

题目描述 给定一个排序数组和一个目标值&#xff0c;在数组中找到目标值&#xff0c;并返回其索引。如果目标值不存在于数组中&#xff0c;返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solution {public int searchInsert(int[] nums, …...

Docker 本地安装 mysql 数据库

Docker: Accelerated Container Application Development 下载对应操作系统版本的 docker &#xff1b;并安装。 基础操作不再赘述。 打开 macOS 终端&#xff0c;开始 docker 安装mysql之旅 第一步 docker search mysql 》〉docker search mysql NAME DE…...

AirSim/Cosys-AirSim 游戏开发(四)外部固定位置监控相机

这个博客介绍了如何通过 settings.json 文件添加一个无人机外的 固定位置监控相机&#xff0c;因为在使用过程中发现 Airsim 对外部监控相机的描述模糊&#xff0c;而 Cosys-Airsim 在官方文档中没有提供外部监控相机设置&#xff0c;最后在源码示例中找到了&#xff0c;所以感…...

CSS | transition 和 transform的用处和区别

省流总结&#xff1a; transform用于变换/变形&#xff0c;transition是动画控制器 transform 用来对元素进行变形&#xff0c;常见的操作如下&#xff0c;它是立即生效的样式变形属性。 旋转 rotate(角度deg)、平移 translateX(像素px)、缩放 scale(倍数)、倾斜 skewX(角度…...