Si vous êtes un ingénieur Java, vous utiliserez probablement le référentiel Maven très souvent pour une raison quelconque. Je l'utilise même avec Gradle.
Comment gérez-vous votre propre bibliothèque, en supposant que OSS etc. sera supprimé du référentiel central? Si vous développez localement, «mvn install» convient, mais si vous faites du CI / CD ou partagez des bibliothèques avec votre équipe ou organisation, ce n'est pas le cas.
J'ai donc cette fois résumé la méthode de publication de la bibliothèque créée par Maven. À propos, à partir d'août 2020, la méthode recommandée est d'utiliser GCS comme référentiel.
C'est la procédure la plus simple. La procédure d'enregistrement est un peu compliquée, mais c'est un gros avantage qu'il n'y a pas de travail supplémentaire du référentiel au moment de l'utilisation. Je pense qu'il est bon de l'utiliser lorsque vous souhaitez étendre les utilisateurs en tant que bibliothèque OSS.
La prochaine chose à considérer est de configurer un serveur de référentiel OSS. Cela peut être courant pour les référentiels internes. Nexus Repository Manager et JFrog artifactory sont célèbres. Si vous voulez le faire rapidement, vous pouvez également publier le référentiel .m2 d'un serveur CI tel que Jenkins avec Apache etc. Je ne peux pas le gérer en détail, mais cela fonctionne, c'est donc une option lorsque vous voulez le faire rapidement avec le minimum de fonctions.
Il existe un moyen d'utiliser "Pages Github" qui peut héberger du contenu statique sur GitHub. C'était populaire il y a longtemps.
L'idée de base est de déployer la bibliothèque localement avec mvn deploy
et de la pousser sur Github avec mvn site
. C'est assez pratique car vous pouvez laisser la sécurité / disponibilité à GitHub.
La procédure détaillée est expliquée en détail sur le site suivant.
C'est un moyen pratique de publier votre propre bibliothèque dans Public. C'est gratuit.
Utiliser les pages GitHub comme référentiel Maven est un peu piraté, mais il est récemment devenu possible de publier la bibliothèque maven comme méthode formelle sous forme de packages GitHub.
Tout d'abord, enregistrez la destination de déploiement dans pom.xml comme suit.
pom.xml
<distributionManagement>
<repository>
<id>github</id>
<name>GitHub OWNER Apache Maven Packages</name>
<url>https://maven.pkg.github.com/{YOUR_NAME}/{YOUR_PRJ_NAME}</url>
</repository>
</distributionManagement>
Vous pouvez le faire manuellement, mais la gestion de la clé privée est un problème, alors utilisez Actions.
.github/workflows/maven-publish.yml
name: Publish jl2-web library
on: [ workflow_dispatch ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up JDK 11
uses: actions/setup-java@v1
with:
java-version: 11
server-id: github # Value of the distributionManagement/repository/id field of the pom.xml
settings-path: ${{ github.workspace }} # location for the settings.xml file
- name: Build with Maven
run: mvn -B package --file jl2-web/pom.xml
- name: Publish to GitHub Packages Apache Maven
run: mvn deploy -s $GITHUB_WORKSPACE/settings.xml --file jl2-web/pom.xml
env:
GITHUB_TOKEN: ${{ github.token }}
CI / CD fonctionne avec les actions GitHub basées sur ce YAML. Si vous utilisez GITHUB_TOKEN
, vous n'avez probablement pas besoin de gérer les paramètres spéciaux settings.xml
.
Ensuite, un lien sera créé à partir du référentiel GitHub comme indiqué ci-dessous.
Lorsque vous utilisez la bibliothèque déployée ici, ajoutez le référentiel dépendant comme indiqué dans pom.xml ci-dessous.
pom.xml
<repositories>
<repository>
<id>github</id>
<name>NKLab repository</name>
<url>https://maven.pkg.github.com/{YOUR_NAME}/{YOUR_PRJ_NAME}</url>
</repository>
</repositories>
Il est très pratique en combinaison avec les actions GitHub, mais il présente les problèmes suivants.
--a) Je ne savais pas comment configurer public sans mot de passe --b) Gestion des permissions lors du placement de plusieurs bibliothèques dans un référentiel
C'est un défi, ou tout simplement je ne sais pas comment le faire, mais d'une manière ou d'une autre, cela ne semble pas le soutenir pour le moment. Concernant b, je comprends que cela peut être fait en utilisant jeton d'accès personnel
etc., mais je ne sais pas comment le faire avec GITHUB_TOKEN
et c'est un peu en attente.
Il est pratique d'être intégré à GitHub Actions, et il n'y a pas de problème s'il s'agit d'une bibliothèque interne qui nécessite une authentification, donc je pense que c'est très pratique lors du développement d'une équipe utilisant GitHub. Vous pouvez choisir entre un forfait payant et un forfait gratuit.
Comment s'appuyer sur le stockage d'objets comme S3, GCS, Azure Blob.
Ce n'est pas totalement gratuit, mais le stockage d'objets est assez bon marché pour chaque entreprise, et IAM de chaque cloud peut gérer les autorisations au lieu de la gestion de compte de Maven, donc je pense que c'est pratique pour ceux qui l'utilisent déjà. J'utilise GCP et j'utilise également CloudBuild, c'est donc le plus simple.
Il est facile à utiliser et définissez l'extension ou l'extension dans pom.xml
comme suit. La dernière version est la version 2.3, mais nous vous recommandons d'utiliser la version 1.7 car il y a un bogue dans le support GCS.
<distributionManagement>
<snapshotRepository>
<id>nklab-snapshot</id>
<url>gs://{Nom du godet}/snapshot</url>
</snapshotRepository>
</distributionManagement>
<build>
<extensions>
<extension>
<groupId>com.gkatzioura.maven.cloud</groupId>
<artifactId>google-storage-wagon</artifactId>
<version>1.7</version>
</extension>
</extensions>
</build>
Entrez un nom de compartiment et un nom de dossier dans ʻurl. Pour le moment, je nomme le Snapshot Repository «snapshot». Bien sûr, vous pouvez déployer autre chose que SnapShot en ajoutant la balise
repository`.
<distributionManagement>
<snapshotRepository>
<id>my-repo-bucket-snapshot</id>
<url>gs://mavenrepository/snapshot</url>
</snapshotRepository>
<repository>
<id>my-repo-bucket-release</id>
<url>gs://mavenrepository/release</url>
</repository>
</distributionManagement>
Puis déployez avec la commande suivante.
mvn -B deploy
À ce stade, la gestion des autorisations sera IAM, donc si vous souhaitez déployer localement sur GCS, vous devez spécifier le fichier de clé du compte de service dans la variable d'environnement comme suit. Eh bien, c'est une méthode familière dans GCP. Vous pouvez également vous authentifier en vous connectant avec gcloud auth login –brief
.
GOOGLE_APPLICATION_CREDENTIALS=~/seacret/mybuild-1632c221dd5c.json mvn -B deploy
Si vous souhaitez l'utiliser, ajoutez-le à la dépendance pom.xml comme suit.
<repositories>
<repository>
<id>my-repos</id>
<name>My repository</name>
<url>https://storage.googleapis.com/{Nom du godet}/snapshot/</url>
</repository>
</repositories>
Lors de la construction à partir de CloudBuild, etc., il n'y a pas de problème particulier tant que les paramètres du côté GCS sont définis. Cette méthode est pratique pour ceux qui sont habitués à GCP car elle est identique au contrôle normal de GCS, y compris le paramètre public.
GCP Artifact Registry
C'est un service qui est un successeur ou une version avancée du Container Registry de Google. À l'origine, il ne prend en charge que Docker Container, mais désormais, il prend également en charge Maven et nodejs en version alpha.
https://cloud.google.com/artifact-registry?hl=ja
Ici, le back-end est GCS, mais il a également diverses fonctions telles que l'automatisation des scans de sécurité, et c'est un service auquel je prête personnellement attention. Étant donné que GCP est la plate-forme principale pour moi, il semble être compatible avec chaque système tel que CloudBuild.
Cependant, il s'agit d'une version alpha du 08/08/2020, vous ne pouvez donc pas l'utiliser à moins de postuler. J'en ai fait la demande pour le moment, mais je ne l'ai pas encore essayé. De l'automne à la fin de l'année, j'ai le sentiment qu'il sera disponible pour les grand public en tant que β.
L'hébergement du référentiel de Maven est un problème, c'est donc un problème ennuyeux, mais récemment, il existe de nombreuses options autres que l'hébergement d'OSS vous-même. Il est également important en tant que partie qui réalise CI / CD, donc je voudrais faire bon usage de cette zone afin que je puisse facilement partager / publier des bibliothèques internes et des bibliothèques personnelles.
Alors bon piratage!
Recommended Posts