面试知识库
进阶

CI-CD流程设计#

一句话答案#

CI/CD 自动化流水线:代码提交→构建→测试→镜像打包→部署测试环境→集成测试→生产发布。

核心要点

标准流水线: Push → Build → Test → Package → Deploy-Staging → E2E → Deploy-Prod

工具链: Git(代码) → Jenkins/GitLab CI(引擎) → Maven+Docker(构建) → Harbor(镜像) → K8s+Helm(部署) → Prometheus(监控)

关键实践: 每次 commit 触发 CI / 测试覆盖率门禁 / 镜像 tag 用 git SHA / 生产部署需审批+灰度

面试回答(2分钟版)

CI/CD的核心目标是让代码从提交到上线全程自动化,减少人工介入和出错概率。标准流水线分几步:开发者Push代码后自动触发构建(Maven/Gradle编译),然后跑单元测试和代码质量门禁(比如覆盖率不低于80%),通过后Docker打包镜像并推送到Harbor,镜像tag用git SHA保证可追溯。接着自动部署到Staging环境跑集成测试和E2E测试,全部通过后生产发布需要审批加灰度。工具链方面,我们用的是GitLab CI做流水线引擎,Maven构建Java项目,Docker打包,Harbor存镜像,K8s+Helm做部署编排,Prometheus监控发布后的服务指标。几个关键实践:每次commit都触发CI保证持续集成,镜像不可变(同一个SHA对应唯一镜像),生产部署必须走灰度+回滚预案。

追问与易错

追问方向:

  • “CI 和 CD 的区别是什么?”→ CI 是持续集成(代码合并后自动构建+测试),CD 分持续交付(自动到 Staging)和持续部署(自动到 Prod);大多数团队做到持续交付,生产发布仍需审批
  • “流水线失败了怎么排查?”→ 看 Pipeline 日志定位失败阶段:编译失败查依赖/语法、测试失败查用例、镜像推送失败查 Harbor 认证/磁盘空间;设置 Slack/钉钉通知第一时间告警
  • “Jenkins 和 GitLab CI 怎么选?”→ GitLab CI 与代码仓库原生集成(.gitlab-ci.yml 即配置),上手快;Jenkins 插件生态丰富、灵活度高但维护成本也高;中小团队推荐 GitLab CI,复杂流水线用 Jenkins

易错点:

  • ❌ 只知道概念不知道原理——面试官会追问底层实现
  • ❌ 缺乏实际使用经验——结合项目场景回答更有说服力