如何在gitlab-ci-runner-docker中具有docker和npm

Dim*_*iwa 2 npm gitlab docker gitlab-ci gitlab-ci-runner

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

问题

我正在尝试在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]
Run Code Online (Sandbox Code Playgroud)

这是一个例子 .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
Run Code Online (Sandbox Code Playgroud)
  1. 当我使用带有docker和npm的映像进行构建mcasimir / dind-node-build-runner:latest时, 我有:

    Cannot connect to the Docker daemon. Is the docker daemon running on this host?. 
    
    Run Code Online (Sandbox Code Playgroud)
  2. 当我使用image时docker:latest,docker-in-docker 工作正常,但我仍然需要npm。

题:

因为的Dockerfile docker:latest不是公开的,并且由于我无法apt-get从该映像使用,所以我想知道:

  • 如果有办法有一个可运行的图像码头工人NPM在gitlab慈?

Rob*_*ert 5

因为它是基于高山的图像,所以您没有apt-get,而是拥有apk。因此,使用默认值docker:latest只需添加以下内容apk --update add nodejs

before_script:
    - apk --update add nodejs
Run Code Online (Sandbox Code Playgroud)

您已经准备好使用dind和nodejs。