#環境說明: 這里使用的harbor版本是2.0.2
- Harbor API 相關的接口可以在Harbor首頁左下方看到下圖紅框所示的位置點擊查看

1. 列出鏡像名字使用的API如下圖
- 輸入需要查詢的項目下倉庫信息,先點擊 Try it out填寫信息, 然后點擊 Execute生產url地址

- 使用生成的url來列出鏡像

# harbor api地址
harbor_url="https://$HOST/api/v2.0"
# 列出項目中倉庫的鏡像
# project_name 項目名
# repository_name 倉庫名
${harbor_url}/projects/{project_name}/repositories/{repository_name}/artifacts #GET方法獲取鏡像
# 此時的page在web UI上第一頁顯示的數量是10個,可以修改page_size的值為你的鏡像總條數(例如1000)
curl -X GET "https://192.168.1.229/api/v2.0/projects/$project/repositories/$name/artifacts?page=1&page_size=10&with_tag=true&with_label=false&with_scan_overview=false&with_signature=false&with_immutable_status=false"
# 修改后
curl -X GET "https://192.168.1.229/api/v2.0/projects/$project/repositories/$name/artifacts?page=1&page_size=1000&with_tag=true&with_label=false&with_scan_overview=false&with_signature=false&with_immutable_status=false"
列出倉庫中的所有鏡像后可以使用jq工具處理json格式 然后使用grep和awk取得鏡像的digest的值

# 像這樣就可以取得倉庫中所有的鏡像號了,然后再進行下一步
curl -X GET "https://192.168.1.229/api/v2.0/projects/$project/repositories/$name/artifacts?page=1&page_size=1000&with_tag=true&with_label=false&with_scan_overview=false&with_signature=false&with_immutable_status=false" | jq . | grep "digest" | awk -F '"' '{print $4}' > /tmp/digest.txt
2. 刪除鏡像使用的API如下圖

# 根據鏡像的distge刪除鏡像
/projects/{project_name}/repositories/{repository_name}/artifacts/{reference}
# 同上方式獲取到url地址后就可以刪除了
curl -k -u "admin:Harbor12345" -X DELETE "https://$HOST/api/v2.0/projects/project/repositories/name/artifacts/${digest}"
最后附上一個腳本文件
#!/bin/bash
#獲取鏡像號列表
curl -X GET "https://$HOST/api/v2.0/projects/$project/repositories/$name/artifacts?page=1&page_size=1000&with_tag=true&with_label=false&with_scan_overview=false&with_signature=false&with_immutable_status=false" | jq . |grep "digest" | awk -F '"' '{print $4}' > /tmp/digest.txt
#設定需要保留的鏡像號
TOTAL_NUN=$(cat /tmp/digest.txt |wc -l )
DELETE_NUN=$( echo "${TOTAL_NUN} - 50 "|bc )
DELETE_IMAGES=$(tail -n ${DELETE_NUN} /tmp/digest.txt )
#開始刪除
for DIGEST in ${DELETE_IMAGES}
do
curl -u "admin:Harbor12345" -X DELETE "https://$HOST/api/v2.0/projects/project/repositories/name/artifacts/${DIGEST}"
done
#如果想要並行執行, 將循環體放在{}里面即可, 不過可能會造成harbor出現504報錯.
#若果有多個倉庫需要刪除,可以在外層再執行一個循環
