面试题答案
一键面试1. 编写Bash脚本体系
并行构建多个微服务
#!/bin/bash
# 定义微服务仓库数组
services=(service1 service2 service3)
successfully_built_services=()
failed_service=""
# 并行构建函数
parallel_build() {
for service in "${services[@]}"; do
(
cd /path/to/$service
mvn clean install -DskipTests &
)
done
wait
}
# 检查构建结果并记录日志
check_build_result() {
for service in "${services[@]}"; do
if [ $? -eq 0 ]; then
successfully_built_services+=("$service")
else
failed_service="$service"
echo "Build failed for $service at $(date)" > /var/log/$service-build-failure.log
echo "Build information: $(cat /path/to/$service/target/maven-archiver/build-helper-maven-plugin/buildInfo.xml)" >> /var/log/$service-build-failure.log
break
fi
done
}
# 回滚已成功部署的相关微服务
rollback_services() {
if [ -n "$failed_service" ]; then
for service in "${successfully_built_services[@]}"; do
# 执行回滚脚本,例如:ansible-playbook rollback-$service.yml
echo "Rolling back $service due to failure of $failed_service"
done
fi
}
parallel_build
check_build_result
rollback_services
支持动态扩展新的微服务
为了支持动态扩展新的微服务,我们可以将微服务仓库路径列表保存在一个配置文件中,例如 services.conf
,内容如下:
/path/to/service1
/path/to/service2
修改脚本读取配置文件:
#!/bin/bash
# 读取配置文件中的微服务路径
services=()
while IFS= read -r line; do
services+=("$line")
done < services.conf
successfully_built_services=()
failed_service=""
# 并行构建函数
parallel_build() {
for service in "${services[@]}"; do
(
cd $service
mvn clean install -DskipTests &
)
done
wait
}
# 检查构建结果并记录日志
check_build_result() {
for service in "${services[@]}"; do
if [ $? -eq 0 ]; then
successfully_built_services+=("$service")
else
failed_service="$service"
echo "Build failed for $service at $(date)" > /var/log/$service-build-failure.log
echo "Build information: $(cat $service/target/maven-archiver/build-helper-maven-plugin/buildInfo.xml)" >> /var/log/$service-build-failure.log
break
fi
done
}
# 回滚已成功部署的相关微服务
rollback_services() {
if [ -n "$failed_service" ]; then
for service in "${successfully_built_services[@]}"; do
# 执行回滚脚本,例如:ansible-playbook rollback-$service.yml
echo "Rolling back $service due to failure of $failed_service"
done
fi
}
parallel_build
check_build_result
rollback_services
这样,只需要在 services.conf
文件中添加新微服务的路径,就可以动态扩展构建和部署流程,而无需修改脚本本身。
2. Jenkins配置
创建自由风格项目
- 在Jenkins主界面,点击“新建Item”。
- 输入项目名称,选择“自由风格的软件项目”,点击“确定”。
源码管理
- 如果微服务使用Git,在“源码管理”中选择“Git”。
- 填写每个微服务的Git仓库URL,添加认证信息(如果需要)。
构建环境
- 勾选“Provide Node & npm bin/ folder to PATH”(如果构建需要Node和npm)。
- 根据需要配置其他构建环境变量。
构建步骤
- 在“构建”部分,选择“Execute shell”(如果Jenkins运行在Linux系统上)或“Execute Windows batch command”(如果Jenkins运行在Windows系统上)。
- 粘贴上述编写的Bash脚本。确保Jenkins所在服务器上安装了脚本运行所需的工具,如Maven等。
构建后操作
- 如果需要发送通知,例如邮件通知,可以在“构建后操作”中选择“Editable Email Notification”。
- 配置收件人、邮件主题和内容,例如:
- 主题:“微服务构建结果 - $BUILD_STATUS”
- 内容:“构建状态:$BUILD_STATUS \n 失败服务:$failed_service \n 日志路径:/var/log/$failed_service - build - failure.log”
通过以上配置,Jenkins可以高效运行编写的Bash脚本体系,实现大型微服务项目的持续集成和部署。