docker - Terminar la ventana acoplable componer cuando finalice el contenedor de prueba
docker-compose concourse (5)
La solución que encontré más elegante es utilizar depends_on
en su archivo docker-compose.yml
.
services:
dynamodb:
...
test_runner:
...
depends_on:
- dynamodb
Ahora puede usar la docker-compose run --rm test_runner
que configurará sus dependencias, ejecutará sus pruebas, eliminará todo y propagará el código de retorno.
docker-compose run test_runner false
Starting test_dynamodb_1 ... done
echo $?
1
docker-compose run test_runner true
Starting test_dynamodb_1 ... done
echo $?
Actualmente estoy ejecutando una pila de composición acoplable para las pruebas de integración básicas con un corredor de prueba de transportadores, un servidor nodejs que sirve una página web y un servidor wildfly que sirve un servidor Java.
La pila se ejecuta desde un contenedor dind (docker in docker) en mi servidor de compilación (concourse ci).
Pero parece que los contenedores no terminan al terminar las pruebas del transportador.
Entonces, como los contenedores para wildfly y nodejs todavía están ejecutando, la tarea de compilación nunca termina ...
¿Cómo puedo hacer que la composición finalice con éxito o fracaso cuando las pruebas hayan finalizado?
# Test runner
test-runner:
image: "${RUNNER_IMG}"
privileged: true
links:
- client
- server
volumes:
- /Users/me/frontend_test/client-devops:/protractor/project
- /dev/shm:/dev/shm
entrypoint:
- /entrypoint.sh
- --baseUrl=http://client:9000/dist/
- /protractor/conf-dev.js
- --suite=remember
# Client deployment
client:
image: "${CLIENT_IMG}"
links:
- server
# Server deployment
server:
image: "${SERVER_IMG}"
Puede realizar tareas de limpieza utilizando ensure
en un paso de tarea en Concourse. https://concourse-ci.org/ensure-step.html
En su caso, podría agregar un bloque de garantía después de las pruebas de su transportador y ejecutar una tarea para derribar lo que antes se docker-compose
. También puede usar un paso de on-success
https://concourse-ci.org/on-success-step.html para hacer el desmontaje, y los contenedores y los contenedores de la docker-compose
se mantendrían si sus pruebas fallan.
Puede utilizar estos parámetros de composición acoplable para lograr eso:
--abort-on-container-exit
Detiene todos los contenedores si se detuvo algún contenedor.
--exit-code-from
Devuelve el código de salida del contenedor de servicio seleccionado.
Por ejemplo, tener este docker-compose.yml
:
version: ''2.3''
services:
elasticsearch:
...
service-api:
...
service-test:
...
depends_on:
- elasticsearch
- service-api
El siguiente comando asegura que elasticsearch
y service-api
se service-api
vez finalizada service-test
, y devuelve el código de salida del contenedor service-test
:
docker-compose -f docker-compose.yml up /
--abort-on-container-exit /
--exit-code-from service-test
Similar a este rspec q / a , debe ejecutar las pruebas como una tarea independiente que informe un estado de salida a su CI.
Podría separar el corredor de prueba en su propio yaml o modificar el corredor de prueba para que se establezca por defecto en un comando no op / entrypoint.
Separa el corredor de prueba
Especifique la configuración del test-runner
separado (Es posible que deba actualizar a las networks
versión 2 en lugar de usar links
para trabajar en varios archivos de redacción ).
docker-compose up -d
docker-compose -f test-runner.yml run test-runner
rc=$?
docker-compose down
exit $rc
Ningún corredor de prueba op
Por defecto, el test-runner
a un punto de entrada / comando no op y luego ejecute manualmente el comando de prueba
services:
test-runner:
image: "${RUNNER_IMG}"
command: ''true''
Entonces
docker-compose up -d
docker-compose run test-runner /launch-tests.sh
rc=$?
docker-compose down
exit $rc
Códigos de retorno
Si su CI tiene el concepto de "publicar tareas", es posible que pueda omitir la captura de rc
y simplemente ejecutar la docker-compose down
después de que la tarea de prueba del corredor de prueba haya finalizado. También es posible que su IC limpie los contenedores por usted.
Para evitar tener archivos de configuración separados , puede actualizar la configuración de la depends_on acoplable para introducir las dependencias entre los servicios con la opción depends_on , disponible desde el formato de la versión 2 en adelante. Como resultado, el inicio del test-runner
iniciará la ejecución de los clientes.
Tenga en cuenta que si necesita esperar un momento en que el servidor web real se inicie desde los servicios que está probando, puede usar el script wait-for-it.sh para esperar hasta que el servidor esté disponible.
# Test runner
test-runner:
image: "${RUNNER_IMG}"
privileged: true
links:
- client
- server
volumes:
- /Users/me/frontend_test/client-devops:/protractor/project
- /dev/shm:/dev/shm
depends_on:
- client
entrypoint:
- wait-for-it.sh
- client
- -t
- ''180''
- --
- /entrypoint.sh
- --baseUrl=http://client:9000/dist/
- /protractor/conf-dev.js
- --suite=remember
# Client deployment
client:
image: "${CLIENT_IMG}"
depends_on:
- server
links:
- server
# Server deployment
server:
image: "${SERVER_IMG}"
Después de actualizar la configuración, el sencillo docker-compose up test-runner
activará el inicio de los servicios relacionados.