如何在 gitlab-ci-runner-docker 中使用 docker 和 npm
How to have docker and npm in gitlab-ci-runner-docker
我正在使用 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
当我将图像与 docker 和 npm 一起用于我的构建时 mcasimir/dind-node-build-runner:latest
我有:
Cannot connect to the Docker daemon. Is the docker daemon running on this host?.
当我使用图像 docker:latest
、docker-in-docker 工作正常 但我仍然需要 npm .
问题:
因为 docker:latest
的 Dockerfile 不是 public,并且因为我无法从这个镜像中使用 apt-get
,所以我想知道:
- 如果有办法在 gitlab 中获得可以 运行 docker 和 npm 的图像- ci ?
因为它是一个基于 alpine 的镜像,所以你没有 apt-get,你有 apk
。因此,使用默认 docker:latest
只需添加此 apk --update add nodejs
:
before_script:
- apk --update add nodejs npm
您已经准备好使用 dind、nodejs 和 npm。
如果我们查看 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
我正在使用 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
当我将图像与 docker 和 npm 一起用于我的构建时 mcasimir/dind-node-build-runner:latest 我有:
Cannot connect to the Docker daemon. Is the docker daemon running on this host?.
当我使用图像
docker:latest
、docker-in-docker 工作正常 但我仍然需要 npm .
问题:
因为 docker:latest
的 Dockerfile 不是 public,并且因为我无法从这个镜像中使用 apt-get
,所以我想知道:
- 如果有办法在 gitlab 中获得可以 运行 docker 和 npm 的图像- ci ?
因为它是一个基于 alpine 的镜像,所以你没有 apt-get,你有 apk
。因此,使用默认 docker:latest
只需添加此 apk --update add nodejs
:
before_script:
- apk --update add nodejs npm
您已经准备好使用 dind、nodejs 和 npm。
如果我们查看 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