2016-10-05 5 views
13

У меня есть .gitlab-ci.yml файл, который содержит следующее:Run докер-Compose сборки в .gitlab-ci.yml

image: docker:latest 

services: 
    - docker:dind 

before_script: 
    - docker info 
    - docker-compose --version 

buildJob: 
    stage: build 
    tags: 
    - docker 
    script: 
    - docker-compose build 

Но в ci-log я получаю сообщение:

$ docker-compose --version 
/bin/sh: eval: line 46: docker-compose: not found 

Что я делаю неправильно ?

ответ

5

EDIT Я добавил еще один ответ, предоставляющий минимальный пример конфигурации .gitlab-ci.yml, поддерживающей компоновку докеров.


docker-compose может быть установлен как пакет Python, который не поставляется с вашим изображением. Выбранное изображение даже не предусматривает установку Python:

$ docker run --rm -it docker sh 
/# find/-iname "python" 
/# 

Поиск Python дает пустой результат. Таким образом, вам нужно выбрать другое изображение, соответствующее вашим потребностям, и в идеале установить докеры или установить его самостоятельно.

Изображения докеров, которые вы выбрали, используют Alpine Linux. Вы можете использовать его в качестве основы для своего собственного изображения или попробовать другой, если вы не знакомы с Alpine Linux.

У меня была такая же проблема, и я создал файл Docker в публичном репозитории GitHub и связал его с моей учетной записью Docker Hub и выбрал автоматическую сборку для создания моего изображения при каждом нажатии в репозиторий GitHub. Затем вы можете легко получить доступ к своим изображениям с помощью GitLab CI.

7

Если вы не хотите предоставлять пользовательское изображение докеров с предустановленной док-станцией, вы можете заставить его работать, установив Python во время сборки. С установленным Python вы можете, наконец, установить докеры, готовые для разворачивания ваших контейнеров.

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/ 

Использование докер-Compose Exec с -T, если вы получите это или подобная ошибка:

$ 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 
13

Я создал простой докер контейнер, docker-compose установлен поверх docker:latest. См https://hub.docker.com/r/tmaier/docker-compose/

.gitlab-ci.yml Ваш файл будет выглядеть следующим образом:

image: tmaier/docker-compose:latest 

services: 
    - docker:dind 

before_script: 
    - docker info 
    - docker-compose --version 

buildJob: 
    stage: build 
    tags: 
    - docker 
    script: 
    - docker-compose build 
13

@ решение tmaier опирается на 3-й партии изображение, и я на самом деле не так. Вам просто нужно установить два пакета, чтобы получить свою собственную и всегда актуальную конфигурацию dind с 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 
+0

Так проще и на самом деле работает. – emyller

+0

@tmaier Я думаю, что тоже застрял. Какую «Runner-Installation» вы использовали? Я имею в виду, какой из трех способов вы ушли? https://docs.gitlab.com/ee/ci/docker/using_docker_build.html#runner-configuration –

+0

Мы используем исполнителя docker-in-docker https://docs.gitlab.com/ee/ci/ Докер/using_docker_build.html # потребительная докер-в-докер-исполнителя – n2o