Compare commits

...

8 Commits

171
SLMS/Jenkinsfile vendored

@ -28,12 +28,13 @@ pipeline {
@echo off
echo 清理工作空间中可能被占用的文件...
REM 结束可能占用文件的 Java 进程
taskkill /F /IM java.exe /T 2>nul
taskkill /F /IM javaw.exe /T 2>nul
REM 只结束与当前工作空间相关的 Java 进程
for /f "tokens=2" %%i in ('tasklist /FI "IMAGENAME eq java.exe" /FO LIST ^| findstr /C:"PID:"') do (
wmic process where "ProcessId=%%i and CommandLine like '%%SLMS%%'" delete 2>nul
)
REM 等待一下让进程完全结束
timeout /t 2 /nobreak >nul
REM 等待进程结束
timeout /t 1 /nobreak >nul
echo ✓ 清理完成
'''
@ -201,8 +202,10 @@ pipeline {
stage('7.2 GUI 打包 (JAR + EXE)') {
steps {
echo '========== 打包 GUI 应用 (JAR + EXE) =========='
dir('SLMS') {
bat '''
script {
dir('SLMS') {
// 步骤1: Maven 打包 GUI JAR
bat '''
set JAVA_HOME=%JAVA_HOME%
echo 使用 target-gui 打包 GUI 应用...
@ -229,7 +232,10 @@ pipeline {
copy /Y library.db target\\
echo ✓ 已复制 library.db 到 target 目录
)
'''
// 步骤2: 使用 jpackage 创建 EXE 和 MSI
bat '''
REM 使用 jpackage 创建 Windows EXE
echo.
echo ========== 使用 jpackage 创建 EXE ==========
@ -264,8 +270,8 @@ pipeline {
copy /Y target\\library.db target\\jpackage-input\\
if exist target-gui\\libs xcopy /E /I /Y /Q target-gui\\libs target\\jpackage-input\\libs >nul
REM 使用 jpackage 创建 EXE
echo 开始创建 Windows EXE...
REM 步骤1: 创建 app-image (包含 EXE)
echo 步骤1: 创建 Windows 应用镜像 (app-image)...
jpackage --type app-image ^
--input target\\jpackage-input ^
--name SLMS-GUI ^
@ -278,7 +284,7 @@ pipeline {
--win-console
if errorlevel 1 (
echo ⚠️ jpackage 执行失败
echo ⚠️ app-image 创建失败
goto skip_exe
)
@ -296,6 +302,37 @@ pipeline {
echo ✓ 已创建完整应用目录: target\\slms-gui-app
) else (
echo ⚠️ 未找到生成的 EXE 文件
goto skip_exe
)
REM 步骤2: 创建 MSI 安装包
echo.
echo 步骤2: 创建 Windows MSI 安装包...
jpackage --type msi ^
--input target\\jpackage-input ^
--name SLMS-GUI ^
--main-jar slms-gui.jar ^
--main-class com.smartlibrary.gui.GUIApplication ^
--dest target ^
--app-version 1.0 ^
--vendor "Smart Library" ^
--description "Smart Library Management System - GUI Application" ^
--win-console ^
--win-dir-chooser ^
--win-menu ^
--win-shortcut
if errorlevel 1 (
echo ⚠️ MSI 安装包创建失败
echo 提示: 这不影响 EXE 的使用
) else (
if exist target\\SLMS-GUI-1.0.msi (
echo ✓ MSI 安装包创建成功: target\\SLMS-GUI-1.0.msi
copy /Y target\\SLMS-GUI-1.0.msi target\\slms-gui-installer.msi
echo ✓ 已复制为 slms-gui-installer.msi
) else (
echo ⚠️ 未找到生成的 MSI 文件
)
)
:skip_exe
@ -328,7 +365,8 @@ pipeline {
echo. >> target\\README-GUI.txt
echo 注意: library.db 必须与应用文件在同一目录 >> target\\README-GUI.txt
echo ✓ 已创建 README-GUI.txt
'''
'''
}
}
echo '✓ GUI JAR + EXE 打包成功'
}
@ -451,7 +489,8 @@ pipeline {
echo 检查制品文件...
if exist SLMS\\target\\slms-cli.jar (echo ✓ 找到 slms-cli.jar) else (echo ✗ 未找到 slms-cli.jar)
if exist SLMS\\target\\slms-gui.jar (echo ✓ 找到 slms-gui.jar) else (echo ✗ 未找到 slms-gui.jar)
if exist SLMS\\target\\slms-gui.exe (echo ✓ 找到 slms-gui.exe) else (echo ⚠️ 未找到 slms-gui.exe (可能 jpackage 不可用))
if exist SLMS\\target\\slms-gui.exe (echo ✓ 找到 slms-gui.exe) else (echo ⚠️ 未找到 slms-gui.exe)
if exist SLMS\\target\\slms-gui-installer.msi (echo ✓ 找到 slms-gui-installer.msi) else (echo ⚠️ 未找到 MSI 安装包)
if exist SLMS\\target\\slms-web.war (echo ✓ 找到 slms-web.war) else if exist SLMS\\target\\slms-web.jar (echo ✓ 找到 slms-web.jar) else (echo ✗ 未找到 slms-web.war/jar)
if exist SLMS\\android\\build\\outputs\\apk\\debug\\slms-debug.apk (echo ✓ 找到 slms-debug.apk) else if exist SLMS\\android\\build\\outputs\\apk\\debug\\SLMS-debug.apk (echo ✓ 找到 SLMS-debug.apk) else (echo ✗ 未找到 APK)
exit /b 0
@ -460,7 +499,7 @@ pipeline {
// 归档制品 - 使用 try-catch 确保即使部分文件缺失也能继续
try {
echo '开始归档制品...'
archiveArtifacts artifacts: 'SLMS/target/*.jar,SLMS/target/*.war,SLMS/target/*.exe,SLMS/target/*.bat,SLMS/target/*.txt,SLMS/target/library.db,SLMS/target/libs/*.jar,SLMS/android/build/outputs/apk/debug/*.apk',
archiveArtifacts artifacts: 'SLMS/target/slms-*.jar,SLMS/target/slms-*.war,SLMS/target/slms-*.exe,SLMS/target/slms-*.msi,SLMS/target/*.bat,SLMS/target/README-*.txt,SLMS/target/library.db,SLMS/android/build/outputs/apk/debug/slms-debug.apk',
fingerprint: true,
allowEmptyArchive: true,
onlyIfSuccessful: false
@ -587,6 +626,12 @@ pipeline {
) else (
echo ⚠️ 警告: 找不到 slms-gui.exe
)
if exist target\\slms-gui-installer.msi (
copy /Y target\\slms-gui-installer.msi artifacts\\
echo ✓ 已复制 slms-gui-installer.msi
) else (
echo ⚠️ 警告: 找不到 slms-gui-installer.msi
)
if exist target\\run-gui.bat (
copy /Y target\\run-gui.bat artifacts\\
echo ✓ 已复制 run-gui.bat
@ -595,55 +640,74 @@ pipeline {
copy /Y target\\README-GUI.txt artifacts\\
echo ✓ 已复制 README-GUI.txt
)
REM 复制 libs 目录(如果存在)
if exist target\\libs (
xcopy /E /I /Y /Q target\\libs artifacts\\libs >nul 2>&1
echo ✓ 已复制 libs 目录
)
REM 不复制 libs 目录,减少仓库大小
REM if exist target\\libs (
REM xcopy /E /I /Y /Q target\\libs artifacts\\libs >nul 2>&1
REM echo ✓ 已复制 libs 目录
REM )
REM 显示复制的文件
echo.
echo 制品列表:
dir artifacts
REM 返回上级目录
REM 创建临时目录用于 release 分支
cd ..
set RELEASE_DIR=%TEMP%\\slms-release-%BUILD_NUMBER%
if exist "%RELEASE_DIR%" rmdir /S /Q "%RELEASE_DIR%"
mkdir "%RELEASE_DIR%"
REM 复制制品到临时目录
echo 准备 release 分支内容...
xcopy /E /I /Y /Q SLMS\\artifacts "%RELEASE_DIR%\\artifacts" >nul
REM 配置远程仓库
git remote add educoder https://bdgit.educoder.net/pu6zrsfoy/CHZU_CS231_SEB_lab.git 2>nul || git remote set-url educoder https://bdgit.educoder.net/pu6zrsfoy/CHZU_CS231_SEB_lab.git
REM 创建 README 文件
echo SLMS 项目构建制品 > "%RELEASE_DIR%\\README.md"
echo. >> "%RELEASE_DIR%\\README.md"
echo 构建编号: #%BUILD_NUMBER% >> "%RELEASE_DIR%\\README.md"
echo 构建时间: %DATE% %TIME% >> "%RELEASE_DIR%\\README.md"
echo. >> "%RELEASE_DIR%\\README.md"
echo ## 制品列表 >> "%RELEASE_DIR%\\README.md"
echo. >> "%RELEASE_DIR%\\README.md"
echo - slms-cli.jar - CLI 命令行应用 >> "%RELEASE_DIR%\\README.md"
echo - slms-gui.jar - GUI 桌面应用 (JAR) >> "%RELEASE_DIR%\\README.md"
echo - slms-gui.exe - GUI 桌面应用 (EXE) >> "%RELEASE_DIR%\\README.md"
echo - slms-gui-installer.msi - GUI 安装包 (MSI) >> "%RELEASE_DIR%\\README.md"
echo - slms-web.war - Web 应用 >> "%RELEASE_DIR%\\README.md"
echo - slms-debug.apk - Android 应用 >> "%RELEASE_DIR%\\README.md"
echo - library.db - 数据库文件 >> "%RELEASE_DIR%\\README.md"
echo. >> "%RELEASE_DIR%\\README.md"
echo ## 使用说明 >> "%RELEASE_DIR%\\README.md"
echo. >> "%RELEASE_DIR%\\README.md"
echo 详细使用说明请参考各应用的 README 文件。 >> "%RELEASE_DIR%\\README.md"
REM 获取远程 release 分支
echo 获取远程 release 分支...
git fetch https://%USER_ENC%:%PASS_ENC%@bdgit.educoder.net/pu6zrsfoy/CHZU_CS231_SEB_lab.git release 2>nul
REM 进入临时目录
cd "%RELEASE_DIR%"
REM 切换到 release 分支(如果不存在则创建)
git checkout release 2>nul || git checkout -b release origin/release 2>nul || git checkout -b release
REM 初始化 Git 仓库
git init
git config user.name "Jenkins CI"
git config user.email "ldl@chzu.edu.cn"
REM 添加制品到 Git
git add SLMS/artifacts/
REM 添加所有文件
git add .
git commit -m "release: 构建制品 Build #%BUILD_NUMBER%"
REM 检查是否有变更
git diff --cached --quiet
if errorlevel 1 (
echo 发现制品变更,准备提交...
git commit -m "chore: 发布构建制品 Build #%BUILD_NUMBER%"
echo ✓ 制品已提交到本地仓库
) else (
echo 没有新的制品需要提交
)
REM 推送到 release 分支(强制覆盖,因为只包含制品)
echo 推送制品到头歌 release 分支(仅制品,无源码)...
git push https://%USER_ENC%:%PASS_ENC%@bdgit.educoder.net/pu6zrsfoy/CHZU_CS231_SEB_lab.git HEAD:refs/heads/release --force
REM 推送到 release 分支
echo 推送制品到头歌 release 分支...
git push https://%USER_ENC%:%PASS_ENC%@bdgit.educoder.net/pu6zrsfoy/CHZU_CS231_SEB_lab.git release:release
if errorlevel 1 (
echo ⚠️ 推送失败,尝试强制推送...
git push https://%USER_ENC%:%PASS_ENC%@bdgit.educoder.net/pu6zrsfoy/CHZU_CS231_SEB_lab.git release:release --force
if errorlevel 1 (
echo ✗ 强制推送也失败!
exit /b 1
)
echo ✗ 推送失败!
exit /b 1
)
echo ✓ 推送成功!
REM 清理临时目录
cd %WORKSPACE%
rmdir /S /Q "%RELEASE_DIR%" 2>nul
echo ✓ 已清理临时目录
'''
}
echo '✓ 制品推送到 release 分支成功'
@ -666,6 +730,21 @@ pipeline {
echo "当前构建结果: ${currentBuild.result}"
echo "当前构建状态: ${currentBuild.currentResult}"
// 清理残留的 Java 进程
echo '========== 清理残留进程 =========='
try {
bat '''
@echo off
echo 清理与 SLMS 相关的残留进程...
for /f "tokens=2" %%i in ('tasklist /FI "IMAGENAME eq java.exe" /FO LIST ^| findstr /C:"PID:"') do (
wmic process where "ProcessId=%%i and CommandLine like '%%SLMS%%'" delete 2>nul
)
echo ✓ 进程清理完成
'''
} catch (Exception e) {
echo "⚠️ 清理进程时出错: ${e.message}"
}
// 检查制品是否存在
echo '========== 检查制品文件 =========='
try {

@ -0,0 +1,5 @@
server.port=8081
spring.datasource.url=jdbc:sqlite:../library.db
spring.datasource.driver-class-name=org.sqlite.JDBC
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true

File diff suppressed because it is too large Load Diff

@ -0,0 +1,132 @@
《软件工程》实验个人报告
  实验名称:软件系统测试
  报告名称ATM系统测试报告
  学 号XXX
  姓 名XXX
  项目组别:
  项目名称银行ATM系统
  报告时间2023年12月25日
  文档版本V1.0
目录
0. 小组和个人的实验三进度 1
1. 项目词汇 1
2. EA项目模型整合 1
3. IDE编码和测试 1
3.1. 通用功能编码 1
3.1.1. 执行 2
3.1.2. 单测 2
3.1.3. 集测 2
3.1.4. 系测 2
3.1.5. 验测 2
3.1.6. Git提交日志本地/Gitea/eduCoder 2
3.2. 个人功能编码和测试 2
3.2.1. EA模型全程模型 3
3.2.2. IDE编码 3
3.2.3. IDE四种测试 3
3.2.4. Jenkins流水线成功截图 7
3.2.5. sonarQube质检报告截图 7
4. DevOps(各点可多张关键截图) 7
4.1. EA项目 7
4.2. IDE项目 7
4.3. Gitea仓库 8
4.4. eduCoder仓库 8
4.5. Jenkins任务 8
4.6. BlueOcean流水线 8
4.7. SonarQube质检 8
5. 提交合并审核 8
6. 小组项目(第五人或自由人)提交合并审核 9
7. 项目报告 9
7.1. 个人软件工程实验项目总结(各人均不同) 9
7.2. 小组软件工程实验项目总结(小组均相同) 9
0.小组和个人的实验四进度
1.项目词汇
单元测试、集成测试、系统测试、验收测试、回归测试、性能测试、Mock、静态代码扫描、覆盖率、动态测试、自动化测试、接口测试等加入EA词汇
2.EA项目模型整合
EA项目模型可采用EAPX格式文件EA复制粘贴也可导出模型XML格式文件导出导入再进行模型合并得到小组项目模型。
3.IDE/TRAE编码和测试
3.1.通用功能编码
ATM登录和查询功能的重构。登录和查询功能分为视图、业务、数据三层。项目代码可以正向工程由模型生成代码或者IDE编码得到。
要求小组统一得到ATM的登录和查询功能贴图源码
3.1.1.执行
3.1.2.单测
3.1.3.集测
3.1.4.系测
3.1.5.验测
3.1.6.Git提交日志本地/Gitea/eduCoder
Gitfeature分支完成建模、编码、单测、集测。个人开发多次提交一个预发布版本v0.0.x。个人合并到feature分支每修复就升级版本0.1.0最后feature分支将升级到0.10.0左右。仓库日志为打分依据。
3.2.个人功能编码和测试
小组成员的个人任务功能整合。
要求:
3.2.1.EA模型全程模型
3.2.2.IDE/TRAE编码
3.2.3.IDE/TRAE四种测试
仅为突出显示需求测试:密码三次机会的需求、功能、编码、测试完成实现。其它需求未给出
3.2.4.Jenkins流水线成功截图
3.2.5.sonarQube质检报告截图
4.DevOps(各点可多张关键截图)
4.1.EA项目
4.2.IDE/TRAE项目
4.3.Gitea仓库
4.4.eduCoder仓库
4.5.Jenkins任务
4.6.BlueOcean流水线
4.7.SonarQube质检
期待若干次重构后,合并到开发分支....
5.提交合并审核
将登录和查询功能的全程建模文件、实现源码提交到码云仓库并发起由feature分支合并到develop分支、master分支、release分支请求。
登录xxx项目仓库点击“请求评审”
请求代码评审
刘东良请求老师(项目经理)评审登录、查询功能的源码,并合并到开发分支
测试通过
审核通过
合并
develop分支
master分支
release分支
6.小组项目(第五人或自由人)提交合并审核
将小组所有成员的个人任务功能整合后请求老师审核。建模文件、实现源码提交到码云仓库并发起由feature分支合并到develop分支、master分支、release分支请求。
xxx项目仓库点击“请求评审”
7.项目报告(最后另建项目报告)
  小组和个人的实验五进度
小组和个人的实验总进度
7.1.个人软件工程实验项目总结(各人均不同)
7.2.小组软件工程实验项目总结(小组均相同)

File diff suppressed because it is too large Load Diff

@ -0,0 +1,123 @@
《软件工程》实验个人报告
  实验名称:软件系统编码
  报告名称ATM系统编码报告
  学 号XXX
  姓 名XXX
  项目组别: G1
  分支标志: G1ATM1
  项目名称银行ATM系统
  报告时间2023年05月29日
  文档版本V1.0
目录
1. 项目词汇 1
2. EA项目模型整合 1
3. IDE/TRAE编码和单测 1
3.1. 通用功能编码 1
3.1.1. 源码 1
3.1.2. 执行 4
3.1.3. 单测 5
3.1.4. Git提交日志本地/Gitea/eduCoder 5
3.2. 个人功能编码 5
3.2.1. EA模型全程模型 6
3.2.2. IDE/TRAE编码 6
3.2.3. IDE/TRAE单测 6
3.2.4. Jenkins流水线成功截图 6
3.2.5. sonarQube质检报告截图 6
3.3. 单测 6
4. DevOps(各点可多张关键截图) 6
4.1. EA项目 6
4.2. IDE/TRAE项目 6
4.3. Gitea仓库g0atm 7
4.4. eduCoder仓库g0atm 7
4.5. Jenkins任务 7
4.6. BlueOcean流水线 7
4.7. SonarQube质检 7
5. 提交合并审核【PR&MR】 7
6. 项目报告 8
0.小组和个人的实验三进度
1.项目词汇
编码规范、注释、风格、缺陷、漏洞、异味、重复度、复杂度、静态质检、可靠性、可维护性、安全性、安全热点复审、质量域等加入EA词汇
2.EA项目模型整合
EA项目模型可采用EAPX格式文件EA复制粘贴也可导出模型XML格式文件导出导入再进行模型合并得到小组项目模型。
3.IDE/TRAE编码和单测
3.1.通用功能编码
ATM登录和查询功能的重构。登录和查询功能分为视图、业务、数据三层。项目代码可以正向工程由模型生成代码或者IDE/TRAE编码得到。
要求小组统一得到ATM的登录和查询功能贴图
3.1.1.源码
查询余额功能四层约38行代码
视图层3行
控制层9行
服务层3行
数据层23行
3.1.2.执行
3.1.3.单测
3.1.4.Git提交日志本地/Gitea/eduCoder
Gitfeature分支完成建模、编码、单测、集测。Feature-xxx个人开发多次提交一个预发布版本v0.0.x。个人合并到feature分支每修复就升级版本0.1.0最后feature分支将升级到0.10.0左右。仓库日志为打分依据。
3.2.个人功能编码
小组成员的个人任务功能整合。
要求:
3.2.1.EA模型全程模型
3.2.2.IDE/TRAE编码
3.2.3.IDE/TRAE单测
3.2.4.Jenkins流水线成功截图
3.2.5.sonarQube质检报告截图
3.3.单测
IDE/TRAE单测、测试报告、覆盖率报告EA、IDE/TRAE、Jenkins、SonarQube
4.DevOps(各点可多张关键截图)
4.1.EA项目
4.2.IDE/TRAE项目
4.3.Gitea仓库
4.4.eduCoder仓库
4.5.Jenkins任务
4.6.BlueOcean流水线
4.7.SonarQube质检
期待若干次重构后,合并到开发分支....
5.提交合并审核【PR&MR】
将登录和查询功能的全程建模文件、实现源码提交到头歌平台仓库并发起由feature分支合并到feature分支请求。
登录xxxxx项目仓库点击“请求评审”
请求代码评审
刘东良请求老师(项目经理)评审登录、查询功能的源码,并合并到开发分支
测试通过
审核通过
合并
feature分支
6.项目报告
在此文档基础上修改完成。
Loading…
Cancel
Save