1.部署Runner
docker run -d -v /srv/gitlab-runner/config:/etc/gitlab-runner -v /var/run/docker.sock:/var/run/docker.sock -v /builds:/builds gitlab/gitlab-runner:alpine
注册runner 自建gitlab仓库和注册runner从第11步开始就是注册runner步骤
exector选择docker,便于项目的打包
2.修改runner配置
vim /srv/gitlab-runner/config/config.toml
pull_policy默认设置为always,导致CI过程中每个stage均会重新pull所需的镜像,设置为if-not-present告知runner复用已有镜像,加快CI流程
volumes = ["/cache", "/var/run/docker.sock:/var/run/docker.sock", "/builds:/builds"]
pull_policy = "if-not-present"
3.编写Dockerfile文件
FROM node:18.16.0
# 设置时区
ENV TZ=Asia/Shanghai \
DEBIAN_FRONTEND=noninteractive
# 创建工作目录
RUN mkdir /app
# 指定工作目录
WORKDIR /app
#复制package到工作目录
COPY package*.json ./
#install
RUN yarn
# 复制当前所有代码到/app工作目录
COPY . .
#暴露端口3700(与服务启动端口一致)
EXPOSE 3700
EXPOSE 4000
# 启动服务
CMD [ "npm", "run", "start:test" ]
4. 编写docker-compose.yml文件
version: "3.0"
services:
mysql02:
container_name: mysql02
image: mysql:8.0 # 使用官方镜像
ports:
- 3306:3306 # 本机端口:容器端口
restart: on-failure
environment:
MYSQL_DATABASE: dd
MYSQL_ROOT_PASSWORD: 123456
MYSQL_USER: lio
MYSQL_PASSWORD: 123456
MYSQL_ROOT_HOST: '%'
volumes:
- /home/mysql/db:/var/lib/mysql # 用来存放了数据库表文件
networks:
- mysql02_bridge
dd_server:
# nestjs服务
container_name: dd_server
build:
# 根据Dockerfile构建镜像
context: .
dockerfile: Dockerfile
ports:
- 3700:3700
- 4000:4000
restart: on-failure # 设置自动重启,这一步必须设置,主要是存在mysql还没有启动完成就启动了node服务
networks:
- mysql02_bridge
depends_on:
# node服务依赖于mysql和redis
- mysql02
# 声明一下网桥 mysql02_bridge。
# 重要:将所有服务都挂载在同一网桥即可通过容器名来互相通信了
# 如nestjs连接mysql可以通过容器名来互相通信
networks:
mysql02_bridge:
5.编写 .gitlab-ci.yml文件
image: docker:latest
services:
- docker:dind
stages:
- build
build:
stage: build
script:
- docker-compose up -d --build
tags:
- web