Próbuję zaimplementować potok CI / CD dla mojego projektu za pomocą Docker, Kubernetes i Jenkins. Moja aplikacja to aplikacja dla wielu dzierżawców, w której zmienne aplikacji bazy danych są różne dla różnych dzierżawców.
Strategia aplikacji
Kiedy buduję obraz dokera, korzystam z Dockerfile. I trzymam mój plik Docker w repozytorium kodu SVN. Dla każdego najemcy repozytorium kodu jest takie samo. Kiedy buduję obraz, muszę budować różne obrazy dla różnych najemców.
Implementacja Dockerfile
W moim pliku dokera dodaję punkt wejścia w następujący sposób,
ENTRYPOINT ["java", "-jar", "-Dspring.profiles.active=tenant1config" , "TestProject.war"]
Jeśli muszę zbudować obraz Dockera dla innego najemcy, muszę go dodać
-Dspring.profiles.active=tenant2config
Zatem punkt wejścia w Dockerfile jest dynamiczny.
Moje zamieszanie
- Do zarządzania poleceniem punktu wejścia w Dockerfile jest możliwe dynamicznie?
- Czy też muszę dodać kolejny plik Docker dla innego najemcy? I potrzebujesz osobno uruchomić polecenie kompilacji dokera dla osobnego najemcy?
Jak znaleźć dobry standardowy sposób realizacji tego problemu?
ENTRYPOINT
tj.... -Dspring.profiles.active=${TENANT}
Następnie ustawić poprawne środowisko podczas wdrażania.