gitlab.com CI - 在 docker 中使用 docker 构建一个 NodeJS 应用程序
gitlab.com CI - build a NodeJS app using docker in docker
我目前遇到 cigitlab.com 共享运行程序的问题。我想在我的管道中实现的是:
- NPM 安装和使用 grunt 制作一些 uncss,最小化和压缩任务
- 打扫干净
- 使用包含的应用构建 docker 容器
- 将容器移动到 gitlab 注册表
不幸的是,我很久没听懂了 运行!我尝试了很多不同的 gitlab.ci 配置 - 但都没有成功。问题是,我必须使用 "image: docker:latest" 来获得所有 docker-工具 运行。但是后来我没有在容器中安装 node 和 grunt。
反过来也是行不通的。我试图使用 image: centos:latest 并手动安装 docker - 但这也不起作用,因为我总是得到 Failed to get D-Bus connection: Operation not permitted
有没有人对 gitlab-ci 在 docker 共享运行器中使用 docker 构建命令有更多经验?
非常感谢ci任何帮助!!
谢谢
贾尼克
Gitlab 可能有点棘手 :) 我没有基于 CentOS 的示例,但如果对您有帮助,我有一个基于 Ubuntu 的示例。这是我的一个工作 gitlab 管道的一些复制粘贴,它使用 gulp(你应该很容易调整它以适应你的 grunt)。
.gitlab-ci.yml是这样的(调整开头的CONTAINER...变量):
variables:
CONTAINER_TEST_IMAGE: registry.gitlab.com/psono/psono-client:$CI_BUILD_REF_NAME
CONTAINER_RELEASE_IMAGE: registry.gitlab.com/psono/psono-client:latest
stages:
- build
docker-image:
stage: build
image: ubuntu:16.04
services:
- docker:dind
variables:
DOCKER_HOST: 'tcp://docker:2375'
script:
- sh ./var/build-ubuntu.sh
- docker info
- docker login -u gitlab-ci-token -p "$CI_BUILD_TOKEN" registry.gitlab.com
- docker build -t $CONTAINER_TEST_IMAGE .
- docker push $CONTAINER_TEST_IMAGE
此外,我还有一个“./var/build-ubuntu.sh”,您可以根据需要稍微调整一下,替换一些 ubuntu 依赖项或将 gulp 切换为 grunt as需要:
#!/usr/bin/env bash
apt-get update && \
apt-get install -y libfontconfig zip nodejs npm git apt-transport-https ca-certificates curl openssl software-properties-common && \
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add - && \
add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable" && \
apt-get update && \
apt-get install -y docker-ce && \
ln -s /usr/bin/nodejs /usr/bin/node && \
npm install && \
node --version && \
npm --version
我目前遇到 cigitlab.com 共享运行程序的问题。我想在我的管道中实现的是:
- NPM 安装和使用 grunt 制作一些 uncss,最小化和压缩任务
- 打扫干净
- 使用包含的应用构建 docker 容器
- 将容器移动到 gitlab 注册表
不幸的是,我很久没听懂了 运行!我尝试了很多不同的 gitlab.ci 配置 - 但都没有成功。问题是,我必须使用 "image: docker:latest" 来获得所有 docker-工具 运行。但是后来我没有在容器中安装 node 和 grunt。
反过来也是行不通的。我试图使用 image: centos:latest 并手动安装 docker - 但这也不起作用,因为我总是得到 Failed to get D-Bus connection: Operation not permitted
有没有人对 gitlab-ci 在 docker 共享运行器中使用 docker 构建命令有更多经验?
非常感谢ci任何帮助!!
谢谢
贾尼克
Gitlab 可能有点棘手 :) 我没有基于 CentOS 的示例,但如果对您有帮助,我有一个基于 Ubuntu 的示例。这是我的一个工作 gitlab 管道的一些复制粘贴,它使用 gulp(你应该很容易调整它以适应你的 grunt)。
.gitlab-ci.yml是这样的(调整开头的CONTAINER...变量):
variables:
CONTAINER_TEST_IMAGE: registry.gitlab.com/psono/psono-client:$CI_BUILD_REF_NAME
CONTAINER_RELEASE_IMAGE: registry.gitlab.com/psono/psono-client:latest
stages:
- build
docker-image:
stage: build
image: ubuntu:16.04
services:
- docker:dind
variables:
DOCKER_HOST: 'tcp://docker:2375'
script:
- sh ./var/build-ubuntu.sh
- docker info
- docker login -u gitlab-ci-token -p "$CI_BUILD_TOKEN" registry.gitlab.com
- docker build -t $CONTAINER_TEST_IMAGE .
- docker push $CONTAINER_TEST_IMAGE
此外,我还有一个“./var/build-ubuntu.sh”,您可以根据需要稍微调整一下,替换一些 ubuntu 依赖项或将 gulp 切换为 grunt as需要:
#!/usr/bin/env bash
apt-get update && \
apt-get install -y libfontconfig zip nodejs npm git apt-transport-https ca-certificates curl openssl software-properties-common && \
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add - && \
add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable" && \
apt-get update && \
apt-get install -y docker-ce && \
ln -s /usr/bin/nodejs /usr/bin/node && \
npm install && \
node --version && \
npm --version