MST

星途 面试题库

面试题:微服务架构下GitLab CI/CD如何实现服务构建与部署

在微服务架构体系中,阐述使用GitLab CI/CD实现单个微服务从代码构建到容器镜像生成,再到部署到Kubernetes集群的基本流程,需说明主要涉及的配置文件和关键步骤。
36.6万 热度难度
后端开发微服务架构

知识考点

AI 面试

面试题答案

一键面试

基本流程

  1. 代码构建:从GitLab仓库拉取代码,使用相应的构建工具(如Maven、Gradle等)对代码进行编译和打包。
  2. 容器镜像生成:利用打包后的文件,通过Dockerfile构建容器镜像,并将镜像推送到镜像仓库(如GitLab Container Registry)。
  3. 部署到Kubernetes集群:从镜像仓库拉取镜像,在Kubernetes集群中创建或更新对应的Deployment和Service,完成微服务的部署。

主要涉及的配置文件

  1. .gitlab-ci.yml:这是GitLab CI/CD的核心配置文件,定义了CI/CD流水线的各个阶段和作业。
  2. Dockerfile:用于定义如何构建容器镜像,指定基础镜像、安装依赖、复制代码等操作。
  3. Kubernetes部署文件(如deployment.yaml、service.yaml等):描述微服务在Kubernetes集群中的部署方式,包括副本数量、资源限制、服务暴露方式等。

关键步骤

  1. 编写.gitlab-ci.yml
    • 定义阶段:通常分为build、test、deploy等阶段。
    • build作业:拉取代码,执行构建命令,例如Maven的mvn clean package
    • test作业(可选):运行单元测试、集成测试等。
    • docker作业:基于Dockerfile构建镜像,并推送到镜像仓库,例如:
image: docker:latest

services:
  - docker:dind

stages:
  - build
  - test
  - deploy

build:
  stage: build
  script:
    - mvn clean package

docker:
  stage: deploy
  script:
    - docker build -t $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA -f Dockerfile.
    - docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
  1. 编写Dockerfile:例如对于Java应用:
FROM openjdk:11
COPY target/*.jar app.jar
ENTRYPOINT ["java", "-jar", "/app.jar"]
  1. 编写Kubernetes部署文件
    • deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: my - service - deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: my - service
  template:
    metadata:
      labels:
        app: my - service
    spec:
      containers:
      - name: my - service
        image: $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
        ports:
        - containerPort: 8080
- **service.yaml**:
apiVersion: v1
kind: Service
metadata:
  name: my - service - service
spec:
  selector:
    app: my - service
  ports:
  - protocol: TCP
    port: 80
    targetPort: 8080
  type: ClusterIP
  1. 触发CI/CD流水线:当代码推送到GitLab仓库时,.gitlab-ci.yml定义的流水线自动触发,按顺序执行各个作业,完成微服务从代码构建到部署到Kubernetes集群的整个流程。