En primer lugar vamos a incluir el plugin de avast
en nuestro build:
build.gradle
plugins {
id "java" (1)
....
id "com.avast.gradle.docker-compose" version "0.15.2" (2)
}
1 |
Si es un proyecto java sueles tener este plugin, pero no es necesario para este post |
2 |
Añadimos el pluign de Avast, la ultima version a día de hoy |
Esto nos va añadir una serie de tasks
en el grupo docker
como por ejemplo composeUp
y composeDown
que obviamente sirven para gestionar un docker-compose que le indiquemos
En segundo lugar vamos a indicarle al plugin donde reside nuestro docker-compose
build.gradle
dockerCompose {
useComposeFiles.add("infra/docker-compose.yml")
isRequiredBy(tasks.run)
}
En este ejemplo le estamos diciendo que tenemos un docker-compose en el directorio infra
y
que la tarea que está interesada en controlar el estado del docker-compose es run
(tipica tarea
para correr el java)
Por último vamos a "enlazar" los servicios del docker con nuestra tarea que ejecuta la aplicación mediante variables de entorno:
build.gradle
run.doFirst {
dockerCompose.exposeAsEnvironment(run)
def mysqlInfo = dockerCompose.servicesInfos.mysql.firstContainer (1)
def redisInfo = dockerCompose.servicesInfos.cache.firstContainer (2)
def businessInfo = dockerCompose.servicesInfos.business.firstContainer (3)
environment "JDBC_URL", "mysql://${mysqlInfo.host}:${mysqlInfo.ports[3306]}/"
environment "REDIS_HOST", redisInfo.host
environment "REDIS_PORT", redisInfo.ports[6379]
environment "SERVICE_API_URL", "http://${businessInfo.host}:${businessInfo.ports[8080]}/api/"
}
1 |
servicesInfos.mysql obtiene info del servicio llamado mysql en el docker-compose |
2 |
servicesInfos.cache obtiene info del servicio llamado cache en el docker-compose |
3 |
servicesInfos.business obtiene info del servicio llamado business en el docker-compose |
El plugin se encarga de levantar los servicios y proporcionarnos información sobre los puertos
donde está escuchando cada uno, información que usamos para configurar nuestra tarea. En este
ejemplo configuramos un jdbc, un host y un puerto y una url a un api que son las variables
que se supone requiere nuestra aplicacion para poder ejecutarse correctamente.
Cuando ejecutemos la tarea run
, los servicios se levantan, se ejecuta nuestra aplicación y cuando
paramos la tarea, el plugin se encarga de parar el docker-compose (alguna vez me ha fallado y me ha tocado
pararlos a mano usando la tarea composeDown
)
- NOTE
-
Este plugin tiene unas cuantas configuraciones interesantes adicionales que iré investigando