Sur un serveur de build CI, le référentiel Maven local remplit le système de fichiers de manière répétitive (après quelques jours). Quelle stratégie font les autres pour supprimer le référentiel local dans un tel cas? -Max
Réponses
Trop de publicités?La dépendance Maven plugin a une purge-local-dépôt de l'objectif qui permet de supprimer les dépendances pour un projet donné, à partir d'un référentiel local, si c'est courir le dire une fois par jour sur chaque projet, les captures d'écran ne s'accumule pas.
Sinon il y a un plus de la terre brûlée approche que l'on pourrait prendre. Comme le problème est généralement la horodaté instantané des artefacts, vous pouvez utiliser le maven-antrun-plugin pour supprimer tous les fichiers qui correspondent à la collection de ressources patron.
Par exemple (à noter qu'il peut avoir besoin de quelques ajustements, comme je l'ai fait de mémoire):
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<configuration>
<tasks>
<delete>
<fileset dir="${settings.localRepository}">
<include name="**/*.jar"/>
<exclude name="**/*.pom"/>
<exclude name="**/*.war"/>
<exclude name="**/*.ear"/>
<exclude name="**/*.md5"/>
<exclude name="**/*.sha"/>
<!--any other extensions?...-->
<!--match the timestamp pattern-->
<containsregexp expression="[0-9]{8}.[0-9]{6}-[0-9]+"/>
</fileset>
</delete>
</tasks>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
Si vous utilisez hudson, vous pouvez configurer un travail planifié pour supprimer simplement le référentiel entier une fois par jour ou quelque chose du genre. J'ai un travail appelé hudson-maven-repo-clean
qui a cette configuration:
- Construire / Exécuter shell:
rm -rf ~hudson/.m2/repository
- Construire des déclencheurs / Construire périodiquement:
0 0 * * *
En plus de purger-local-dépôt (qui se lit à moi comme une option nucléaire, car il offre un excludes
configuration plutôt explicite includes
), jetez un oeil à la suppression d'un Projet Artefact mojo. Je suis à la recherche pour la mettre en œuvre maintenant, comme mon exact de cas d'utilisation est d'effacer de la grande GUERRE et de l'OREILLE clichés qui sont en cours de construction sur mon implant (et parfois de la station de travail sur les machines.
Nous utilisons en particulier pour ce but de construire-helper plugin. Dans notre société mère pom est la suppression de-projet-artefact objectif incorporé dans le profil de notre hudson construit. De cette façon, toutes les anciennes versions de cet artefact sont supprimés avant l'installation de la actuellement de version.
...
<profile>
<id>hudson</id>
<activation>
<property>
<name>BUILD_TAG</name>
</property>
</activation>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>1.7</version>
<executions>
<execution>
<id>remove-old-artifacts</id>
<phase>package</phase>
<goals>
<goal>remove-project-artifact</goal>
</goals>
<configuration>
<removeAll>true</removeAll>
</configuration>
</execution>
</executions>
</plugin>
...
L'utilisation de removeAll défini à true permet d'effacer toutes les autres instantanés à l'exception de celui de votre travail. Cela peut être dangereux car il peut signifier instantanés pour une branche sera anéanti ainsi.
Par exemple, si vous disposez d'un instantané 1.0.0.18-INSTANTANÉ représentant de la TÊTE et instantané 1.0.1.17-CLICHÉ représentant une branche, l'exécution de ce plugin avec 1.0.0.18-INSTANTANÉ de construire effacer le 1.0.1.17-dossier de capture instantanée.
Pour contourner ce scénario, le removeAll doit être définie sur false.
Nous avons employé un peu différente (et sournois) technique. Tous les artefacts qui construisent des "grandes choses" (les Oreilles, les Guerres, les Goudrons) ont leurs déployer emplacement remplacé comme suit:
<properties>
<discard-me-in-bit-bucket>file://${basedir}/target/_DELETEME</discard-me-in-bit-bucket>
</properties>
<distributionManagement>
<repository>
<id>upload-InternalSite</id>
<name>SoftwareLibrary External</name>
<url>${discard-me-in-bit-bucket}</url>
<layout>legacy</layout>
<uniqueVersion>false</uniqueVersion>
</repository>
<snapshotRepository>
<id>upload-InternalSite</id>
<name>Repository Name</name>
<url>${discard-me-in-bit-bucket}</url>
<layout>legacy</layout>
<uniqueVersion>false</uniqueVersion>
</snapshotRepository>
</distributionManagement>
Cette stratégie provoque le déployer pour objectif de mettre les choses dans le répertoire cible, ce qui est détruit par la prochaine opération de NETTOYAGE. Pour obtenir encore plus agressif, nous avons un postbuild étape qui fait cela:
find -type d -name '*_DELETEME' -exec rm -rf '{}' ';' -prune || echo $?
Nous employons encore une stratégie de plus, trop de. Dans Hudson/Jenkins nous fournir un fichier de settings de la place .m2 référentiel dans l'espace de travail pour le travail. Cela nous permet de supprimer l'ensemble du référentiel avant ou après le travail. Il fait aussi des artefacts visibles dans l'espace de travail qui facilite le débogage de certains problèmes.