做網(wǎng)站用虛擬服務(wù)器可以嗎免費(fèi)自助建站平臺(tái)
一、摘要
????????當(dāng)制品上傳到 Artifactory 時(shí),Artifactory 會(huì)在數(shù)據(jù)庫中記錄制品的相關(guān)元數(shù)據(jù)信息,包括文件路徑、大小、校驗(yàn)和(如 MD5、SHA1)、上傳時(shí)間、索引、依賴等。實(shí)際的制品二進(jìn)制文件會(huì)存儲(chǔ)在指定的存儲(chǔ)后端,具體的存儲(chǔ)位置可以配置artifactory的配置文件binarystore.xml來更改。如果二進(jìn)制文件被意外刪除或丟失的話,將無法在Artifactory使用和下載這些制品。而我們只能重新上傳此制品文件或者刪除掉Artifactory上的制品信息,今天我們講如何刪除這些二進(jìn)制文件丟失的制品。
二、先查詢出二進(jìn)制文件丟失的制品
1、我們需要在下方Github鏈接中把此腳本下載下來,它可以查詢出Artifactory中二進(jìn)制文件丟失的制品:
https://github.com/jfrog/artifactory-scripts/blob/master/filestoreIntegrity/filestoreIntegrity.py
2、安裝腳本運(yùn)行需要的python3環(huán)境
yum -y install python3
3、授予權(quán)限
chmod +x filestoreIntegrity.py
4、運(yùn)行此腳本
./filestoreIntegrity.py http(s)://{artifactory_url}/artifactory -u {user} -o output.txt
5、運(yùn)行完成后會(huì)在我們當(dāng)前目錄下多一個(gè)output.txt文件此文件里面的內(nèi)容便是我們二進(jìn)制文件丟失的制品信息。
三、刪除指定的制品
1、我們需要寫一個(gè)腳本用來更快捷的刪除制品,第一步我們要?jiǎng)?chuàng)建腳本文件。
touch?delartifact.sh
2、編寫腳本內(nèi)容,此腳本可以循環(huán)遍歷output.txt文件的制品信息來進(jìn)行逐一刪除。
#!/bin/bash# Artifactory的基本URL
BASE_URL="$1"#判斷是否輸入U(xiǎn)rl
if [ -z "$1" ]; thenecho "錯(cuò)誤: 必須提供 Artifactory 的 URL。"echo "用法: $0 <Artifactory URL>"exit 1
fi# Artifactory的用戶名和密碼
read -p "請(qǐng)輸入用戶名: " USERNAMEread -s -p "請(qǐng)輸入密碼: " 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 "請(qǐng)檢查用戶名 密碼 Url 是否正確"exit 1
fi# 從output.txt文件中讀取制品列表
ARTIFACTS=$(cat ./output.txt | cut -f2 -d']' | head -n -1)# 循環(huán)遍歷制品列表,發(fā)送DELETE請(qǐng)求刪除每個(gè)制品
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、授予權(quán)限
chmod +x delartifact.sh
4、運(yùn)行刪除制品
sh?delartifact.sh?http(s)://{artifactory_url}
5、刪除完制品后,在我們存儲(chǔ)庫中可能會(huì)產(chǎn)生空目錄,比如說maven-local/javax/annotation/javax.annotation-api/1.3.2/javax.annotation-api-1.3.2.jar的jar包被清理而且無其他文件,那么此目錄將沒有作用,7版本的artifactory會(huì)自動(dòng)清理這些空目錄,而6版本的則需要我們?nèi)グ惭b個(gè)插件來統(tǒng)一清理。
四、清理空目錄(7版本的artifactory會(huì)自動(dòng)清理)
1、我們需要在下方Github鏈接中把此插件下載下來,它可以清理存儲(chǔ)庫中的空目錄:
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、下面是插件運(yùn)行方式,需要指定存儲(chǔ)庫或者路徑。
curl?-X?POST?-v?-u?{admin}:{password}?"http(s)://{artifactory_url}/artifactory/api/plugins/execute/deleteEmptyDirsPlugin?params=paths={repo},{path}"
5、如果要清理所有空目錄則要先獲取所有存儲(chǔ)庫的信息,并整理到一個(gè)文件中,用腳本來進(jìn)行統(tǒng)一清理。
curl?-X?POST?-u?{admin}:{password}?http(s)://{artifactory_url}/artifactory/api/repositorie?> repo.txt
6、創(chuàng)建并編寫腳本使其逐一清理所有存儲(chǔ)庫
touch delfolder.sh
#!/bin/bash# Artifactory的基本URL
BASE_URL="$1"#判斷是否輸入U(xiǎn)rl
if [ -z "$1" ]; thenecho "錯(cuò)誤: 必須提供 Artifactory 的 URL。"echo "用法: $0 <Artifactory URL>"exit 1
fi# Artifactory的用戶名和密碼
read -p "請(qǐng)輸入用戶名: " USERNAMEread -s -p "請(qǐng)輸入密碼: " 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 "請(qǐng)檢查用戶名 密碼 Url 是否正確"exit 1
fi# 讀取文件并逐行處理
for repo in $(cat repo.txt | grep key | cut -f4 -d'"'); doecho "正在清理存儲(chǔ)庫: $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、授予權(quán)限
chmod?+x?delfolder.sh
8、運(yùn)行腳本
sh?delfolder.sh?http(s):{artifactory_url}
9、清空垃圾桶
curl -u {admin}:{password} -X POST http://{artifactory_url}/artifactory/api/trash/empty