面试题答案
一键面试设计思路
- 利用Git标签记录版本信息:
- 在项目达到特定里程碑(如发布版本)时,使用Git标签来标记版本。标签可以包含版本号、构建日期等信息,便于追溯和识别特定版本。
- 采用语义化版本号(SemVer)规范,如
v1.0.0
,这样可以清晰地表示主版本号、次版本号和修订号,方便理解项目的变化程度。
- 分支策略:
- 主分支(Master/Main):用于存放稳定的、可发布的代码。只有在发布新版本时才会更新主分支,主分支上的每一次提交都对应一个可部署的版本。
- 开发分支(Develop):团队成员在开发分支上进行日常开发工作。所有新功能、修复的代码先合并到开发分支,经过测试后再合并到主分支。
- 特性分支(Feature Branch):基于开发分支创建,每个特性分支用于开发一个独立的功能。功能开发完成后,将特性分支合并回开发分支。
- 修复分支(Hotfix Branch):基于主分支创建,用于紧急修复生产环境中的问题。修复完成后,同时合并到主分支和开发分支,以保证开发分支和主分支代码的一致性。
- 脚本与CI/CD流水线协同工作:
- CI(持续集成):在开发过程中,每次代码推送到开发分支时,CI流水线自动触发。CI脚本首先检查代码的语法正确性,然后运行单元测试。如果测试通过,将代码合并到开发分支。
- CD(持续交付/部署):当需要发布新版本时,从开发分支合并代码到主分支。CD流水线自动触发,在部署前,Bash脚本根据当前代码状态生成版本标签并推送到远程仓库,然后进行构建和部署操作。
核心Bash脚本代码
#!/bin/bash
# 获取当前项目根目录
project_root=$(git rev-parse --show-toplevel)
cd $project_root
# 生成版本标签,这里简单使用日期作为版本号示例,实际可按SemVer规范生成
version_tag=$(date +%Y%m%d%H%M%S)
# 检查是否在主分支
current_branch=$(git rev-parse --abbrev-ref HEAD)
if [ "$current_branch" != "master" ] && [ "$current_branch" != "main" ]; then
echo "Not on master/main branch. Version tagging skipped."
exit 1
fi
# 创建并推送版本标签
git tag -a $version_tag -m "Release version $version_tag"
git push origin $version_tag
# 以下为构建和部署相关代码示例,假设项目为Node.js项目,使用npm构建和pm2部署
npm install
npm run build
pm2 restart ecosystem.config.js
上述脚本首先获取项目根目录,生成一个基于日期的版本标签(实际应用中应按SemVer规范生成)。然后检查当前所在分支是否为主分支,若是则创建并推送版本标签。接着示例了如何进行构建(假设是Node.js项目使用npm)和部署(使用pm2)操作。实际应用中,构建和部署部分应根据项目的实际技术栈进行调整。