CICD 面试题
八股文,开刷!
1. 介绍一下什么是CI\CD?
- CI(代码集成与测试)
- CD(发布与部署)
2.如何设计CICD?(重点)
- CI拆分详解
核心目标与重要性:
CI流程的核心目标是确保
代码频繁、高质量地合并到主干,并通过自动化测试快速发现缺陷。在大型项目中,多个开发人员同时进行代码开发,如果不能及时集成和测试,很容易出现代码冲突和隐藏的缺陷。频繁集成代码可以让团队成员及时发现并解决问题,保证代码的一致性和稳定性。关键环节:
- 研发本地开发与代码上传:开发人员在本地进行代码编写和调试,完成后将代码上传到测试环境。这是整个CI流程的起点,代码的质量直接影响后续的测试和部署。
- QA介入测试:为了保证QA测试的代码和上线代码保持一致,可以锁定分支或锁定COMMIT。这就像是给代码上了一把锁,确保在测试过程中代码不会被意外修改。QA人员对上传的代码进行测试,如果发现问题,将代码打回给开发人员修改,然后重新进行测试。这个过程可能会反复进行,直到代码通过测试。
- 静态代码检查:通过自动化工具(如ESLint、SonarQube)对代码进行静态检查,在代码提交阶段就发现并阻止这些低级错误进入主分支。
- 构建与单元测试:使用构建工具(如Maven/Gradle)编译代码生成可执行包(如Java的.jar、前端的dist),并运行单元测试(Jest、JUnit)验证逻辑正确性。通过Jenkins应用调用这些工具,还可以生成测试覆盖率报告,帮助开发人员了解代码的测试情况。

- CD拆分详解
核心目标与意义:
CD流程的核心目标是将已验证的代码快速、可靠地部署到目标环境(测试/生产)。通过自动化的部署流程,可以减少人工干预,提高部署的效率和准确性,确保软件能够及时上线。
关键环节分析:
- 环境准备与部署:如k8s,docker,单体服务器。
- 发布策略控制:将代码部署到预生产环境(如Staging),需要人工审批后再发布至生产环境。这种方式可以在上线前进行最后的验证,确保代码的稳定性。全自动化发布到生产环境,如蓝绿部署、金丝雀发布。蓝绿部署是指同时维护两个相同的生产环境,一个用于当前版本的运行,另一个用于新版本的测试,测试通过后切换到新版本;金丝雀发布是指先将新版本的代码部署到一小部分用户中进行测试,观察用户反馈后再逐步扩大范围。

3. jenkins流水线执行失败如何排查?
- 查看流水线控制台输出:具体在哪个阶段导致失败了?
- 拉代码?
- 代码静态检测?
- 代码编译?
- 构建镜像or部署?
4. cicd中如何解决多项目多jdk/node版本的?
在实际工作中,有些新老项目可能存在jdk版本不同的问题,那如何解决jenkins job构建时指定版本?
- 利用
tools指令在Pipeline中动态指定JDK版本。- 使用多台jenkins实例,安装不同的jdk版本
- 引入k8s 动态jenkins slave