2012-03-15 8 views
13

Abbiamo un gestore di repository locale Nexus che gestisce tutti i nostri progetti interni (oltre al mirroring di repository esterni). Per i nostri progetti interni, conserviamo solo le build di istantanee della versione più recente. Ad esempio, se avessimo ProjectX 1.0, 1.1 e 1.2-SNAPSHOT, appena 1.2 è stato rilasciato elimineremmo 1.2-SNAPSHOT e quindi avremo 1.0, 1.1, 1.2 e 1.3-SNAPSHOT nel nostro repository Nexus.Il modo migliore per gestire le vecchie istantanee nel repository locale?

Il problema è che il nostro server Jenkins ha tutte le istantanee OLD nella sua cartella locale .m2/repository e continua a costruire progetti con successo contro queste vecchie istantanee, quando in realtà dovrebbero fallire (e i nostri sviluppatori dovrebbero correggerle File POM.)

È possibile configurare Maven (in settings.xml o pom.xml) per eliminare queste istantanee indesiderate se non sono presenti nel repository Nexus?

In caso contrario, qual è il modo migliore per sbarazzarsi di loro? Configurazione Jenkins, cron job, altra opzione?

Grazie ...

+0

Domanda relativa, su come _developers_ dovrebbe eliminare vecchi artefatti con data e ora nella loro cartella .m2 \ repository locale: http://stackoverflow.com/q/4275466/223837. –

risposta

0

usiamo una configurazione simile qui. Abbiamo nexus eliminare automaticamente gli snapshot una volta rilasciato l'artefatto (per alcuni repository). Quindi sul nostro server continuo, abbiamo solo un cron job che una volta al giorno cancella la cartella del repository locale. Questo funziona bene per noi.

+0

Questo sembra il modo più indolore ed efficace per affrontare il problema. Grazie! – user1071914

-3

Potrebbe essere un problema di configurazione con Maven sul tuo server jenkins.

Maven possono e devono essere configured a guardare periodicamente per le istantanee aggiornati configurando il valore di <updatePolicy> in <repository> sezione <snapshots>.

<updatePolicy>daily</updatePolicy> 

Le scelte sono: always, daily (default), interval:X (dove x è un numero intero in minuti) o never.

Inoltre, se la versione cambia (da 1.1-SNAPSHOT a 1.2-SNAPSHOT), non è chiaro come jenkins possa creare correttamente con una versione precedente (1.1-SNAPSHOT).

+1

In realtà stavo ponendo la domanda opposta: Come ottenere automaticamente RID OF snapshot nel repository locale, non aggiornarli. Grazie comunque. – user1071914

0

Prima se si utilizza jenkins per creare la procedura migliore per creare build puliti che significa utilizzare un repository locale per build e non il globale del server. Inoltre sembra che non si usi il plugin di rilascio per rilasciare le risorse utente che controlla automaticamente se un pom contiene SNAPSHOT e fallirebbe se ce ne fossero. Inoltre è possibile ripulire il repository locale tramite lo maven-dependency-plugin. Sulla base della mia esperienza ho semplicemente configurato un'attività che cancella gli SNAPSHOT che sono più vecchi di un mese ...

0

Su Linux, è possibile utilizzare questo comando:

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

Spiegazione:

  • Trova qualcosa chiamato *-SNAPSHOT nella cartella $HOME/.m2/repository/
  • E si deve essere una directory
  • E non deve essere stato modificato negli ultimi 60 giorni
  • Stampa ciò che hai trovato. Se si desidera testare il comando, fermarsi qui
  • Lo -exec eliminerà la cartella, -prune dice di non cercare di entrare nella cartella in seguito.
  • Il -exec eliminerà la cartella e i file all'interno.
Problemi correlati