
1) 【一句话结论】主导的微服务CI/CD项目通过Jenkins+Docker+K8s,将部署时间从平均2小时缩短至15分钟,效率提升92.5%,解决了多环境配置与回滚问题,实现代码全流程自动化。
2) 【原理/概念讲解】持续集成(CI)是“频繁集成”,即开发人员频繁提交代码到共享库,每次提交自动触发构建、单元测试,确保集成后仍能正常工作,类比工厂流水线,工人完成部分工序后立即送入下一道工序,避免问题累积。持续交付(CD)是“自动部署”,CI通过后自动将代码部署到测试/生产环境,确保交付流程自动化,类比流水线末端自动包装成品并送入仓库,无需人工干预。两者结合形成“CI/CD流水线”,实现代码从提交到上线全流程自动化。
3) 【对比与适用场景】
4) 【示例】Jenkins Pipeline示例(含构建缓存、多环境部署、回滚):
pipeline {
agent any
options {
buildDiscarder(logRotator(keepDays: 30, numToKeep: 10))
}
stages {
stage('Checkout') {
steps {
checkout scm
}
}
stage('Build') {
steps {
sh 'mvn clean package -DskipTests -Dmaven.test.skip=true' // 构建并缓存
sh 'docker build --cache-from=registry.example.com/my-app:latest -t my-app:dev .'
}
}
stage('Test') {
steps {
parallel(
'Unit Test': {
sh 'mvn test -Dtest=*.Unit'
},
'Integration Test': {
sh 'mvn verify -Dtest=*.Integration'
}
)
}
}
stage('Deploy') {
when { branch 'main' }
steps {
sh 'docker tag my-app:dev registry.example.com/my-app:dev'
sh 'docker push registry.example.com/my-app:dev'
sh 'kubectl set image deployment/my-app deployment/my-app=my-app:dev --namespace=prod --record' // 滚动更新
}
}
stage('Rollback') {
when { failure() }
steps {
sh 'kubectl rollout undo deployment/my-app --namespace=prod'
}
}
}
}
(注:构建缓存通过Maven的dependencyManagement锁定依赖版本,Docker的--cache-from参数引用历史镜像,减少重复构建时间。)
5) 【面试口播版答案】
我主导过爱立信内部一个微服务CI/CD项目,目标是实现从代码提交到多环境自动部署。需求分析阶段,我们明确需要支持开发、测试、生产三环境,且部署后能快速回滚。技术选型上,选用了Jenkins作为CI/CD引擎,Docker容器化应用,Kubernetes管理多环境。过程中遇到构建失败,因为Maven依赖库版本冲突,解决方案是引入Maven的依赖管理插件,配置版本锁定文件(pom.xml中的dependencyManagement),并启用Docker构建缓存,减少重复构建时间。部署回滚问题,通过Jenkins Pipeline增加回滚步骤,保存历史版本,实现一键回滚。多环境同步,通过Kubernetes命名空间隔离(dev、test、prod),并使用ConfigMap/Secrets动态注入环境变量,比如生产环境的数据库连接字符串存入Secrets,通过环境变量注入,避免硬编码。最终,部署时间从平均2小时缩短至15分钟,效率提升92.5%,实现了全流程自动化。
6) 【追问清单】
--cache-from)和Jenkins缓存插件,缓存中间构建结果,实测构建时间从30分钟缩短至5分钟。maxSurge=1,maxUnavailable=0),不影响用户访问,回滚时间控制在2分钟内。7) 【常见坑/雷区】