基本流程
- 代码构建:从GitLab仓库拉取代码,使用相应的构建工具(如Maven、Gradle等)对代码进行编译和打包。
- 容器镜像生成:利用打包后的文件,通过Dockerfile构建容器镜像,并将镜像推送到镜像仓库(如GitLab Container Registry)。
- 部署到Kubernetes集群:从镜像仓库拉取镜像,在Kubernetes集群中创建或更新对应的Deployment和Service,完成微服务的部署。
主要涉及的配置文件
- .gitlab-ci.yml:这是GitLab CI/CD的核心配置文件,定义了CI/CD流水线的各个阶段和作业。
- Dockerfile:用于定义如何构建容器镜像,指定基础镜像、安装依赖、复制代码等操作。
- Kubernetes部署文件(如deployment.yaml、service.yaml等):描述微服务在Kubernetes集群中的部署方式,包括副本数量、资源限制、服务暴露方式等。
关键步骤
- 编写.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
- 编写Dockerfile:例如对于Java应用:
FROM openjdk:11
COPY target/*.jar app.jar
ENTRYPOINT ["java", "-jar", "/app.jar"]
- 编写Kubernetes部署文件:
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
- 触发CI/CD流水线:当代码推送到GitLab仓库时,.gitlab-ci.yml定义的流水线自动触发,按顺序执行各个作业,完成微服务从代码构建到部署到Kubernetes集群的整个流程。