Gitlab CI与docker-compose

时间:2018-04-23 13:10:11

标签: docker continuous-integration docker-compose gitlab

有一个项目 https://github.com/codeship-library/nodejs-express-todoapp

我需要做的是使用docker和Gitlab在Gitlab中实现一个管道,以获取像http://feature_ *。$ projectname.example.com这样推送的任何分支的链接。 此外,每个版本都应放在本地docker注册表中(已配置)。

如果我的方向错误,请提示。 我应该使用哪个跑步者“shell”或“docker”?

这些配置使用shell runner运行一次,但后来我开始获得权限问题,我认为当git正在进行清理时。

实施此方法的最佳方法是什么?

.gitlab-ci.yml

image: node:7.7.2-alpine

stages:
  - build
  - test
  - review
  - deploy

variables:
  TEST_IMAGE: registry.gitlab.example.com:4567/root/nodejs-express-todoapp:$CI_COMMIT_REF_NAME

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

build:
  stage: build
  script:
    - echo "BUILD"
    - docker-compose build
    - docker-compose push

test:
  stage: test
  script:
    - echo "TEST"
  allow_failure: true

review:
  stage: review
  script:
    - echo "REVIEW"
  when: manual

deploy_dev:
  tags:
    - dev
  stage: deploy
  script:
    - echo "DEPLOY"
    - docker-compose up -d
  environment:
    name: dev
    url: http://$CI_COMMIT_REF_NAME.$CI_PROJECT_NAME.$GITLAB_USER_LOGIN.projects.example.com:3000
  only:
  - branches

undeploy_dev:
  tags:
    - dev
  stage: deploy
  script:
    - docker-compose stop
  when: manual
  environment:
    name: dev
    action: stop

Dockerfile

FROM node:7.7.2-alpine

WORKDIR /usr/app

RUN apk update && apk add postgresql

COPY package.json .
RUN npm install --quiet

COPY . .

搬运工-compose.yml

version: '3'
services:
  web:
    build: .
    command: npm run dev
    volumes:
    - .:/usr/app/
    - /usr/app/node_modules
    ports:
      - "3000:3000"
    depends_on:
      - postgres
    environment:
      DATABASE_URL: postgres://todoapp@postgres/todos
    image: registry.gitlab.example.com:4567/root/nodejs-express-todoapp

  postgres:
    image: healthcheck/postgres:alpine
    environment:
      POSTGRES_USER: todoapp
      POSTGRES_DB: todos

1 个答案:

答案 0 :(得分:1)

如果是你的跑步者docker docker-in-docker服务(dind),那么这是最好的选择。

您需要拥有跑步者,因为您需要激活privileged模式。

为此,请在您的config.toml上找到您的privileged = true配置中的runners.docker

[[runners]]
  [runners.docker]
    privileged = true

通过启用privileged,您实际上会禁用容器的所有安全机制,并使您的主机暴露于可能导致容器突破的权限提升。

无论如何,对于其他方式,请参阅公共文档。无论如何,我建议你阅读它,它有很多有用的信息!

https://docs.gitlab.com/ce/ci/docker/using_docker_build.html