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

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.