Git-informatie in de lente injecteren

1. Overzicht

In deze tutorial laten we zien hoe je Git-repository-informatie kunt injecteren in een door Maven gebouwde Spring Boot-gebaseerde applicatie.

Om dit te doen, zullen we maven-git-commit-id-plugin gebruiken - een handige tool die uitsluitend voor dit doel is gemaakt.

2. Maven afhankelijkheden

Laten we een plug-in toevoegen aan een sectie van onze pom.xml bestand van ons project:

 pl.project13.maven git-commit-id-plugin 2.2.1 

De laatste versie vind je hier. Houd er rekening mee dat dit plugin vereist minimaal 3.1.1-versie van Maven.

3. Configuratie

De plug-in heeft veel handige vlaggen en attributen die de functionaliteit uitbreiden. In dit gedeelte gaan we enkele ervan kort beschrijven. Als je ze allemaal wilt leren kennen, bezoek dan de pagina van maven-git-commit-id-plugin, en als je direct naar het voorbeeld wilt gaan, ga dan naar sectie 4.

De volgende fragmenten bevatten voorbeelden van plugin-attributen; specificeer ze in een sectie volgens uw behoeften.

3.1. Ontbrekende opslagplaats

U kunt het configureren om fouten weg te laten als de Git-repository niet is gevonden:

false

3.2. Git Repository Locatie

Als u custom .git repository locatie, gebruik dotGitDirectory attribuut:

$ {project.basedir} /submodule_directory/.git

3.3. Uitvoerbestand

Gebruik de volgende sectie om een ​​eigenschappenbestand met een aangepaste naam en / of directory te genereren:

 $ {project.build.outputDirectory} /bestandsnaam.properties 

3.4. Breedsprakigheid

Gebruik voor meer genereuze logboekregistratie:

waar

3.5. Eigenschappen File Generation

U kunt het maken van een git.properties het dossier:

false

3.6. Eigenschappen 'Prefix

Als u een voorvoegsel voor een aangepaste eigenschap wilt opgeven, gebruikt u:

git

3.7. Alleen voor bovenliggende opslagplaats

Wanneer u met een project met submodules werkt, zorgt het instellen van deze vlag ervoor dat de plug-in alleen werkt voor de bovenliggende repository:

waar

3.8. Uitsluiting van eigenschappen

Misschien wilt u enkele gevoelige gegevens uitsluiten, zoals gebruikersinformatie uit de opslagplaats:

 git.user. * 

3.9. Eigenschappen Opname

Het opnemen van alleen gespecificeerde gegevens is ook mogelijk:

 git.commit.id 

4. Voorbeeldtoepassing

Laten we een voorbeeld van een REST-controller maken, die basisinformatie over ons project retourneert.

We zullen de voorbeeld-app maken met Spring Boot. Als u niet weet hoe u een Spring Boot-applicatie moet instellen, raadpleeg dan het inleidende artikel: Configureer een Spring Boot-webapplicatie.

Onze app zal uit 2 lessen bestaan: Toepassing en CommitIdController

4.1. Toepassing

CommitIdApplication zal dienen als een root van onze applicatie:

@SpringBootApplication (scanBasePackages = {"com.baeldung.git"}) openbare klasse CommitIdApplication {openbare statische leegte hoofd (String [] args) {SpringApplication.run (CommitIdApplication.class, args); } @Bean openbare statische PropertySourcesPlaceholderConfigurer placeholderConfigurer () {PropertySourcesPlaceholderConfigurer propsConfig = nieuwe PropertySourcesPlaceholderConfigurer (); propsConfig.setLocation (nieuwe ClassPathResource ("git.properties")); propsConfig.setIgnoreResourceNotFound (true); propsConfig.setIgnoreUnresolvablePlaceholders (true); retourneer propsConfig; }}

Naast het configureren van de root van onze applicatie, hebben we PropertyPlaceHolderConfigurer bean zodat we toegang hebben tot het eigenschappenbestand dat door de plug-in is gegenereerd.

We hebben ook enkele vlaggen ingesteld, zodat die applicatie soepel zou werken, zelfs als Spring het git.properties het dossier.

4.2. Controller

@RestController openbare klasse CommitInfoController {@Value ("$ {git.commit.message.short}") private String commitMessage; @Value ("$ {git.branch}") privé String-vertakking; @Value ("$ {git.commit.id}") private String commitId; @RequestMapping ("/ commitId") openbare kaart getCommitId () {Kaartresultaat = nieuwe HashMap (); result.put ("Commit bericht", commitMessage); result.put ("Commit branch", branch); result.put ("Commit id", commitId); resultaat teruggeven; }}

Zoals je kunt zien, injecteren we Git-eigenschappen in klassevelden.

Om alle beschikbare eigenschappen te zien, refereer je naar git.properties bestand of de Github-pagina van de auteur. We hebben ook een eenvoudig eindpunt gemaakt dat, op HTTP GET-verzoek, zal reageren met een JSON met geïnjecteerde waarden.

4.3. Maven binnenkomst

We zullen eerst de uitvoeringsstappen instellen die door de plug-in moeten worden uitgevoerd, plus eventuele andere configuratie-eigenschappen die we nuttig achten:

 pl.project13.maven git-commit-id-plugin 2.2.1 get-the-git-infos revisie validate-the-git-infos validateRevision 

Om ervoor te zorgen dat onze code correct werkt, moeten we eindigen met een git.properties bestand in ons klassenpad. Om dit te bereiken hebben we twee opties.

De eerste is om het aan de plug-in over te laten om het bestand te genereren. We kunnen dit specificeren door de GenereerGitPropertiesFile configuratie-eigenschap a waar waarde:

 waar 

De tweede optie is om een git.properties bestand in de bronnenmap zelf. We kunnen alleen de vermeldingen opnemen die we in ons project zullen gebruiken:

# 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. beschrijven} 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 zal de tijdelijke aanduidingen vervangen door de juiste waarden.

Opmerking: sommige IDE's werken niet goed met deze plug-in en kunnen een ‘circulaire placeholder-referentie'-fout op de bootstrap veroorzaken wanneer we de eigenschappen definiëren zoals hierboven.

Na opstarten en aanvragen localhost: 8080 / commitId je kunt een JSON-bestand zien met een structuur die lijkt op de volgende:

{"Commit id": "7adb64f1800f8a84c35fef9e5d15c10ab8ecffa6", "Commit branch": "commit_id_plugin", "Commit message": "Branch 'master' samenvoegen in commit_id_plugin"}

5. Integratie met Spring Boot Actuator

U kunt de plug-in gemakkelijk gebruiken met Spring Actuator.

Zoals u kunt lezen in de documentatie, GitInfoContributor zal kiezen git.properties bestand indien beschikbaar. Dus met de standaard plugin-configuratie, zal Git-informatie worden geretourneerd bij het aanroepen / info eindpunt:

{"git": {"branch": "commit_id_plugin", "commit": {"id": "7adb64f", "time": "2016-08-17T19: 30: 34 + 0200"}}}

6. Conclusie

In deze tutorial hebben we de basis laten zien van het gebruik van maven-git-commit-id-plug-in en hebben we een eenvoudige Spring Boot-applicatie gemaakt, die gebruik maakt van eigenschappen die door de plug-in zijn gegenereerd.

De gepresenteerde configuratie omvat niet alle beschikbare vlaggen en attributen, maar het omvat alle basisprincipes die nodig zijn om met deze plug-in te werken.

U kunt codevoorbeelden vinden op Github.