首页 文章

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

提问于
浏览
1

我使用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]

这是 .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
Cannot connect to the Docker daemon. Is the docker daemon running on this host?.
  • 当我使用image docker:latest ,docker-in-docker work fine 但我还需要npm .

问题:

因为 docker:latest 的Dockerfile不是公共的,并且因为我无法使用此图像中的 apt-get ,所以我想知道:

  • 如果有办法让图像可以在gitlab-ci中运行 dockernpm

2 回答

  • 3

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

    before_script:
        - apk --update add nodejs
    

    你已经准备好了dind和nodejs .

  • 0

    如果我们查看docker容器的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
    

相关问题