有一个项目 https://github.com/codeship-library/nodejs-express-todoapp
我需要做的是使用docker和Gitlab在Gitlab中实现一个管道,以获取像http://feature_ *。$ 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 . .
搬运工-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
答案 0 :(得分:1)
如果是你的跑步者docker
docker-in-docker
服务(dind),那么这是最好的选择。
您需要拥有跑步者,因为您需要激活privileged
模式。
为此,请在您的config.toml
上找到您的privileged = true
配置中的runners.docker
。
[[runners]]
[runners.docker]
privileged = true
通过启用privileged
,您实际上会禁用容器的所有安全机制,并使您的主机暴露于可能导致容器突破的权限提升。
无论如何,对于其他方式,请参阅公共文档。无论如何,我建议你阅读它,它有很多有用的信息!
https://docs.gitlab.com/ce/ci/docker/using_docker_build.html