Estoy tratando de implementar la canalización de CI / CD para mi proyecto usando Docker, Kubernetes y Jenkins. Mi aplicación es una aplicación multiinquilino en la que las variables de la aplicación de base de datos son diferentes para un inquilino diferente.
Estrategia de aplicación
Cuando estoy creando una imagen de Docker estoy usando un Dockerfile. Y mantengo mi Dockerfile dentro de mi repositorio de código SVN. Para cada inquilino, el repositorio de código es el mismo. Cuando estoy construyendo una imagen, en ese momento necesito construir diferentes imágenes para diferentes inquilinos.
Implementación de Dockerfile
En mi archivo acoplable estoy agregando un punto de entrada como el siguiente,
ENTRYPOINT ["java", "-jar", "-Dspring.profiles.active=tenant1config" , "TestProject.war"]
Si necesito crear una imagen de Docker para otro inquilino, debo agregar
-Dspring.profiles.active=tenant2config
Entonces el punto de entrada en el Dockerfile es dinámico.
Mi confusión
- ¿Para gestionar el comando de punto de entrada dentro del Dockerfile es posible dinámicamente?
- ¿O necesito agregar otro Dockerfile para otro inquilino? ¿Y necesita ejecutar el comando Docker Build por separado para un inquilino separado?
¿Cómo puedo encontrar una buena forma estándar de implementación de este problema?
ENTRYPOINT
ejemplo... -Dspring.profiles.active=${TENANT}
, es decir , establecer el entorno correcto durante sus implementaciones.