Ich versuche, die CI / CD-Pipeline für mein Projekt mit Docker, Kubernetes und Jenkins zu implementieren. Meine Anwendung ist eine mandantenfähige Anwendung, bei der Datenbankanwendungsvariablen für verschiedene Mandanten unterschiedlich sind.
Anwendungsstrategie
Wenn ich ein Docker-Image erstelle, verwende ich eine Docker-Datei. Und ich behalte meine Docker-Datei in meinem SVN-Code-Repository. Das Code-Repository ist für jeden Mandanten gleich. Wenn ich ein Image erstelle, muss ich zu diesem Zeitpunkt verschiedene Images für verschiedene Mandanten erstellen.
Dockerfile-Implementierung
In meiner Docker-Datei füge ich einen Einstiegspunkt wie den folgenden hinzu:
ENTRYPOINT ["java", "-jar", "-Dspring.profiles.active=tenant1config" , "TestProject.war"]
Wenn ich ein Docker-Image für einen anderen Mandanten erstellen muss, muss ich hinzufügen
-Dspring.profiles.active=tenant2config
Der Einstiegspunkt in der Docker-Datei ist also dynamisch.
Meine Verwirrung
- Zum Verwalten von Einstiegspunktbefehlen innerhalb der Docker-Datei ist dynamisch möglich?
- Oder muss ich eine weitere Docker-Datei für einen anderen Mandanten hinzufügen? Und müssen Sie den Docker-Build-Befehl separat für einen separaten Mandanten ausführen?
Wie kann ich einen guten Standard für die Implementierung dieses Problems finden?
ENTRYPOINT
dh... -Dspring.profiles.active=${TENANT}
während Ihrer Bereitstellungen die richtige Umgebung festlegen.