You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
3.8 KiB
3.8 KiB
🔧 问题修复总结
修复的三个问题
1. ✅ APK 制品缺失
问题: Android APK 没有被正确打包和归档
原因:
- Gradle 命令路径错误(在
android子目录执行) - APK 文件名不匹配(查找
app-debug.apk但实际是android-debug.apk)
修复:
// 修改前:在 SLMS/android 目录执行
dir('SLMS/android') {
call ..\\gradlew.bat assembleDebug
}
// 修改后:在 SLMS 目录执行,使用模块路径
dir('SLMS') {
call gradlew.bat :android:assembleDebug
}
2. ✅ 头歌 Release 分支没有制品
问题: 制品没有成功推送到头歌的 release 分支
原因:
- release 分支可能不存在
- 直接推送 HEAD 到 release 会导致分支历史混乱
- 没有正确切换到 release 分支
修复:
REM 1. 检查并创建 release 分支
git fetch ... release:release || git checkout -b release
REM 2. 切换到 release 分支
git checkout release || git checkout -b release
REM 3. 合并制品更改
git merge --no-ff --allow-unrelated-histories -m "..." -
REM 4. 推送到远程 release 分支
git push ... release:release --force
3. ✅ 邮件通知没收到
问题: 构建完成后没有收到邮件通知
原因:
- 邮件发送异常被 catch 捕获但没有详细日志
- 无法确定是否进入了正确的 post 部分
修复:
// 1. 添加详细的错误日志
catch (Exception e) {
echo "⚠️ 邮件发送失败: ${e.message}"
echo "错误详情: ${e.toString()}"
e.printStackTrace()
}
// 2. 在 always 部分添加构建状态检查
always {
script {
echo "当前构建结果: ${currentBuild.result}"
echo "当前构建状态: ${currentBuild.currentResult}"
if (currentBuild.result == 'FAILURE') {
echo "构建失败,应该发送失败邮件"
} else if (currentBuild.result == 'UNSTABLE') {
echo "构建不稳定,应该发送不稳定邮件"
} else {
echo "构建成功,应该发送成功邮件"
}
}
}
📋 验证清单
下次构建后,检查以下内容:
APK 制品
- Jenkins 构建日志显示 "✓ Android APK 打包完成: slms-debug.apk"
- Jenkins 制品列表包含
slms-debug.apk - 可以从 Jenkins 下载 APK 文件
Release 分支制品
- 访问 https://bdgit.educoder.net/pu6zrsfoy/CHZU_CS231_SEB_lab/tree/release/SLMS/artifacts
- 确认包含 4 个制品:
- slms-cli.jar
- slms-gui.jar
- slms-web.war
- slms-debug.apk
邮件通知
- 检查 Jenkins 构建日志中的邮件发送状态
- 搜索 "当前构建结果" 确认进入了正确的 post 部分
- 检查 602924803@qq.com 和 1280568951@qq.com 的收件箱
- 如果失败,查看详细错误日志
🚀 下一步
- 提交更改:
git add Jenkinsfile docs/FIXES_SUMMARY.md
git commit -m "fix: 修复 APK 制品、release 分支推送和邮件通知问题"
git push
-
触发构建: 推送后 Jenkins 会自动触发构建
-
监控日志: 查看构建日志,确认三个问题都已解决
-
验证结果:
- 下载 APK 测试
- 访问头歌 release 分支
- 检查邮箱
📝 技术细节
Gradle 模块路径
# 错误方式
cd android
gradlew assembleDebug
# 正确方式
gradlew :android:assembleDebug
Git 分支管理
# 确保分支存在并切换
git fetch origin release:release 2>/dev/null || git checkout -b release
git checkout release
git merge --no-ff -m "merge" -
git push origin release:release
Jenkins 邮件调试
// 添加详细日志
echo "准备发送邮件到: ${recipients}"
emailext(...)
echo "✓ 邮件已发送"
// 捕获异常
catch (Exception e) {
e.printStackTrace() // 打印完整堆栈
}