Injizieren von Git-Informationen in den Frühling

1. Übersicht

In diesem Tutorial zeigen wir, wie Git-Repository-Informationen in eine von Maven erstellte Spring Boot-basierte Anwendung eingefügt werden.

Zu diesem Zweck verwenden wir das maven-git-commit-id-Plugin - ein praktisches Tool, das ausschließlich für diesen Zweck erstellt wurde.

2. Maven-Abhängigkeiten

Fügen wir ein Plugin zu a hinzu Abschnitt unserer pom.xml- Datei unseres Projekts:

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

Die neueste Version finden Sie hier. Beachten Sie, dass für dieses P lugin mindestens die Version 3.1.1 von Maven erforderlich ist.

3. Konfiguration

Das Plugin verfügt über viele praktische Flags und Attribute, die seine Funktionalität erweitern. In diesem Abschnitt werden wir einige davon kurz beschreiben. Wenn Sie alle kennenlernen möchten, besuchen Sie die Seite des maven-git-commit-id-plugins. Wenn Sie direkt zum Beispiel gehen möchten, fahren Sie mit Abschnitt 4 fort .

Die folgenden Snippets enthalten Beispiele für Plugin-Attribute. Geben Sie sie in a anAbschnitt nach Ihren Bedürfnissen.

3.1. Fehlendes Repository

Sie können es so konfigurieren, dass Fehler weggelassen werden, wenn das Git-Repository nicht gefunden wurde:

false

3.2. Speicherort des Git-Repositorys

Wenn Sie benutzerdefinierte angeben möchten .git Repositoryposition verwenden dotGitDirectory Attribut:

${project.basedir}/submodule_directory/.git

3.3. Ausgabedatei

Verwenden Sie den folgenden Abschnitt, um eine Eigenschaftendatei mit einem benutzerdefinierten Namen und / oder Verzeichnis zu generieren:

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

3.4. Ausführlichkeit

Für eine großzügigere Protokollierung verwenden Sie:

true

3.5. Eigenschaften Dateierzeugung

Sie können die Erstellung einer git.properties- Datei deaktivieren :

false

3.6. Präfix der Eigenschaften

Wenn Sie ein benutzerdefiniertes Eigenschaftspräfix angeben möchten, verwenden Sie:

git

3.7. Nur für übergeordnetes Repository

Wenn Sie mit einem Projekt mit Submodulen arbeiten, stellen Sie durch Setzen dieses Flags sicher, dass das Plugin nur für das übergeordnete Repository funktioniert:

true

3.8. Ausschluss von Eigenschaften

Möglicherweise möchten Sie einige vertrauliche Daten wie Repository-Benutzerinformationen ausschließen:

 git.user.* 

3.9. Einbeziehung von Eigenschaften

Das Einbeziehen nur angegebener Daten ist ebenfalls möglich:

 git.commit.id 

4. Beispielanwendung

Erstellen wir einen Beispiel-REST-Controller, der grundlegende Informationen zu unserem Projekt zurückgibt.

Wir werden die Beispiel-App mit Spring Boot erstellen. Wenn Sie nicht wissen, wie Sie eine Spring Boot-Anwendung einrichten, lesen Sie bitte den Einführungsartikel: Konfigurieren einer Spring Boot-Webanwendung.

Unsere App besteht aus 2 Klassen: Application und CommitIdController

4.1. Anwendung

CommitIdApplication dient als Root unserer Anwendung:

@SpringBootApplication(scanBasePackages = { "com.baeldung.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; } }

Neben der Konfiguration des Stammverzeichnisses unserer Anwendung haben wir die PropertyPlaceHolderConfigurer- Bean erstellt, damit wir auf die vom Plugin generierte Eigenschaftendatei zugreifen können.

Wir haben auch einige Flags gesetzt, damit die Anwendung reibungslos ausgeführt wird, selbst wenn Spring die Datei git.properties nicht auflösen kann.

4.2. Regler

@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; } }

Wie Sie sehen können, fügen wir Git-Eigenschaften in Klassenfelder ein.

To see all properties available refer to git.properties file or author's Github page. We also created a simple endpoint which, on HTTP GET request, will respond with a JSON containing injected values.

4.3. Maven Entry

We'll first set up the execution steps to be carried out by the plugin, plus any other configuration property that we consider useful:

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

In order for our code to work properly, we need to end up with a git.properties file in our classpath. To achieve this, we have two options.

The first one is to leave it up to the plugin to generate the file. We can specify this by setting the generateGitPropertiesFile configuration property a true value:

 true 

The second option is to include a git.properties file in the resources folder ourselves. We can include only the entries that we'll use in our project:

# 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 will replace the placeholders with the appropriate values.

Note: Some IDEs don't work well with this plugin, and might throw a ‘circular placeholder reference' error on bootstrap when we define the properties as we did above.

After booting and requesting localhost:8080/commitId you can see a JSON file with a structure similar to the following:

{ "Commit id":"7adb64f1800f8a84c35fef9e5d15c10ab8ecffa6", "Commit branch":"commit_id_plugin", "Commit message":"Merge branch 'master' into commit_id_plugin" }

5. Integration With Spring Boot Actuator

You can use the plugin with Spring Actuator easily.

Wie Sie in der Dokumentation lesen können, GitInfoContributor holen git.properties , wenn Datei zur Verfügung. Bei der Standard-Plugin-Konfiguration werden Git-Informationen beim Aufrufen von / info endpoint zurückgegeben:

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

6. Fazit

In diesem Tutorial haben wir die Grundlagen der Verwendung des maven-git-commit-id-Plugins gezeigt und eine einfache Spring Boot-Anwendung erstellt, die die vom Plugin generierten Eigenschaften verwendet.

Die vorgestellte Konfiguration deckt nicht alle verfügbaren Flags und Attribute ab, sondern alle Grundlagen, die für die Arbeit mit diesem Plugin erforderlich sind.

Codebeispiele finden Sie auf Github.