2012-03-15 170 views
13

我們有一個Nexus本地存儲庫管理器,它可以處理我們所有的內部項目(以及鏡像外部存儲庫)。對於我們的內部項目,我們只保留最新版本的快照構建。例如,如果我們有projectX創建1.0,1.1和1.2-SNAPSHOT,只要1.2發佈,我們將刪除1.2快照,然後有1.0,1.1,1.2和我們的Nexus倉庫1.3快照。處理本地存儲庫中舊快照的最佳方法?

問題是我們的Jenkins服務器在其本地.m2/repository文件夾中存在所有OLD快照,並繼續成功地針對這些舊快照構建項目,但實際上它們應該失敗(並且我們的開發人員應該修復它們POM文件。)

可以Maven的配置(Settings.XML中或pom.xml中)來刪除這些不必要的快照,如果它們不存在於Nexus的倉庫?

如果不是,那麼擺脫它們的最好方法是什麼?詹金斯配置,cron作業,其他選項?

謝謝...

+0

相關的問題,關於_developers_應該如何擺脫其本地.m2 \ repository文件夾中的舊時間戳工件:http://stackoverflow.com/q/4275466/223837。 – 2014-08-29 12:41:53

回答

0

我們在這裏使用類似的設置。一旦工件被髮布,我們有nexus自動刪除快照(對於某些存儲庫)。然後在我們的連續服務器上,我們只有一個cron作業,每天一次刪除本地存儲庫文件夾。這對我們很好。

+0

這看起來像是解決問題的最無痛和有效的方式。謝謝! – user1071914 2012-03-16 20:44:04

-3

這可能是你的jenkins服務器上的maven的配置問題。

Maven可以而且應該configured通過在<repository>部分配置的<updatePolicy>價值爲<snapshots>定期查找更新的快照。

​​

選項爲:alwaysdaily(默認),interval:X(其中X是在分鐘的整數)或never。另外,如果版本更改(從1.1-SNAPSHOT1.2-SNAPSHOT),則不清楚jenkins如何使用舊版本(1.1-SNAPSHOT)成功構建。

+1

我實際上提出了相反的問題:如何在本地存儲庫中自動獲取快照的RID,而不是更新它們。不過謝謝。 – user1071914 2012-03-16 15:15:18

0

首先,如果你使用的是詹金斯打造最好的做法有乾淨的構建,這意味着使用每構建一個本地資源庫,而不是全球的服務器。此外,聽起來你不使用釋放插件釋放你的工件,它會自動檢查一個POM是否包含SNAPSHOT,如果有一些則會失敗。此外,可以通過maven-dependency-plugin清理本地存儲庫。根據我的經驗,我已經簡單地配置了一項刪除SNAPSHOTs的任務,這個任務比一個月更久......

0

在Linux上,你可以使用這個命令:

find $HOME/.m2/repository/ \ 
    -name "*-SNAPSHOT" \ 
    -type d \ 
    -mtime +60 \ 
    -print \ 
    -prune \ 
    -exec rm -r "{}" \; 

說明:

  • 的文件夾中找到名爲*-SNAPSHOT什麼$HOME/.m2/repository/
  • ,它必須是目錄
  • 並且在過去60天內不得修改它
  • 打印您發現的內容。如果要測試命令,請在此處停止
  • -exec將刪除文件夾,-prune告訴查找不要嘗試之後進入文件夾。
  • -exec將刪除裏面的文件夾和文件。
相關問題