Artifactory充分利用了基於Checksum的存儲,可是這種機制沒法代替常規的工件清理任務。軟件開發可能很雜亂,不少時候Artifactory中的許多工件都從未使用過。git
例如,許多CI / CD構建都配置爲基於源代碼控制「提交」運行,而且一旦將這些快照構建發送到Artifactory,就永遠不會實際下載它們。 github
考慮到軟件開發的動態性質,大多數組織都有本身的數據保留策略。由您決定能夠清除哪些數據,可是內置工具能夠覆蓋大多數狀況。docker
一般,在Artifactory中使用三種技術來管理工件存儲:json
–限制保留多少SNAPSHOT
–清除超大緩存
–刪除未使用的工件數組
限制保留多少SNAPSHOT
Artifactory具備內置機制來限制構建的「快照」。該系統的目的是確保在覆蓋「release」工件以前將其從「snapshots」存儲庫中升級出來。緩存
Artifactory支持六種存儲庫類型的「最大惟一快照」標記:微信
– Maven – NuGet
– Gradle –Ivy
– Docker – SBT工具
Artifactory使用Artifactory Layout系統跟蹤快照的數量。這意味着用戶在上載快照工件時須要遵循預約義的模式(大多數客戶端會自動處理)。 佈局
例如,此Maven JAR文件被識別爲快照運行編號3的一部分:spa
jfrog / hello / 1.0.5-SNAPSHOT / hello-1.0.5-20190620.224837-3.jar
大多數CLI客戶端使用特定模式進行上傳,Artifactory的默認佈局應涵蓋這些狀況。您能夠根據須要自定義這些存儲庫類型的佈局,以處理自定義上傳路徑。
要在Artifactory中啓用此功能,請更新本地存儲庫設置:
啓用此設置後,在「最大惟一快照數」上方進行的上傳將在下次構建運行期間刪除全部較早的發行版。
最高的數字將始終是最新版本。
清除超大緩存
Artifactory的遠程存儲庫將下載的文件存儲在緩存中。一般,保留整個緩存是有益的,由於它能夠加快下載速度。可是,若是項目使用的工件有所更改,則值得按期清除緩存。
在Artifactory中有支持此功能的內置系統。要啓用自動緩存清除,請轉到遠程存儲庫菜單的「高級」部分。
您能夠在「 未使用的工件清理期」部分中添加清理工件以前的小時數:
這並不意味着工件會在12小時後被刪除。相反,它在內部將工件標記爲「未使用」。
在「 管理員」->「高級」->「維護 」 下找到一個單獨的做業,稱爲「清理未使用的緩存工件」,它將執行清理。默認狀況下,此cron做業天天運行一次。
刪除未使用的工件
一般,Artifactory一般不會自動刪除二進制文件。也有例外,例如本文中已討論的字段。
話雖如此,經過刪除長時間未下載的工件能夠節省大量存儲空間。自動清除未使用的文件的最佳方法是實施Artifactory User Plugin。
JFrog開發的最受歡迎的用戶插件之一是「 artifactCleanup」插件。該插件在Cron Job上運行,並自動刪除「 X」天以內還沒有下載的任何工件。
若是您須要進一步自定義插件,則能夠在代碼中更改Artifactory Query Language語句:
def aql =「 items.find({」 repo「:」「 + repoKey +」「,」 type「:」 any「,」 @ cleanup.skip「:」 true「})。include(」 repo「,」 path 「,」名稱「,」類型「)」
須要注意的一件事:artifactCleanup在Docker Repositories上不起做用。
Docker映像層做爲單獨的工件存儲在「 image」文件夾中。若是大多數Docker客戶端中已經有一個層,則不會常常下載該層。因爲行爲上的差別,建議使用單獨的「 cleanDockerImages」插件。
它依賴manifest.json文件的下載計數,該文件始終在發生「 docker pull」時下載。
參考資料:
https://jfrog.com/knowledge-base/artifactory-cleanup-best-practices/
補充資料:
- AQL清理:
https://jfrog.com/blog/advanced-cleanup-using-artifactory-query-language-aql/
-清理已有數據:經過 Rest API 清理 90 天內無人下載的 snapshot,或者是 90 天之前的全部 snapshot,這樣可以大大減小存儲量,加快索引速度。
-按期清理新增數據:在頁面上配置實時清理 snapshot:
更多精彩內容能夠專一咱們的在線課堂
微信搜索公衆號:jfrogchina 獲取課程通知