CI/CD面试题
一、CI/CD面试题
1、请解释 CI、CD 和 CD 的区别(持续集成、持续交互、持续部署)
(1)、持续集成(CI):频繁将代码变更合并到主干分支,通过自动化测试快速发现错误。
(2)、持续交付(CD):在 CI 基础上,确保代码始终处于可部署状态,但需要手动触发部署。
(3)、持续部署(CD):完全自动化,代码通过测试后自动部署到生产环境。
2、CI / CD 的核心目标是什么?
(1)、快速发现和修复缺陷。
(2)、减少手动操作,提高部署效率。
(3)、确保代码质量和环境一致性。
(4)、支持频繁、可靠的发布。
3、常见的 CI / CD 工具有哪些?各自特点是什么?
(1)、Jenkins:开源、高度可定制,适合复杂场景,但配置较繁琐。
(2)、GitLab CI / CD:与 GitLab 深度集成,内置容器注册表和安全扫描。
(3)、GitHub Actions:与 GitHub 无缝集成,市场插件丰富。
(4)、CircleCi:云原生、并行执行能力强,适合快速迭代。
(5)、Azure DevOps:与微软生态集成,支持多语言和多种部署策略。
4、如何设计一个 CI / CD 流水线?
(1)、阶段划分:通常包括 Build → Test → Deploy → Monitor 等阶段。
(2)、触发策略:可设置为代码提交触发、定时触发、手动触发等。
(3)、环境隔离:区分开发、测试、预生产、生产等环境。
(4)、质量门禁:加入单元测试、集成测试、代码覆盖率检查、安全扫描等环境。
(5)、回滚机制:设置失败时自动回滚到上一版本。
5、Docker 和容器化在 CI / CD 中的作用是什么?
(1)、打包应用及其依赖为容器,确保环境一致性。
(2)、隔离构建环境,避免依赖冲突。
(3)、加速部署,容器启动速度远快于虚拟机。
(4)、支持微服务架构的并行测试和部署。
6、CI / CD 流水线运行缓慢,如何优化?
(1)、缓存依赖,如 Maven / NPM 包、Docker 层缓存。
(2)、并行执行,拆分测试用例并行运行。
(3)、增量构建,只构建变更的模块。
(4)、优化 Runner 配置,增加资源或使用专用 Runner。
(5)、减少环境准备时间,使用预配置的基础镜像。
7、如何处理 CI / CD 中的敏感信息(如数据库密码)?
(1)、使用工具提供的 Secret 管理,如 GitLab CI / CD Variables、GitHub Actions Secret。
(2)、通过 Vault、AWS Secrets Manager 等工具加密存储。
(3)、避免硬编码,通过环境变量注入,不在代码中明文存储。
8、什么是 GitOps ?它与 CI / CD 的关系是什么?
(1)、GitOps 是以 Git 为唯一事实来源,通过 Git 提交驱动基础设置和应用部署,如 Argo CD、Flux CD 等工具就是基于 GitOps 理念。
(2)、GitOps 是 CD 的扩展,强调声明式配置和自动化校验,使部署流程更可靠、可追溯。
9、如何实现蓝绿部署和金丝雀发布?
(1)、蓝绿部署:准备两个完全相同的环境(蓝 / 绿),新版本部署到非生产环境(如绿色),测试通过后,将流量切至绿色环境。
(2)、金丝雀发布:将新版本部署到少量服务器或用户组,监控性能和错误率,逐步扩大范围。
10、如何在 CI / CD 中集成自动化测试?
(1)、单元测试:在构建阶段运行,如 JUnit、Pytest 等。
(2)、集成测试:部署到测试环境后运行,如 Selenium、Postman 等。
(3)、端到端测试:模拟用户行为,如 Cypress、Playwright 等。
(4)、生成测试报告,如 JUnit XML 或 HTML 报告,集成到 CI 工具中。
11、什么是版本控制?常用的版本控制工具有哪些?
版本控制是管理代码库的一套实践和工具,开发者通过它跟踪代码的每一行变化,实现团队内代码的共享、审查和同步。常用的版本控制工具如 Git、Mercurial、Subversion(SVN)等,其中 Git 最为流行。
12、什么 Git 仓库?
Git 仓库用于跟踪软件项目中的每个文件,它是项目中所有文件的变更和索引,开发者可以通过它查看项目历史的任意时刻。
13、什么是 Git 分支?
Git 分支是从主分支(通常是 master 或 main 分支)分离出来的独立开发线路,开发人员可以在分支上进行代码开发、测试等工作,避免影响主分支的稳定性,完成后再将分支合并回主分支。
14、Jenkins 的插件体系有什么作用?常用的插件有哪些?
Jenkins 的插件体系使其具有高度扩展性,可通过安装不同插件实现各种功能,如代码构建插件(如 Maven 插件)、测试插件(如 JUnit 插件)、部署插件(如 Publish Over SSH 插件)、版本控制插件(如 Git 插件)等,能满足不同项目的个性化需求。
15、如何在 GitLab CI / CD 中定义流水线?
通过在项目根目录下的 .gitlab-ci.yml 文件中定义,使用 YAML 语法来描述流水线的各个阶段、任务、依赖关系、触发条件等,例如指定构建环境、定义构建命令、设置测试步骤等。
16、GitHub Actions 的工作原理是什么?
GitHub Actions 与 GitHub 紧密集成,当仓库发生特定时间(如代码提交、Pull Request 等)时,会触发相应的工作流(Workflow)。Workflow 由一个或多个作业(Job)组成,每个 Job 可以包含多个步骤(Step),步骤中可执行各种命令、调用 Action 市场中的预制动作来完成构建、测试、部署等任务。
17、Jenkins 中如何配置分布式构建?请说明具体步骤和关键参数。
18、GitLab CI/CD 中如何设置环境变量的作用域?不同作用域有什么区别?
19、GitHub Actions 中如何实现工作流之间的依赖关系?
20、请详细说明 CI/CD 流水线中代码静态检查阶段的工作原理,常用工具(如 SonarQube)是如何检测代码质量问题的?
21、增量构建是如何实现的?在不同项目结构(如单体项目、微服务项目)中有什么差异?
22、如何在 CI/CD 流水线中实现并行测试?如何确保测试结果的准确性和一致性?
23、蓝绿部署和滚动部署在技术实现上有什么区别?各自的优缺点是什么?
24、Kubernetes 在 CI/CD 流程中如何实现服务发现和负载均衡?常用的组件和机制有哪些?
25、Docker 容器和虚拟机有什么本质区别?在 CI/CD 场景中,为什么更倾向于使用容器?
26、如何在 CI/CD 中确保 Docker 镜像的安全性?除了镜像扫描,还有哪些措施?
27、请详细说明 SAST 工具(如 Snyk、Checkmarx)是如何扫描代码漏洞的?其原理和常见扫描策略是什么?
28、在 CI/CD 中,如何确保敏感信息在传输和存储过程中的安全性?例如,从密钥管理工具到流水线中的传递过程。
29、如何在 CI/CD 流程中满足合规性要求(如 GDPR、等保要求)?有哪些关键环节需要注意?
30、Git 中如何实现代码的原子提交?这对 CI/CD 有什么意义?
31、当多个开发人员同时向主分支提交代码时,CI/CD 流程如何避免冲突?如果出现冲突,应该如何处理?
32、请描述 Git 标签在 CI/CD 中的作用,如何在流水线中根据标签进行不同的操作?

浙公网安备 33010602011771号