gitlab.com CI docker-撰写

gitlab.com CI docker-compose

我已经 docker 化了我的应用程序并在本地使用 docker-compose 到 运行 它。我想使用我在本地使用的相同 docker-compose 命令在 CI 运行ner 上构建和测试我的应用程序,但我似乎找不到任何关于如何操作的文档?

我正在使用 gitlab.com,documentation 说您应该只使用 docker 图片。只有 docker-compose 似乎不再包含标准图像...

在 GitLab CI 中使用 docker-compose 的最佳方法是什么?

编辑:用例

.gitlab-ci.yml

image: docker:latest

variables:
  DOCKER_DRIVER: overlay
  WORKER_TEST_IMAGE: registry.gitlab.com/org/project/worker:$CI_COMMIT_REF_NAME
  WORKER_RELEASE_IMAGE: registry.gitlab.com/org/project/worker:latest

services:
  - postgres:9.6.3
  - docker:dind

stages:
- build
- test
- release
- deploy

before_script:
  - docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY

build_worker:
  stage: build
  script:
    - docker build --pull -t $WORKER_TEST_IMAGE .
    - docker push $WORKER_TEST_IMAGE

test_worker:
  stage: test
  script:
    - docker pull $WORKER_TEST_IMAGE
    # I need a way to connect the postgres service to the image I'm 
    # trying to run. Which doesn't seem possible?
    # - docker-compose run worker dockerize -wait tcp://postgres:5432 nosetests
    - docker run $WORKER_TEST_IMAGE dockerize -wait tcp://postgres:5432 nosetests
...

我觉得 Gitlab CI 让我重新实现 docker-compose 因为他们不支持它?

Gitlab CI 有自己的 docker 语法,不支持 docker-compose。因此 docker-compose 仅​​在您使用称为 dind 的机制(docker in docker)时才有效,您必须将主机系统的 docker 套接字挂载到您的CI 跑步者。迟早你会发现这种方法有严重的局限性,可能会引入更多的运行器配置并且缺乏文档。

虽然可能,但你真的应该坚持官方的 gitlab 方式。仔细阅读 https://docs.gitlab.com/ce/ci/docker/using_docker_images.html,您将能够以与 docker-compose 类似的方式轻松使用多个 docker 容器。