Как мне получить несколько изображений докеров, доступных в один этап Git lab CI - PullRequest
0 голосов
/ 27 июня 2019

У меня есть следующее .gitlab-ci.yml

stages:
  - test
  - build
  - art

image: golang:1.9.2

variables:   
  BIN_NAME: example
  ARTIFACTS_DIR: artifacts   
  GO_PROJECT: example
  GOPATH: /go

before_script:
  - mkdir -p ${GOPATH}/src/${GO_PROJECT}
  - mkdir -p ${CI_PROJECT_DIR}/${ARTIFACTS_DIR}
  - go get -u github.com/golang/dep/cmd/dep
  - cp -r ${CI_PROJECT_DIR}/* ${GOPATH}/src/${GO_PROJECT}/
  - cd ${GOPATH}/src/${GO_PROJECT}

test:   
  stage: test
  script:
    # Run all tests
    go test -run ''

build:   
 stage: build
 script:
    # Compile and name the binary as `hello`
    - go build -o hello
    - pwd
    - ls -l hello
    # Execute the binary
    - ./hello
    # Move to gitlab build directory
    - mv ./hello ${CI_PROJECT_DIR}   artifacts:
    paths:
    - ./hello

Проблема в том, что моя программа зависит как от Go, так и от Mysql ...

Я знаю, что у меня может быть другой образ докерадля каждого этапа, но мой этап тестирования требует и

go test & MySql

Что я изучил:

Я научился создавать свой собственный образ докера на основе фиксации Docker, а также как использоватьфайл докера для создания и создания образа.

Однако я слышал, что есть способ связать контейнеры докеров, используя docker compose, и это кажется лучшим способом ...

Понятия не имеюкак это сделать в GitLab, я знаю, что мне нужен файл compose.yml, но я не уверен, куда его поместить, что нужно в нем добавить, создает ли он изображение, на которое я затем ссылаюсь из моего файла .gitlab-ci.yml?

Может быть, все кончено, и есть более простой способ?

1 Ответ

1 голос
/ 27 июня 2019

Я понимаю, что для ваших тестов нужен MySQL-сервер для работы и что вы используете какой-либо клиент MySQL или драйвер в своих тестах Go.

Вы можете использовать Gitlab CI service, который будет доступен во время вашей test работы.GitlabCI будет запускать MySQL-контейнер рядом с вашим Go-контейнером, который будет доступен через его имя из Go-контейнера.Например:

test:   
  stage: test
  services: 
  - mysql:5.7
  variables:
    # Configure mysql environment variables (https://hub.docker.com/_/mysql/)
    MYSQL_DATABASE: mydb
    MYSQL_ROOT_PASSWORD: password
  script:
    # Run all tests
    go test -run ''

Запустит контейнер MySQL, и он будет доступен из контейнера Go через имя хоста mysql.Обратите внимание, что вам нужно определить variables для запуска MySQL в соответствии с разделом Переменные окружения документации по образу (например, для создания корневого пароля или базы данных)

Вы также можете определить службуглобально (будет доступно для каждого задания в вашей сборке) и использовать псевдоним , чтобы сервер MySQL был доступен с другого имени хоста.

...