Praxiswissen: Micronaut Environment-Konfiguration für GitLab CI/CD

von

Konfigurationen

Für eine Server-Applikation werden in der Regel verschiedene Konfigurationen abhängig von der jeweiligen Umgebung (Environment) und der Nutzung eingesetzt. Ein klassisches Beispiel hierfür ist die Datenbankverbindung, die für die Produktionsumgebung andere Parametrierungen besitzt wie im lokalen Testmodus. Auch die Einstellungen des angebundenen Mail-Servers sowie automatisch laufende Jobs unterscheiden sich normalerweise zwischen den Umgebungen.

Micronaut stellt verschiedene Formate (YAML, JSON, ...) zum Setzen der Konfigurationen zur Verfügung. Am bekanntesteten ist die Nutzung der application.yml Dateien. Abhängig von der Umgebung erhält diese Datei ein Suffix wie bspw. application-test.yml zum Setzen Umgebungs-spezifischer Eigenschaften.
Neben den Dateien können Konfiguration auch über Umgebungs-Variablen gesetzt und überschrieben werden.

GitLab CI/CD

Für Continuous Integration und Continuous Delivery erfreut sich GitLab CI/CD zwischenzeitlich großer Beliebtheit. Hauptgründe sind die direkte Verbindung zwischen Source-Code-Verwaltung und gleichzeitigen CI/CD-Funktionalitäten in einem Werkzeug sowie die einfache Integration mit Containern.

Beim Durchlaufen der CI/CD-Pipelines sind automatisierte Tests einer der Kernaspekte. Die Konfiguration für die Durchführung von Tests mit GitLab CI/CD kann, abhängig vom Projekt, unterschiedlich zu den Einstellungen für die Durchführung von lokalen Tests sein. Dies bedeutet, dass Einträge in der Datei application-test.yml nicht valide für die Ausführung mit der CI/CD Pipeline sind.

Individuelle Umgebungs-Konfiguration einrichten

Für die Durchführung der Tests über GitLab CI/CD bietet sich deshalb die Erstellung einer separaten YAML-Datei application-gitlab.yml an.

Die Vorteile einer solchen Datei mit allen individuellen Definitionen sind darin zu sehen, dass diese im gleichen Verzeichnis wie die anderen Standard-Konfigurations-Dateien abgelegt und mit versioniert werden kann. Dadurch hat man im Vergleich zu Umgebungsvariablen immer alles auf einen Blick und Änderungen bzw. Erweiterungen können bequem von den Entwicklern in der IDE vorgenommen werden.

Übersicht YAML-Dateien

Um für eine ausführbare Micronaut-Applikation die Konfiguration aus einer separaten Datei zu nutzen, kann diese einfach mit dem entsprechenden Parameter gestartet werden. Die Datei wird automatisch angezogen, wenn sie im gleichen Verzeichnis oder im Classpath liegt.

java -Dmicronaut.environments=gitlab -jar myapp.jar

Die Ausführung der Tests erfolgt jedoch nicht mit einer fertigen Applikation, sondern über das Build-Tool von Micronaut. Hier stehen gradle und maven zur Auswahl.
Dies hat zur Folge, dass die Umgebung nicht analog wie bei einer ausführbaren Applikation mitgegeben werden kann.

Durch Nutzen der Umgebungsvariable MICRNAUT_CONFIG_FILES existiert jedoch ein einfacher Weg für die Bekanntmachung der individuellen Konfigurationen.
Diese Variable referenziert die für GitLab spezifische Datei. Beim Ausführen der Tests mit gradlew test werden die Einstellungen aus der referenzierten Datei angezogen.

Ausschnitt aus der Pipeline-Definition .gitlab-ci-yml

test:
  stage: test
  services:
    - mysql:5.7
  variables:
    MYSQL_DATABASE: "myapp"
    MYSQL_ROOT_PASSWORD: "mypassword"
  script:
    - export MICRONAUT_CONFIG_FILES=./src/main/resources/application-gitlabci.yml    
    - ./gradlew clean test --stacktrace
  artifacts:
    expire_in: 7 days
    when: always
    reports:
      junit: ./build/test-results/**/TEST-*.xml

Alle Ausführungsschritte der GitLab Pipeline werden in der Datei .gitlab-ci.yml definiert. Im oben aufgeführten Listing sind in der Sektion script die für Micronaut vorgenommenen Settings zu sehen.

 

 

 

Kategorien: JavaMicronaut

Zurück