Sto cercando di implementare la pipeline CI / CD per il mio progetto usando Docker, Kubernetes e Jenkins. La mia applicazione è un'applicazione multi-tenant in cui le variabili dell'applicazione del database sono diverse per ogni tenant.
Strategia applicativa
Quando sto costruendo un'immagine docker sto usando un Dockerfile. E tengo il mio Dockerfile all'interno del mio repository di codice SVN. Per ogni tenant, il repository di codice è lo stesso. Quando sto costruendo un'immagine, in quel momento ho bisogno di costruire immagini diverse per inquilino diverso.
Implementazione di file Docker
Nel mio file docker sto aggiungendo un punto di ingresso come il seguente,
ENTRYPOINT ["java", "-jar", "-Dspring.profiles.active=tenant1config" , "TestProject.war"]
Se devo creare un'immagine Docker per un altro inquilino, devo aggiungere
-Dspring.profiles.active=tenant2config
Quindi l'entrata nel Dockerfile è dinamica.
La mia confusione
- Per la gestione del comando del punto di ingresso all'interno del Dockerfile è possibile in modo dinamico?
- O devo aggiungere un altro Dockerfile per un altro inquilino? E devi eseguire il comando build docker separatamente per un tenant separato?
Come posso trovare un buon modo standard di implementazione di questo problema?
ENTRYPOINT
ie... -Dspring.profiles.active=${TENANT}
quindi impostare l'ambiente corretto durante le distribuzioni.