如何在gitlab-ci-runner-docker中使用docker和npm

时间:2017-05-26 19:41:02

标签: docker npm gitlab gitlab-ci gitlab-ci-runner

我正在使用带有docker:dind的gitlab-ci作为服务。

问题

我正在尝试使用Gitlab-CI运行npm run build,后跟docker build

我能够通过这种方式在docker中使用docker构建:

这是我的跑步者config.toml

$ cat /etc/gitlab-runner/config.toml 
concurrent = 4
check_interval = 0

[[runners]]
  name = "developers_gitlab_school-gitlab-runner-docker"
  url = "https://school.domain.com"
  token = "cd09f40c6a4....a44751fec795e35"
  executor = "docker"
  builds_dir = "/mnt/mesos/sandbox/builds"
  cache_dir = "/mnt/mesos/sandbox/cache"
  [runners.docker]
    tls_verify = false
    image = "docker:latest"
    privileged = true
    disable_cache = false
    volumes = ["/cache"]
    shm_size = 0
  [runners.cache]

这是.gitlab-ci.yml

的示例
image: docker:latest
# image: mcasimir/dind-node-build-runner:latest

variables:
  DOCKER_DRIVER: overlay2

services:
  - docker:dind

before_script:
  - docker info
  - docker --version
  - docker login -u ${REGISTRY_USERNAME} -p ${REGISTRY_PASSWORD} ${REGISTRY_URL}

stages:
  - build

# Job: Build
build_dev:
  stage: build
  script:
    - docker build -t group/mail-server/dev:${CI_JOB_ID} .
  only:
    - dev
  tags:
    - docker

build_master:
  stage: build
  script:
    - docker build -t domain/mail-server:${CI_JOB_ID} .
    - docker build -t domain/mail-server:latest .
  only:
    - master
  tags:
    - docker
  1. 当我使用docker和npm的图像构建mcasimir/dind-node-build-runner:latest时 我有:

    Cannot connect to the Docker daemon. Is the docker daemon running on this host?. 
    
  2. 当我使用图片docker:latest时,docker-in-docker 正常工作,但我仍然需要npm。

  3. 问题:

    因为docker:latest的Dockerfile不公开,而且因为我无法使用此图片中的apt-get,所以我想知道:

    • 如果有方法可以在gitlab-ci中运行 docker npm 的图像?

2 个答案:

答案 0 :(得分:4)

因为它是一个基于阿尔卑斯山的图像,你没有apt-get,你有apk。因此,使用默认docker:latest只需添加此apk --update add nodejs

before_script:
    - apk --update add nodejs

你准备好了dind和nodejs。

答案 1 :(得分:0)

如果我们查看停靠者容器的source code,我们可以看到正在设置一个变量:$DOCKER_HOST,这就是你需要的只需添加export DOCKER_HOST='tcp://docker:2375'作为构建中的一个步骤或将DOCKER_HOST设置为全局变量。然后你可以使用你想要的任何图像,而不仅仅是docker:latest

dockeralpine:
  image: alpine
  services:
   - docker:dind
  variables:
    DOCKER_HOST: "tcp://docker:2375"
  tags: 
   - docker
  script:
   - apk --update add docker
   - docker ps

dockerubuntu:
  image: ubuntu
  services:
   - docker:dind
  variables:
    DOCKER_HOST: "tcp://docker:2375"
  tags: 
   - docker
  script:
   - apt update
   - apt install -yqq docker.io
   - docker ps