tag - Ejecute la compilación docker-compose en.gitlab-ci.yml
gitlab docker registry (5)
Creé un contenedor de ventana acoplable simple que tiene la docker-compose
crear una ventana docker-compose
instalada en la parte superior de la docker:latest
. Consulte https://hub.docker.com/r/tmaier/docker-compose/
Su archivo .gitlab-ci.yml
se vería así:
image: tmaier/docker-compose:latest
services:
- docker:dind
before_script:
- docker info
- docker-compose --version
buildJob:
stage: build
tags:
- docker
script:
- docker-compose build
Tengo un archivo .gitlab-ci.yml
que contiene lo siguiente:
image: docker:latest
services:
- docker:dind
before_script:
- docker info
- docker-compose --version
buildJob:
stage: build
tags:
- docker
script:
- docker-compose build
Pero en ci-log
recibo un mensaje:
$ docker-compose --version
/bin/sh: eval: line 46: docker-compose: not found
¿Qué estoy haciendo mal?
Docker compose también tiene una imagen oficial : docker/compose
Esta es la solución ideal si no desea instalarla en todas las tuberías.
Actualmente no tiene una etiqueta latest
, por lo que tendrá que actualizar manualmente.
Dado que la imagen utiliza docker-compose
como punto de entrada, deberá reemplazar el punto de entrada de nuevo a /bin/sh -c
en su .gitlab-ci.yml
. De lo contrario, su tubería fallará si no se ejecuta No such command: sh
# Official docker compose image. image: name: docker/compose:1.22.0 # update tag to whatever version you want to use. entrypoint: ["/bin/sh", "-c"] services: - docker:dind before_script: - docker version - docker-compose version build: stage: build script: - docker-compose down - docker-compose build - docker-compose up tester-image
La solución de @tmaier se basa en una imagen de terceros y realmente no me gusta esto. Solo tiene que instalar dos paquetes para obtener su propia configuración de dind y siempre actualizada con docker-compose:
# .gitlab-ci.yml
image: docker
services:
- docker:dind
build:
script:
- apk add --no-cache py-pip # <--
- pip install docker-compose # <--
- docker-compose up -d
Si no desea proporcionar una imagen de docker personalizada con preinstalación de composición de docker, puede hacer que funcione instalando Python durante el tiempo de compilación. Con Python instalado, finalmente puede instalar el docker-compose listo para girar sus contenedores.
image: docker:latest
services:
- docker:dind
before_script:
- apk add --update python py-pip python-dev && pip install docker-compose # install docker-compose
- docker version
- docker-compose version
test:
cache:
paths:
- vendor/
script:
- docker-compose up -d
- docker-compose exec -T php-fpm composer install --prefer-dist
- docker-compose exec -T php-fpm vendor/bin/phpunit --coverage-text --colors=never --whitelist src/ tests/
Utilice exec docker-compose con -T si recibe este o un error similar:
$ docker-compose exec php-fpm composer install --prefer-dist
Traceback (most recent call last):
File "/usr/bin/docker-compose", line 9, in <module>
load_entry_point(''docker-compose==1.8.1'', ''console_scripts'', ''docker-compose'')()
File "/usr/lib/python2.7/site-packages/compose/cli/main.py", line 62, in main
command()
File "/usr/lib/python2.7/site-packages/compose/cli/main.py", line 114, in perform_command
handler(command, command_options)
File "/usr/lib/python2.7/site-packages/compose/cli/main.py", line 442, in exec_command
pty.start()
File "/usr/lib/python2.7/site-packages/dockerpty/pty.py", line 338, in start
io.set_blocking(pump, flag)
File "/usr/lib/python2.7/site-packages/dockerpty/io.py", line 32, in set_blocking
old_flag = fcntl.fcntl(fd, fcntl.F_GETFL)
ValueError: file descriptor cannot be a negative integer (-1)
ERROR: Build failed: exit code 1
EDITAR Agregué otra respuesta proporcionando un ejemplo mínimo para una configuración .gitlab-ci.yml compatible con docker-compose.
docker-compose
se puede instalar como un paquete de Python, que no se incluye con su imagen. La imagen que eligió ni siquiera proporciona una instalación de Python:
$ docker run --rm -it docker sh
/ # find / -iname "python"
/ #
Buscando Python da un resultado vacío. Por lo tanto, tiene que elegir una imagen diferente, que se ajuste a sus necesidades y, idealmente, tiene instalada la ventana acoplable o puede crear una.
La imagen de docker que eligió utiliza Alpine Linux. Puede usarlo como base para su propia imagen o probar una diferente primero si no está familiarizado con Alpine Linux.
Tuve el mismo problema, creé un Dockerfile en un repositorio público de GitHub, lo conecté con mi cuenta de Docker Hub y elegí una compilación automática para construir mi imagen en cada envío al repositorio de GitHub. Luego, puede acceder fácilmente a sus propias imágenes con el GitLab CI.