Git-Informationen in den Frühling injizieren

Injizieren von Git-Informationen in den Frühling

1. Überblick

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

Dazu verwenden wirmaven-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 einem<plugins>-Abschnitt unsererpom.xml-Datei unseres Projekts hinzu:


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

Sie finden die neueste Versionhere. Beachten Sie, dass dieseplugin requires at least 3.1.1 version of Maven.

3. Aufbau

Das Plugin verfügt über viele praktische Flags und Attribute, die seine Funktionalität erweitern. In diesem Abschnitt werden wir einige von ihnen kurz beschreiben. Wenn Sie alle kennenlernen möchten, besuchen Sie diepage undif you want to go straight to the example, go to section 4 des maven-git-commit-id-Plugins.

Die folgenden Snippets enthalten Beispiele für Plugin-Attribute. Geben Sie sie entsprechend Ihren Anforderungen in einem<configuration></configuration>-Abschnitt an.

3.1. Fehlendes Repository

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

false

3.2. Speicherort des Git-Repositorys

Wenn Sie den Repository-Speicherort des benutzerdefinierten.gitangeben möchten, verwenden Sie das AttributdotGitDirectory:

${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 einergit.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 Projekten 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 bestimmter 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:Configure a Spring Boot Web Application.

Unsere App besteht aus 2 Klassen:Application undCommitIdController

4.1. Anwendung

CommitIdApplication dient als Wurzel unserer Anwendung:

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

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

Wir haben auch einige Flags gesetzt, damit die Anwendung auch dann reibungslos läuft, wenn Spring die Dateigit.propertiesnicht 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, fügen wir Git-Eigenschaften in Klassenfelder ein.

Informationen zu allen verfügbaren Eigenschaften finden Sie in der Dateigit.propertiesoder im Githubpagedes Autors. Wir haben auch einen einfachen Endpunkt erstellt, der auf HTTP-GET-Anforderung mita JSON antwortet, die injizierte Werte enthalten.

4.3. Maven Eintrag

Wir richten zunächst die Ausführungsschritte ein, die vom Plugin ausgeführt werden sollen, sowie alle anderen Konfigurationseigenschaften, die wir für nützlich halten:


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

Damit unser Code ordnungsgemäß funktioniert, müssen wir einegit.properties -Datei in unserem Klassenpfad haben. Um dies zu erreichen, haben wir zwei Möglichkeiten.

Die erste besteht darin, es dem Plugin zu überlassen, die Datei zu generieren. Wir können dies angeben, indem wir die Konfigurationseigenschaft vongenerateGitPropertiesFileauf einen Wert vontrueetzen:


    true

Die zweite Möglichkeit besteht darin, einegit.properties-Datei selbst in den Ressourcenordner aufzunehmen. Wir können nur die Einträge aufnehmen, die wir in unserem Projekt verwenden werden:

# 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 ersetzt die Platzhalter durch die entsprechenden Werte.

Hinweis: Einige IDEs funktionieren mit diesem Plugin nicht gut und verursachen möglicherweise einen Fehler "Zirkuläre Platzhalterreferenz" auf dem Bootstrap, wenn wir die Eigenschaften wie oben definieren.

Nach dem Booten und Anfordern vonlocalhost:8080/commitId wird eine JSON-Datei mit einer ähnlichen Struktur angezeigt:

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

5. Integration mit Spring Boot Actuator

Sie können das Plugin problemlos mitSpring Actuator verwenden.

Wie Sie indocumentation lesen können, nimmtGitInfoContributor die Dateigit.properties auf, falls verfügbar. Bei der Standard-Plugin-Konfiguration werden Git-Informationen zurückgegeben, wenn der Endpunkt von/infoaufgerufen wird:

{
  "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 vonmaven-git-commit-id-plugin 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.

Sie finden Codebeispiele fürGithub.