背景
本文是《Java 后端从小白到大神》修仙系列之框架学习,Spring Cloud 微服务实战系列的 第十篇
。Spring Cloud 是构建微服务架构的基石,拥有完整的服务治理生态,在云原生架构中广泛应用。本系列将从架构认知到实际工程,逐步构建一套企业级 Spring Cloud 微服务项目。若想详细学习请点击首篇博文开始,现在开始学习。
文章概览
微服务 DevOps 实战:Jenkins + Docker + docker-compose:
- 多模块微服务项目构建策略(Maven + CI/CD)
- 编写 Jenkinsfile + 通过 Gitee 自动触发构建
- 构建 Docker 镜像并推送私有仓库
- 使用 docker-compose 编排服务集群启动
- 容器内服务配置隔离与统一日志管理实践
1. 项目构建策略:多模块 + Maven + CI/CD
原理理解,微服务架构推荐使用多模块聚合结构来增强模块隔离性和可维护性。CI/CD 则通过流水线自动完成从源码提交到应用部署的全流程。
项目结构推荐,这里没有展示全部,只是为了阐述
1
2
3
4
5
6
7
8
9
10
|
cloud-task/
├── pom.xml # 父级聚合模块
├── common/ # 工具/通用代码模块
├── user-api/ # 接口模块(Feign等)
├── auth-service/ # 认证服务
├── user-service/ # 用户服务
├── task-service/ # 任务服务
├── gateway-service/ # 网关服务
├── starter-task-common/ # 自定义 starter
└── Jenkinsfile # Jenkins流水线脚本
|
Maven 构建命令
1
|
mvn clean package -DskipTests
|
- 所有子模块由顶层
pom.xml
管理版本与依赖
- 服务模块各自生成
jar
,用于 Docker 构建
2. Jenkins 自动化构建 + Gitee Webhook 触发
Gitee Webhook 配置
在 Gitee 仓库 → 设置 → Webhook:
- URL:
http://your-jenkins-host/gitee-webhook/
- 类型:
Push
事件
- Token:与 Jenkins 中 Webhook 插件配置一致
Jenkinsfile 脚本示例(核心阶段说明)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
pipeline {
agent any
environment {
IMAGE_REPO = 'registry.mycompany.com/cloud-task'
}
stages {
stage('Checkout') {
steps {
git credentialsId: 'gitee-cred-id', url: 'https://gitee.com/xxx/cloud-task.git'
}
}
stage('Build') {
steps {
sh 'mvn clean package -DskipTests'
}
}
stage('Docker Build & Push') {
steps {
script {
def services = ['auth-service', 'user-service', 'task-service', 'gateway-service']
for (svc in services) {
def tag = "${IMAGE_REPO}/${svc}:latest"
sh "docker build -t ${tag} ${svc}"
sh "docker push ${tag}"
}
}
}
}
stage('Deploy') {
steps {
sh 'docker-compose down && docker-compose up -d'
}
}
}
}
|
3. Docker 镜像构建与私有仓库管理
每个服务模块都需提供 Dockerfile
示例:auth-service/Dockerfile
1
2
3
4
|
FROM openjdk:17-jdk-alpine
ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java", "-jar", "/app.jar"]
|
私有镜像仓库(Docker Registry)
部署简易私有仓库:
1
|
docker run -d -p 5000:5000 --name registry registry:2
|
推荐使用 Harbor 作为企业级镜像仓库,支持:
推送镜像前需登录:
1
|
docker login registry.mycompany.com
|
然后按模块推送镜像:
1
|
docker push registry.mycompany.com/cloud-task/auth-service:latest
|
4. 使用 Docker Compose 编排服务集群
docker-compose.yml
示例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
version: '3.8'
services:
auth-service:
image: registry.mycompany.com/cloud-task/auth-service:latest
ports:
- "8001:8080"
environment:
- SPRING_PROFILES_ACTIVE=prod
depends_on:
- nacos
gateway-service:
image: registry.mycompany.com/cloud-task/gateway-service:latest
ports:
- "8888:8080"
nacos:
image: nacos/nacos-server:2.2.0
ports:
- "8848:8848"
environment:
- MODE=standalone
|
启动命令
或在更新镜像后:
1
|
docker-compose pull && docker-compose up -d --build
|
5. 容器内配置隔离与日志统一管理
环境隔离(Nacos + Spring Profiles)
每个服务支持以下方式激活环境配置:
1
2
|
environment:
- SPRING_PROFILES_ACTIVE=dev
|
Nacos 配置结构:
1
2
3
4
|
auth-service-dev.yaml
auth-service-prod.yaml
user-service-dev.yaml
...
|
服务在启动时自动拉取对应环境配置。
日志策略
推荐日志输出路径:
1
|
<file>/logs/${spring.application.name}.log</file>
|
Compose 中统一挂载日志:
1
2
|
volumes:
- ./logs:/logs
|
日志格式建议为 JSON,方便接入 ELK、Loki 等日志系统。
总结
本篇内容围绕 Spring Cloud 微服务的 DevOps 实践路径,提供从源代码到容器部署、配置隔离、统一日志的完整链路,实现了:
- 持续集成:Jenkins + Webhook + Maven
- 容器化构建:Dockerfile + Registry
- 快速部署:docker-compose 编排服务集群
- 配置统一:Nacos 配置中心 + Profiles 分环境
- 日志集中:日志路径统一 + 挂载目录清晰