2016-10-05 20 views
13

Tôi có một tập tin .gitlab-ci.yml mà chứa sau:Run Docker-soạn xây dựng trong .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 

Nhưng trong ci-log Tôi nhận được thông báo:

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

Tôi đang làm gì sai ?

Trả lời

5

EDIT Tôi đã thêm một câu trả lời khác cung cấp ví dụ tối thiểu cho cấu hình .gitlab-ci.yml hỗ trợ docker-compose.


docker-compose có thể được cài đặt dưới dạng gói Python, không được gửi kèm với hình ảnh của bạn. Hình ảnh bạn đã chọn thậm chí không cung cấp bản cài đặt Python:

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

Tìm Python đưa ra kết quả trống. Vì vậy, bạn phải chọn một hình ảnh khác, phù hợp với nhu cầu của bạn và lý tưởng là đã cài đặt docker-compose hoặc bạn tạo một màu.

Hình ảnh docker bạn chọn sử dụng Alpine Linux. Bạn có thể sử dụng nó làm cơ sở cho hình ảnh của riêng bạn hoặc thử một hình ảnh khác trước nếu bạn không quen với Alpine Linux.

Tôi đã gặp vấn đề tương tự và tạo Dockerfile trong kho lưu trữ GitHub công cộng và kết nối nó với tài khoản Docker Hub của tôi và chọn một bản dựng tự động để xây dựng hình ảnh của tôi trên mỗi lần đẩy tới kho lưu trữ GitHub. Sau đó, bạn có thể dễ dàng truy cập vào hình ảnh của riêng bạn với CI GitLab.

7

Nếu bạn không muốn cung cấp hình ảnh docker tùy chỉnh với docker-compose được cài đặt sẵn, bạn có thể làm cho nó hoạt động bằng cách cài đặt Python trong thời gian xây dựng. Với Python được cài đặt, bạn cuối cùng có thể cài đặt docker-compose sẵn sàng để quay lên các thùng chứa của bạn.

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/ 

Sử dụng Docker-soạn exec với -T nếu bạn nhận này hoặc một lỗi tương 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

Tôi tạo ra một container Docker đơn giản mà có docker-compose cài đặt trên đầu trang của docker:latest. Xem https://hub.docker.com/r/tmaier/docker-compose/

tập tin .gitlab-ci.yml của bạn sẽ trông như thế này:

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

@ giải pháp tmaier của dựa trên một hình ảnh bên thứ 3 và tôi không thực sự như thế này. Bạn chỉ cần cài đặt hai gói để có cấu hình dind của riêng bạn và luôn cập nhật với 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

Vì vậy, đơn giản hơn và thực sự hoạt động. – emyller

+0

@tmaier Tôi nghĩ rằng tôi cũng bị kẹt ở đây. Bạn đã sử dụng loại cài đặt Runner nào? Tôi có nghĩa là bạn đã đi theo ba cách nào? https://docs.gitlab.com/ee/ci/docker/using_docker_build.html#runner-configuration –

+0

Chúng tôi đang sử dụng trình quản lý docker-in-docker https://docs.gitlab.com/ee/ci/ docker/using_docker_build.html # use-docker-in-docker-executor – n2o

Các vấn đề liên quan