Tengo una aplicación web Spring Boot que necesito implementar en Tomcat usando Jenkins.

He configurado la canalización y la implementación ocurre muy bien.

Pero tengo dos perfiles en mi aplicación. Uno para desarrollo y otro para producción. Algunas propiedades, como las URL de la base de datos, etc., son diferentes para cada uno de estos perfiles.

Entonces, tengo dos archivos de propiedades dentro de src/main/resources de la siguiente manera:

application-dev.properties
application-prod.properties

Además, tengo otro application.properties en el mismo directorio que tiene solo una propiedad (la del perfil activo)

spring.profiles.active=dev

Ahora, cuando ejecuto esto a través de Eclipse, las cosas funcionan bastante bien. Incluso cuando Jenkins implementa WAR en Tomcat, todo está bien, excepto por un problema. No puedo cambiar el valor de spring.profiles.active a prod antes de que ocurra la implementación en Tomcat.

Actualmente, mi SVN tiene el archivo application.properties comprometido con spring.profiles.active = prod

Cuando alguien revisa el código y está trabajando en sus entornos locales, lo cambia a "dev" y continúa trabajando, y simplemente no envía este cambio al SVN. Esta es una solución temporal que sigo y creo que se puede hacer de una manera más eficiente.

¿Cómo tengo el mismo archivo WAR y simplemente cambio el perfil sin tener que modificar mi archivo application.properties? ¿Se puede hacer esto en Jenkins? ¿O debería buscar en otro lugar?

Gracias Sriram Sridharan.

0
Sriram Sridharan 4 feb. 2019 a las 16:58

2 respuestas

La mejor respuesta

El primer paso es eliminar el nombre del perfil codificado del archivo de propiedades y luego puede controlar qué perfil activar a través de la variable de entorno configurando SPRING_PROFILES_ACTIVE=dev. Es lo mismo que configurar spring.profiles.active=dev en el archivo de propiedades.

1
Yogesh Badke 4 feb. 2019 a las 14:24

Si está utilizando la aplicación Spring Boot, antes de ejecutar la aplicación, debe proporcionar -Dspring.profiles.active = prod. Por defecto, las variables de entorno de Spring anulan las configuraciones presentes en el archivo de propiedades. Pero estoy de acuerdo con la respuesta dada por yogesh de que el perfil no debe estar codificado en la aplicación.

Ahora que llegan a los desarrolladores cuando revisan el código, también pueden proporcionar -Dspring.profiles.acitve = dev como argumentos en configuraciones de ejecución eclipse o intellij.

Es un cambio de configuración único en eclipse / intellij y funciona muy bien. Estamos usando esto en nuestro proyecto y realmente ayuda.

0
whysoseriousson 4 feb. 2019 a las 15:56