Injection d'informations git au printemps
1. Vue d'ensemble
Dans ce didacticiel, nous allons montrer comment injecter des informations de référentiel Git dans une application basée sur Spring Boot construite par Maven.
Pour ce faire, nous utiliseronsmaven-git-commit-id-plugin - un outil pratique créé uniquement à cet effet.
2. Dépendances Maven
Ajoutons un plugin à une section<plugins> de notre fichierpom.xml de notre projet:
pl.project13.maven
git-commit-id-plugin
2.2.1
Vous pouvez trouver la dernière versionhere. Gardez à l'esprit que ceplugin requires at least 3.1.1 version of Maven.
3. Configuration
Le plugin a de nombreux drapeaux et attributs pratiques qui élargissent ses fonctionnalités. Dans cette section, nous allons décrire brièvement certaines d’entre elles. Si vous voulez les connaître tous, visitez lespage etif you want to go straight to the example, go to section 4 de maven-git-commit-id-plugin.
Les extraits de code suivants contiennent des exemples d'attributs de plug-in; spécifiez-les dans une section<configuration></configuration> selon vos besoins.
3.1. Référentiel manquant
Vous pouvez le configurer pour qu'il omette les erreurs si le référentiel Git n'a pas été trouvé:
false
3.2. Emplacement du référentiel Git
Si vous souhaitez spécifier l'emplacement du référentiel.git personnalisé, utilisez l'attributdotGitDirectory:
${project.basedir}/submodule_directory/.git
3.3. Fichier de sortie
Afin de générer un fichier de propriétés avec un nom personnalisé et / ou un répertoire, utilisez la section suivante:
${project.build.outputDirectory}/filename.properties
3.4. Verbosité
Pour une utilisation plus généreuse de la journalisation:
true
3.5. Génération de fichiers de propriétés
Vous pouvez désactiver la création d'un fichiergit.properties:
false
3.6. Préfixe des propriétés
Si vous souhaitez spécifier un préfixe de propriété personnalisé, utilisez:
git
3.7. Uniquement pour le référentiel parent
Lorsque vous utilisez un projet avec des sous-modules, la définition de cet indicateur garantit que ce plug-in ne fonctionne que pour le référentiel parent:
true
3.8. Exclusion de propriétés
Vous voudrez peut-être exclure certaines données sensibles telles que les informations utilisateur du référentiel:
git.user.*
3.9. Inclusion de propriétés
L'inclusion de données spécifiées uniquement est également possible:
git.commit.id
4. Exemple d'application
Créons un exemple de contrôleur REST, qui renverra des informations de base sur notre projet.
Nous allons créer l'exemple d'application à l'aide de Spring Boot. Si vous ne savez pas comment configurer une application Spring Boot, veuillez consulter l'article d'introduction:Configure a Spring Boot Web Application.
Notre application sera composée de 2 classes:Application etCommitIdController
4.1. Application
CommitIdApplication servira de racine de notre application:
@SpringBootApplication(scanBasePackages = { "com.example.git" })
public class CommitIdApplication {
public static void main(String[] args) {
SpringApplication.run(CommitIdApplication.class, args);
}
@Bean
public static PropertySourcesPlaceholderConfigurer placeholderConfigurer() {
PropertySourcesPlaceholderConfigurer propsConfig
= new PropertySourcesPlaceholderConfigurer();
propsConfig.setLocation(new ClassPathResource("git.properties"));
propsConfig.setIgnoreResourceNotFound(true);
propsConfig.setIgnoreUnresolvablePlaceholders(true);
return propsConfig;
}
}
En plus de configurer la racine de notre application, nous avons créé le beanPropertyPlaceHolderConfigurer pour pouvoir accéder au fichier de propriétés généré par le plugin.
Nous avons également défini certains indicateurs, de sorte que l'application fonctionnerait correctement même si Spring ne pouvait pas résoudre le fichiergit.properties.
4.2. Manette
@RestController
public class CommitInfoController {
@Value("${git.commit.message.short}")
private String commitMessage;
@Value("${git.branch}")
private String branch;
@Value("${git.commit.id}")
private String commitId;
@RequestMapping("/commitId")
public Map getCommitId() {
Map result = new HashMap<>();
result.put("Commit message",commitMessage);
result.put("Commit branch", branch);
result.put("Commit id", commitId);
return result;
}
}
Comme vous pouvez le constater, nous injectons des propriétés Git dans des champs de classe.
Pour voir toutes les propriétés disponibles, reportez-vous au fichiergit.properties ou au Githubpage de l'auteur. Nous avons également créé un point de terminaison simple qui, sur requête HTTP GET, répondra aveca JSON contenant des valeurs injectées.
4.3. Entrée Maven
Nous allons d'abord configurer les étapes d'exécution à effectuer par le plugin, ainsi que toute autre propriété de configuration que nous jugeons utile:
pl.project13.maven
git-commit-id-plugin
2.2.1
get-the-git-infos
revision
validate-the-git-infos
validateRevision
Pour que notre code fonctionne correctement, nous devons nous retrouver avec un fichiergit.properties dans notre chemin de classe. Pour ce faire, nous avons deux options.
La première consiste à laisser le plugin générer le fichier. Nous pouvons le spécifier en définissant la propriété de configurationgenerateGitPropertiesFile sur une valeurtrue:
true
La deuxième option consiste à inclure nous-mêmes un fichiergit.properties dans le dossier des ressources. Nous ne pouvons inclure que les entrées que nous utiliserons dans notre projet:
# git.properties
git.tags=${git.tags}
git.branch=${git.branch}
git.dirty=${git.dirty}
git.remote.origin.url=${git.remote.origin.url}
git.commit.id=${git.commit.id}
git.commit.id.abbrev=${git.commit.id.abbrev}
git.commit.id.describe=${git.commit.id.describe}
git.commit.id.describe-short=${git.commit.id.describe-short}
git.commit.user.name=${git.commit.user.name}
git.commit.user.email=${git.commit.user.email}
git.commit.message.full=${git.commit.message.full}
git.commit.message.short=${git.commit.message.short}
git.commit.time=${git.commit.time}
git.closest.tag.name=${git.closest.tag.name}
git.closest.tag.commit.count=${git.closest.tag.commit.count}
git.build.user.name=${git.build.user.name}
git.build.user.email=${git.build.user.email}
git.build.time=${git.build.time}
git.build.host=${git.build.host}
git.build.version=${git.build.version}
Maven remplacera les espaces réservés par les valeurs appropriées.
Remarque: certains IDE ne fonctionnent pas bien avec ce plugin et peuvent générer une erreur de «référence d'espace réservé circulaire» lors du démarrage lorsque nous définissons les propriétés comme nous l'avons fait ci-dessus.
Après le démarrage et la demande delocalhost:8080/commitId, vous pouvez voir un fichier JSON avec une structure similaire à la suivante:
{
"Commit id":"7adb64f1800f8a84c35fef9e5d15c10ab8ecffa6",
"Commit branch":"commit_id_plugin",
"Commit message":"Merge branch 'master' into commit_id_plugin"
}
5. Intégration avec Spring Boot Actuator
Vous pouvez utiliser le plugin avecSpring Actuator facilement.
Comme vous pouvez le lire dans lesdocumentation,GitInfoContributor récupérera le fichiergit.properties s'il est disponible. Ainsi, avec la configuration du plugin par défaut, les informations Git seront renvoyées lors de l'appel du point de terminaison/info:
{
"git": {
"branch": "commit_id_plugin",
"commit": {
"id": "7adb64f",
"time": "2016-08-17T19:30:34+0200"
}
}
}
6. Conclusion
Dans ce didacticiel, nous avons montré les bases de l'utilisation demaven-git-commit-id-plugin et créé une simple application Spring Boot, qui utilise les propriétés générées par le plugin.
La configuration présentée ne couvre pas tous les drapeaux et attributs disponibles, mais couvre toutes les bases nécessaires pour commencer à travailler avec ce plugin.
Vous pouvez trouver des exemples de code surGithub.