gitlab-runner CI/CD +docker-compose自动化部署nestjs项目

416 阅读2分钟

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

image.png 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

6.这样就可以自动化部署一个nestjs项目。(以上是我踩坑无数才整出来的)。大佬勿喷