Saltar al contenido

Ejecute la compilación docker-compose en .gitlab-ci.yml

Estuvimos indagando en distintos sitios para tenerte la solución para tu problema, en caso de alguna inquietud puedes dejarnos la duda y te contestamos con gusto.

Solución:

Siguiendo la documentación oficial:

# .gitlab-ci.yml
image: docker
services:
  - docker:dind    
build:
  script:
    - apk add --no-cache docker-compose
    - docker-compose up -d

Ejemplo de docker-compose.yml:

version: "3.7"
services:
  foo:
    image: alpine
    command: sleep 3
  bar:
    image: alpine
    command: sleep 3

Personalmente, ya no seguimos este flujo, porque pierde el control sobre los contenedores en ejecución y podrían terminar funcionando sin fin. Esto se debe al ejecutor docker-in-docker. Desarrollamos un script de python como solución alternativa para eliminar todos los contenedores antiguos en nuestro CI, que se puede encontrar aquí. Pero ya no sugiero iniciar contenedores como este.

Docker también proporciona una oficial imagen: docker/compose

Esta es la solución ideal si no desea instalarlo en cada tubería.

Tenga en cuenta que en la última versión de GitLab CI/Docker probablemente necesitará otorgar acceso privilegiado a su GitLab CI Runner y configurar/deshabilitar TLS. Ver Usar el flujo de trabajo docker-in-docker con el ejecutor de Docker

variables:
  DOCKER_HOST: tcp://docker:2375/
  DOCKER_DRIVER: overlay2

# Official docker compose image.
image:
  name: docker/compose:latest

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

Tenga en cuenta que en las versiones de docker-composeantes de 1.25:

Dado que la imagen utiliza docker-compose-entrypoint.sh como punto de entrada necesitarás anular de vuelta a /bin/sh -c en tus .gitlab-ci.yml. De lo contrario, su tubería fallará con No such command: sh

    image:
      name: docker/compose:latest
      entrypoint: ["/bin/sh", "-c"]

Creé un contenedor docker simple que tiene docker-compose instalado encima de docker:latest. Consulte https://hub.docker.com/r/tmaier/docker-compose/

Su .gitlab-ci.yml archivo 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

Si para ti ha sido de utilidad este post, sería de mucha ayuda si lo compartes con más desarrolladores y nos ayudes a difundir este contenido.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *