一、Linux服务器巡检与维护
你是如何保障业务系统7×24小时稳定运行的?日常巡检都检查哪些内容?
回答要点
● 应用安全:Nginx配置中隐藏版本号(server_tokens off)、限制请求速率(limit_req_zone)、配置CORS策略。
● 数据库安全:MySQL设置强密码策略、删除匿名用户和test数据库、限制root仅本地登录。
● 容器安全:Docker镜像使用非root用户运行、配置只读根文件系统、定期扫描镜像漏洞。
七、CI/CD自动化部署
你们的CI/CD流水线是怎么设计的?从代码提交到上线经历了哪些阶段?
回答要点
流水线设计:使用Jenkins + GitLab + Harbor + K8s 构建完整的CI/CD流水线。
阶段划分:
1. 代码提交阶段:开发Push代码到GitLab → GitLab Webhook 自动触发Jenkins流水线。
2. 构建阶段:Maven/Gradle编译Java项目 → 单元测试(JUnit)→ 代码质量扫描(SonarQube检查代码规范、bug、漏洞)。
3. 镜像构建阶段:Docker Build生成镜像,Tag标记版本号(如 v1.2.3_build123)→ 推送到Harbor私有仓库。
4. 部署阶段:更新K8s Deployment的镜像版本 → 触发滚动更新 → 健康检查验证 → 灰度发布 → 全量上线。
5. 回滚阶段:如果监控发现异常,执行 kubectl rollout undo 一键回滚到上一个稳定版本。
你们是怎么保证零停机发布的?回滚方案是怎么设计的?
回答要点
零停机策略:
1. 滚动更新:K8s Deployment默认采用滚动更新策略,每次只更新一个Pod,新Pod通过 readinessProbe 健康检查后才加入Service,旧Pod通过 terminationGracePeriodSeconds 优雅关闭(等待现有请求处理完毕)。
2. 蓝绿部署:同时运行两套环境(蓝=旧版本,绿=新版本),切换Service指向新版本,实现瞬时切换和快速回滚。
3. 回滚方案:
● K8s层面:kubectl rollout undo deployment/xxx 自动回滚到上一个版本(K8s保留最近10个ReplicaSet)。
● 镜像层面:Harbor保留最近5个版本镜像,确保回滚时镜像可用。
● 数据库层面:如果涉及DDL变更,配套编写回滚SQL脚本。
● 配置层面:ConfigMap版本化管理,回滚时同步恢复配置。
Jenkins流水线你是用哪种方式定义的?Jenkinsfile和Freestyle项目有什么区别?
回答要点
我使用Jenkinsfile(Pipeline as Code)方式:将流水线定义写入代码仓库的 Jenkinsfile 文件中,随代码一起版本管理。使用Declarative Pipeline语法,定义 stage 和 steps 清晰描述每个阶段。
Jenkinsfile vs Freestyle对比:
● Jenkinsfile:流水线即代码,可版本控制和Code Review;支持复杂的并行、条件分支逻辑;可复用共享库(Shared Library)。
● Freestyle:通过Web UI配置,简单直观但不可复用;配置散落在Jenkins中,不可代码审查;项目多时维护成本高。
我的实践:在项目根目录维护 Jenkinsfile,定义了5个Stage(Checkout → Build → Test → Docker → Deploy),通过 when 条件区分不同分支
linux运维项目流程总结