Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带有docker compose的Gitlab CI_Docker_Continuous Integration_Docker Compose_Gitlab - Fatal编程技术网

带有docker compose的Gitlab CI

带有docker compose的Gitlab CI,docker,continuous-integration,docker-compose,gitlab,Docker,Continuous Integration,Docker Compose,Gitlab,有一个项目 我需要做的是在Gitlab中使用docker实现一个管道,并查看应用程序,以获取任何推送分支(如*.$projectname.example.com)的链接。 此外,每个构建都应该放在本地docker注册表中(它已经配置好了) 如果我走错了方向,请给我一个提示。 我应该使用“shell”还是“docker” 这些配置曾经使用shell runner运行过一次,但后来我开始遇到权限问题,我想是在git进行清理时 实现这一点的最佳方式是什么 .gitlab-ci.yml image:

有一个项目

我需要做的是在Gitlab中使用docker实现一个管道,并查看应用程序,以获取任何推送分支(如*.$projectname.example.com)的链接。 此外,每个构建都应该放在本地docker注册表中(它已经配置好了)

如果我走错了方向,请给我一个提示。 我应该使用“shell”还是“docker”

这些配置曾经使用shell runner运行过一次,但后来我开始遇到权限问题,我想是在git进行清理时

实现这一点的最佳方式是什么

.gitlab-ci.yml

image: node:7.7.2-alpine

stages:
  - build
  - test
  - review
  - deploy

variables:
  TEST_IMAGE: registry.gitlab.example.com:4567/root/nodejs-express-todoapp:$CI_COMMIT_REF_NAME

before_script:
  - docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN $CI_REGISTRY

build:
  stage: build
  script:
    - echo "BUILD"
    - docker-compose build
    - docker-compose push

test:
  stage: test
  script:
    - echo "TEST"
  allow_failure: true

review:
  stage: review
  script:
    - echo "REVIEW"
  when: manual

deploy_dev:
  tags:
    - dev
  stage: deploy
  script:
    - echo "DEPLOY"
    - docker-compose up -d
  environment:
    name: dev
    url: http://$CI_COMMIT_REF_NAME.$CI_PROJECT_NAME.$GITLAB_USER_LOGIN.projects.example.com:3000
  only:
  - branches

undeploy_dev:
  tags:
    - dev
  stage: deploy
  script:
    - docker-compose stop
  when: manual
  environment:
    name: dev
    action: stop
Dockerfile

FROM node:7.7.2-alpine

WORKDIR /usr/app

RUN apk update && apk add postgresql

COPY package.json .
RUN npm install --quiet

COPY . .
docker-compose.yml

version: '3'
services:
  web:
    build: .
    command: npm run dev
    volumes:
    - .:/usr/app/
    - /usr/app/node_modules
    ports:
      - "3000:3000"
    depends_on:
      - postgres
    environment:
      DATABASE_URL: postgres://todoapp@postgres/todos
    image: registry.gitlab.example.com:4567/root/nodejs-express-todoapp

  postgres:
    image: healthcheck/postgres:alpine
    environment:
      POSTGRES_USER: todoapp
      POSTGRES_DB: todos

如果它是您的跑步者,
docker
docker-in-docker
service(dind)一起跑步是最佳选择

您需要有跑步者,因为您需要激活
privileged
模式

为此,在runner上的
config.toml
中,在
runners.docker
配置中插入
privileged=true

[[runners]]
  [runners.docker]
    privileged = true
通过启用
privileged
,您可以有效地禁用容器的所有安全机制,并使您的主机暴露于权限提升,这可能导致容器中断。

无论如何,其他方法请参考公共文件。不管怎样,我建议你阅读它,它有很多有用的信息


谢谢你的回答。如果我在服务中使用image:node:latest和docker:dind,我如何编写docker?它找不到dockerengine@epema拆分作业,在节点中执行操作,创建工件,传递到使用
docker:latest
作为图像的构建作业