jsharness 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.harness/README.md +199 -0
- package/.harness/agents/code-reviewer/contract.yaml +64 -0
- package/.harness/agents/developer/contract.yaml +72 -0
- package/.harness/agents/gate-controller/contract.yaml +64 -0
- package/.harness/agents/project-manager/contract.yaml +77 -0
- package/.harness/agents/prompt-templates.md +352 -0
- package/.harness/agents/requirements-analyst/contract.yaml +64 -0
- package/.harness/agents/solution-designer/contract.yaml +75 -0
- package/.harness/agents/tester/contract.yaml +92 -0
- package/.harness/config/models.yaml +67 -0
- package/.harness/dev-map/backend/api-definition.md +131 -0
- package/.harness/dev-map/backend/auth-security.md +131 -0
- package/.harness/dev-map/backend/conventions-java.md +471 -0
- package/.harness/dev-map/backend/conventions.md +192 -0
- package/.harness/dev-map/backend/database.md +106 -0
- package/.harness/dev-map/backend/structure.md +140 -0
- package/.harness/dev-map/decisions.md +275 -0
- package/.harness/dev-map/frontend/api-integration.md +139 -0
- package/.harness/dev-map/frontend/components.md +178 -0
- package/.harness/dev-map/frontend/conventions.md +416 -0
- package/.harness/dev-map/frontend/state-management.md +170 -0
- package/.harness/dev-map/frontend/structure.md +103 -0
- package/.harness/dev-map/overview.md +267 -0
- package/.harness/docs/integration-test-plan.md +248 -0
- package/.harness/docs/team-guidelines/README.md +161 -0
- package/.harness/docs/team-guidelines/arch-team.md +811 -0
- package/.harness/docs/team-guidelines/collaboration.md +556 -0
- package/.harness/docs/team-guidelines/pm-team.md +337 -0
- package/.harness/docs/team-guidelines/qa-team.md +562 -0
- package/.harness/docs/team-guidelines/rd-team.md +714 -0
- package/.harness/docs/training-materials.md +280 -0
- package/.harness/gate/baseline.js +220 -0
- package/.harness/gate/checks/build-gates-frontend.js +152 -0
- package/.harness/gate/checks/build-gates-java.js +155 -0
- package/.harness/gate/checks/build-gates.js +119 -0
- package/.harness/gate/checks/engineering-consistency.js +138 -0
- package/.harness/gate/checks/security-quality.js +129 -0
- package/.harness/gate/checks/static-compliance.js +313 -0
- package/.harness/gate/checks/test-compliance.js +114 -0
- package/.harness/gate/index.js +315 -0
- package/.harness/mcp/config.yaml +435 -0
- package/.harness/rules/global/coding-standard.md +232 -0
- package/.harness/rules/global/commit-convention.md +165 -0
- package/.harness/rules/global/process-discipline.md +192 -0
- package/.harness/rules/global/security-baseline.md +306 -0
- package/.harness/rules/project/frontend-vue3.md +293 -0
- package/.harness/rules/project/java-backend.md +460 -0
- package/.harness/rules/project/web-specific.md +231 -0
- package/.harness/skills/build.md +192 -0
- package/.harness/skills/code-review.md +251 -0
- package/.harness/skills/docker-build.md +227 -0
- package/.harness/skills/docs-update.md +164 -0
- package/.harness/skills/java-build.md +261 -0
- package/.harness/skills/lint-check.md +482 -0
- package/.harness/skills/task-board-maintenance.md +105 -0
- package/.harness/skills/test-api.md +461 -0
- package/.harness/skills/test-e2e.md +431 -0
- package/.harness/skills/test-unit.md +649 -0
- package/.harness/skills/vue-frontend-build.md +344 -0
- package/.harness/specs/quality-feedback/implementation-guide.md +350 -0
- package/.harness/task-board.md +121 -0
- package/.harness/workflow/definition.yaml +504 -0
- package/.harness/workflow/validate.js +320 -0
- package/.harness/workflow/variants.yaml +253 -0
- package/README.md +237 -0
- package/bin/jsharness.js +53 -0
- package/lib/index.mjs +778 -0
- package/package.json +1 -0
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
# 文档更新技能 (docs-update)
|
|
2
|
+
|
|
3
|
+
> **执行角色**: 开发实现 Agent / 需求分析 Agent / 方案设计 Agent
|
|
4
|
+
> **触发时机**: 每次代码变更后、阶段交付前
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## CHANGELOG 更新检查
|
|
9
|
+
|
|
10
|
+
### 格式规范(Keep a Changelog)
|
|
11
|
+
|
|
12
|
+
```markdown
|
|
13
|
+
# Changelog
|
|
14
|
+
|
|
15
|
+
All notable changes to this project will be documented in this file.
|
|
16
|
+
|
|
17
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
18
|
+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
19
|
+
|
|
20
|
+
## [Unreleased]
|
|
21
|
+
|
|
22
|
+
### Added
|
|
23
|
+
- New: 用户头像上传与裁剪功能 (`feat(user)` #123)
|
|
24
|
+
- New: JWT 双 Token 刷新机制 (`feat(auth)` #124)
|
|
25
|
+
|
|
26
|
+
### Changed
|
|
27
|
+
- Update: 升级 Vue3 到 3.5 / Vite 到 6.x (`chore(deps)` #125)
|
|
28
|
+
- Update: 用户列表 API 默认分页从 10 改为 20 (`fix(api)` #126)
|
|
29
|
+
|
|
30
|
+
### Fixed
|
|
31
|
+
- Fix: Safari 下记住登录状态失效的问题 (`fix(auth)` #127)
|
|
32
|
+
- Fix: 用户查询分页边界越界 (`fix(api)` #128)
|
|
33
|
+
|
|
34
|
+
### Security
|
|
35
|
+
- Fix: 修复 X-XSS-Protection 头未设置的问题 (`security` #129)
|
|
36
|
+
|
|
37
|
+
## [1.2.0] - 2026-05-15
|
|
38
|
+
|
|
39
|
+
### Added
|
|
40
|
+
- ...
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
### 检查规则
|
|
44
|
+
|
|
45
|
+
| 规则 | 说明 |
|
|
46
|
+
|------|------|
|
|
47
|
+
| **用户可见功能** | 必须记录到 Changelog(Added / Changed / Fixed)|
|
|
48
|
+
| **纯内部重构** | 可选记录到 Changed |
|
|
49
|
+
| **依赖升级** | 必须记录(含安全补丁)|
|
|
50
|
+
| **破坏性变更** | 必须标记 BREAKING CHANGE |
|
|
51
|
+
| **Issue 关联** | 每条记录必须关联 Issue/PR 编号 |
|
|
52
|
+
| **时间戳** | 每个正式版本必须有发布日期 |
|
|
53
|
+
|
|
54
|
+
### Gate 检查脚本引用
|
|
55
|
+
|
|
56
|
+
```yaml
|
|
57
|
+
# gate/checks/engineering-consistency.js 会检查:
|
|
58
|
+
# 1. 当前 PR 的改动是否需要在 CHANGELOG.md 中体现
|
|
59
|
+
# 2. Unreleased 区域是否有对应条目
|
|
60
|
+
# 3. 条目格式是否符合规范
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
---
|
|
64
|
+
|
|
65
|
+
## dev-map 同步检查
|
|
66
|
+
|
|
67
|
+
### 同步原则:**谁改代码谁更新地图**
|
|
68
|
+
|
|
69
|
+
当发生以下变更时,必须同步更新 dev-map:
|
|
70
|
+
|
|
71
|
+
| 代码变更 | 需要更新的 dev-map 文件 |
|
|
72
|
+
|----------|------------------------|
|
|
73
|
+
| 新增目录/文件 | `dev-map/frontend/structure.md` 或 `dev-map/backend/structure.md` |
|
|
74
|
+
| 新增组件/复用模式 | `dev-map/frontend/components.md` 或 `dev-map/backend/structure.md` |
|
|
75
|
+
| 修改状态管理方式 | `dev-map/frontend/state-management.md` |
|
|
76
|
+
| 新增/修改 API | `dev-map/backend/api-definition.md` 或 `dev-map/frontend/api-integration.md` |
|
|
77
|
+
| 数据模型变更 | `dev-map/backend/database.md` |
|
|
78
|
+
| CI/CD 流水线调整 | `dev-map/infra/ci-cd.md` |
|
|
79
|
+
| Docker/部署变更 | `dev-map/infra/docker.md` |
|
|
80
|
+
| 重要技术决策 | `dev-map/decisions.md` |
|
|
81
|
+
|
|
82
|
+
### 同步检查脚本
|
|
83
|
+
|
|
84
|
+
```bash
|
|
85
|
+
# 检查 dev-map 是否与代码一致
|
|
86
|
+
node .harness/gate/checks/engineering-consistency.js --check-devmap
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
**不一致的情况**:
|
|
90
|
+
- 代码中存在 dev-map 未记录的新模块 → WARNING
|
|
91
|
+
- dev-map 引用了已删除的代码 → FAIL(地图过期)
|
|
92
|
+
|
|
93
|
+
---
|
|
94
|
+
|
|
95
|
+
## README / API 文档同步
|
|
96
|
+
|
|
97
|
+
### README.md 检查项
|
|
98
|
+
|
|
99
|
+
| 变更类型 | 需要更新的 README 部分 |
|
|
100
|
+
|----------|-----------------------|
|
|
101
|
+
| 新的环境变量 | Configuration / Environment Variables |
|
|
102
|
+
| 新的 npm scripts | Getting Started / Commands |
|
|
103
|
+
| 新的技术栈依赖 | Tech Stack |
|
|
104
|
+
| 修改启动方式 | Quick Start |
|
|
105
|
+
| 新的部署要求 | Deployment |
|
|
106
|
+
|
|
107
|
+
### API 文档同步
|
|
108
|
+
|
|
109
|
+
如果项目使用 OpenAPI/Swagger:
|
|
110
|
+
|
|
111
|
+
```bash
|
|
112
|
+
# 检查 API 文档与代码的一致性
|
|
113
|
+
# 方法 1: 类型驱动(如 tsoa/nestjs/swagger)
|
|
114
|
+
npm run generate:openapi # 从代码生成文档
|
|
115
|
+
diff docs/openapi.yaml generated-openapi.yaml # 对比差异
|
|
116
|
+
|
|
117
|
+
# 方法 2: 契约测试(Pact)
|
|
118
|
+
npm run test:pact # 验证文档与实现的契约一致性
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
### 文档更新检查清单
|
|
122
|
+
|
|
123
|
+
```
|
|
124
|
+
□ CHANGELOG.md 已更新(如有用户可见变更)
|
|
125
|
+
□ dev-map 相关分区已同步
|
|
126
|
+
□ README.md 环境变量/启动命令已更新
|
|
127
|
+
□ API 文档(如有)与新接口一致
|
|
128
|
+
□ 新增的配置项已在 .env.example 中标注
|
|
129
|
+
□ 删除的功能/配置已从文档中移除
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
---
|
|
133
|
+
|
|
134
|
+
## 文档更新结果输出模板
|
|
135
|
+
|
|
136
|
+
```yaml
|
|
137
|
+
docs_update_result:
|
|
138
|
+
timestamp: "2026-05-20T22:00:00Z"
|
|
139
|
+
status: pass | fail | warning
|
|
140
|
+
|
|
141
|
+
changelog:
|
|
142
|
+
required: true # 本次变更是否需要更新 CHANGELOG
|
|
143
|
+
updated: true # 是否已完成更新
|
|
144
|
+
entry_format_valid: true
|
|
145
|
+
|
|
146
|
+
dev_map_sync:
|
|
147
|
+
checked_files: 3
|
|
148
|
+
consistent: true
|
|
149
|
+
stale_entries: []
|
|
150
|
+
|
|
151
|
+
readme_sync:
|
|
152
|
+
requires_update: false
|
|
153
|
+
updated: true
|
|
154
|
+
|
|
155
|
+
api_docs_sync:
|
|
156
|
+
enabled: true
|
|
157
|
+
consistent: true
|
|
158
|
+
|
|
159
|
+
issues:
|
|
160
|
+
- severity: "warning"
|
|
161
|
+
file: "dev-map/backend/api-definition.md"
|
|
162
|
+
issue: "缺少新增端点 PATCH /api/v1/users/:id/preferences 的文档"
|
|
163
|
+
suggestion: "请更新 API 定义文档"
|
|
164
|
+
```
|
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
# Java 后端构建技能 (java-build)
|
|
2
|
+
|
|
3
|
+
> **执行角色**: 开发者 Agent / CI Pipeline
|
|
4
|
+
> **适用项目**: Spring Boot + Maven Java 后端项目
|
|
5
|
+
> **来源**: `files/java-backend-coding-standards/SKILL.md` §15 测试规范
|
|
6
|
+
> **归档日期**: 2026-05-21
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## 1. 编译构建
|
|
11
|
+
|
|
12
|
+
### 1.1 Maven 编译
|
|
13
|
+
|
|
14
|
+
```bash
|
|
15
|
+
# 完整清理编译(清除 target 目录后重新编译)
|
|
16
|
+
mvn clean compile
|
|
17
|
+
|
|
18
|
+
# 跳过测试编译
|
|
19
|
+
mvn clean compile -DskipTests
|
|
20
|
+
|
|
21
|
+
# 指定 profile 编译
|
|
22
|
+
mvn clean compile -P prod
|
|
23
|
+
|
|
24
|
+
# 多模块编译(从根目录)
|
|
25
|
+
mvn clean compile -pl domain -am
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
**通过标准**:
|
|
29
|
+
- ✅ 零编译错误
|
|
30
|
+
- ✅ 零 deprecated 警告(理想状态)
|
|
31
|
+
- ⚠️ 允许 minor warning 但需说明理由
|
|
32
|
+
|
|
33
|
+
### 1.2 常见编译问题处理
|
|
34
|
+
|
|
35
|
+
| 问题 | 原因 | 解决方案 |
|
|
36
|
+
|------|------|----------|
|
|
37
|
+
| 找不到符号 | 缺少依赖或 import 错误 | 检查 pom.xml 和 import |
|
|
38
|
+
| 循环依赖 | 模块间相互引用 | 重构消除循环或使用事件解耦 |
|
|
39
|
+
| JDK 版本不匹配 | 项目要求 JDK21,环境为低版本 | 设置 JAVA_HOME 或 maven.compiler |
|
|
40
|
+
| Lombok 注解未生效 | 注解处理器未配置 | 确认 pom.xml 中 lombok 依赖和 annotationProcessorPaths |
|
|
41
|
+
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
## 2. 单元测试执行
|
|
45
|
+
|
|
46
|
+
### 2.1 运行测试
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
# 运行全部单元测试
|
|
50
|
+
mvn test
|
|
51
|
+
|
|
52
|
+
# 运行指定测试类
|
|
53
|
+
mvn test -Dtest=UserServiceTest
|
|
54
|
+
|
|
55
|
+
# 运行指定测试方法
|
|
56
|
+
mvn test -Dtest=UserServiceTest#testCreateUser
|
|
57
|
+
|
|
58
|
+
# 跳过测试(仅打包时使用)
|
|
59
|
+
mvn test -DskipTests
|
|
60
|
+
|
|
61
|
+
# 并行执行测试(加速)
|
|
62
|
+
mvn test -T 4 # 4 个线程并行
|
|
63
|
+
|
|
64
|
+
# 失败重跑(CI 环境推荐)
|
|
65
|
+
mvn test -Dsurefire.rerunFailingTestsCount=2
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
### 2.2 覆盖率收集(JaCoCo)
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
# 执行测试并收集覆盖率
|
|
72
|
+
mvn test jacoco:report
|
|
73
|
+
|
|
74
|
+
# 查看覆盖率报告
|
|
75
|
+
# 报告位置: {module}/target/site/jacoco/index.html
|
|
76
|
+
|
|
77
|
+
# 覆盖率阈值检查(不达标则构建失败)
|
|
78
|
+
mvn verify -Djacoco.check.skip=false
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
**覆盖率目标**:
|
|
82
|
+
|
|
83
|
+
| 代码类型 | 行覆盖率目标 | 分支覆盖率目标 |
|
|
84
|
+
|---------|------------|--------------|
|
|
85
|
+
| 核心业务逻辑 | ≥ **90%** | ≥ **80%** |
|
|
86
|
+
| 工具函数 | ≥ **85%** | ≥ **75%** |
|
|
87
|
+
| Controller 层 | ≥ **70%** | ≥ **60%** |
|
|
88
|
+
| 配置/常量 | ≥ **50%** | - |
|
|
89
|
+
|
|
90
|
+
**JaCoCo pom.xml 配置**:
|
|
91
|
+
```xml
|
|
92
|
+
<plugin>
|
|
93
|
+
<groupId>org.jacoco</groupId>
|
|
94
|
+
<artifactId>jacoco-maven-plugin</artifactId>
|
|
95
|
+
<version>0.8.11</version>
|
|
96
|
+
<executions>
|
|
97
|
+
<execution>
|
|
98
|
+
<goals><goal>prepare-agent</goal></goals>
|
|
99
|
+
</execution>
|
|
100
|
+
<execution>
|
|
101
|
+
<id>report</id>
|
|
102
|
+
<phase>test</phase>
|
|
103
|
+
<goals><goal>report</goal></goals>
|
|
104
|
+
</execution>
|
|
105
|
+
<execution>
|
|
106
|
+
<id>check</id>
|
|
107
|
+
<phase>verify</phase>
|
|
108
|
+
<goals><goal>check</goal></goals>
|
|
109
|
+
<configuration>
|
|
110
|
+
<rules>
|
|
111
|
+
<rule>
|
|
112
|
+
<element>BUNDLE</element>
|
|
113
|
+
<limits>
|
|
114
|
+
<limit>
|
|
115
|
+
<counter>LINE</counter>
|
|
116
|
+
<value>COVEREDRATIO</value>
|
|
117
|
+
<minimum>0.80</minimum>
|
|
118
|
+
</limit>
|
|
119
|
+
</limits>
|
|
120
|
+
</rule>
|
|
121
|
+
</rules>
|
|
122
|
+
</configuration>
|
|
123
|
+
</execution>
|
|
124
|
+
</executions>
|
|
125
|
+
</plugin>
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
### 2.3 测试框架标准配置
|
|
129
|
+
|
|
130
|
+
```xml
|
|
131
|
+
<!-- JUnit 5 + Mockito -->
|
|
132
|
+
<dependency>
|
|
133
|
+
<groupId>org.junit.jupiter</groupId>
|
|
134
|
+
<artifactId>junit-jupiter</artifactId>
|
|
135
|
+
<scope>test</scope>
|
|
136
|
+
</dependency>
|
|
137
|
+
<dependency>
|
|
138
|
+
<groupId>org.mockito</groupId>
|
|
139
|
+
<artifactId>mockito-core</artifactId>
|
|
140
|
+
<scope>test</scope>
|
|
141
|
+
</dependency>
|
|
142
|
+
<dependency>
|
|
143
|
+
<groupId>org.springframework.boot</groupId>
|
|
144
|
+
<artifactId>spring-boot-starter-test</artifactId>
|
|
145
|
+
<scope>test</scope>
|
|
146
|
+
</dependency>
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
---
|
|
150
|
+
|
|
151
|
+
## 3. 打包与部署
|
|
152
|
+
|
|
153
|
+
### 3.1 Maven 打包
|
|
154
|
+
|
|
155
|
+
```bash
|
|
156
|
+
# 标准打包(跳过测试)
|
|
157
|
+
mvn package -DskipTests
|
|
158
|
+
|
|
159
|
+
# 完整打包(含测试)
|
|
160
|
+
mvn package
|
|
161
|
+
|
|
162
|
+
# 打包并安装到本地仓库
|
|
163
|
+
mvn install -DskipTests
|
|
164
|
+
|
|
165
|
+
# 排除文档生成加速打包
|
|
166
|
+
mvn package -DskipTests -Dmaven.javadoc.skip=true
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
### 3.2 Docker 镜像构建
|
|
170
|
+
|
|
171
|
+
```dockerfile
|
|
172
|
+
# 标准 Dockerfile(多阶段构建)
|
|
173
|
+
# === 阶段 1: 构建 ===
|
|
174
|
+
FROM maven:3.9-eclipse-temurin-21 AS builder
|
|
175
|
+
WORKDIR /app
|
|
176
|
+
COPY pom.xml .
|
|
177
|
+
COPY src ./src
|
|
178
|
+
RUN mvn clean package -DskipTests -o
|
|
179
|
+
|
|
180
|
+
# === 阶段 2: 运行 ===
|
|
181
|
+
FROM eclipse-temurin:21-jre-alpine
|
|
182
|
+
WORKDIR /app
|
|
183
|
+
COPY --from=builder /app/target/*.jar app.jar
|
|
184
|
+
EXPOSE 8080
|
|
185
|
+
ENV JAVA_OPTS="-Xms256m -Xmx512m"
|
|
186
|
+
ENTRYPOINT ["sh", "-c", "java $JAVA_OPTS -jar app.jar"]
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
```bash
|
|
190
|
+
# 构建镜像
|
|
191
|
+
docker build -t jscicd-app:latest .
|
|
192
|
+
|
|
193
|
+
# 推送镜像
|
|
194
|
+
docker push registry.example.com/jscicd-app:latest
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
---
|
|
198
|
+
|
|
199
|
+
## 4. 构建失败处理策略
|
|
200
|
+
|
|
201
|
+
### 4.1 分类处理
|
|
202
|
+
|
|
203
|
+
| 失败类型 | 原因分析 | 解决步骤 |
|
|
204
|
+
|---------|---------|----------|
|
|
205
|
+
| 编译错误 | 语法错误、类型错误、缺少依赖 | 修复代码 → 重新 `mvn compile` |
|
|
206
|
+
| 测试失败 | 测试用例未通过 | 分析失败原因 → 修复代码或更新测试 → 重新 `mvn test` |
|
|
207
|
+
| 覆盖率不足 | 新代码缺少测试 | 补充测试用例 → 重新验证覆盖率 |
|
|
208
|
+
| Checkstyle/PMD 违规 | 代码风格不符合规范 | 按 IDE 提示修复 → 重新检查 |
|
|
209
|
+
| 依赖解析失败 | 私有库不可用、版本冲突 | 检查网络/仓库配置 → 更新 pom.xml |
|
|
210
|
+
|
|
211
|
+
### 4.2 快速诊断命令
|
|
212
|
+
|
|
213
|
+
```bash
|
|
214
|
+
# 查看详细错误信息
|
|
215
|
+
mvn clean compile -e # 显示完整堆栈
|
|
216
|
+
mvn clean compile -X # 调试模式(最详细)
|
|
217
|
+
|
|
218
|
+
# 查看依赖树(排查冲突)
|
|
219
|
+
mvn dependency:tree -Dverbose
|
|
220
|
+
|
|
221
|
+
# 查找特定依赖来源
|
|
222
|
+
mvn dependency:tree -Dincludes=com.baomidou:mybatis-plus
|
|
223
|
+
|
|
224
|
+
# 检查过时依赖
|
|
225
|
+
mvn versions:display-dependency-updates
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
---
|
|
229
|
+
|
|
230
|
+
## 5. CI/CD 集成示例
|
|
231
|
+
|
|
232
|
+
```yaml
|
|
233
|
+
# .gitlab-ci.yml 或 GitHub Actions 示例
|
|
234
|
+
stages:
|
|
235
|
+
- build
|
|
236
|
+
- test
|
|
237
|
+
- package
|
|
238
|
+
- deploy
|
|
239
|
+
|
|
240
|
+
build-job:
|
|
241
|
+
stage: build
|
|
242
|
+
script:
|
|
243
|
+
- mvn clean compile
|
|
244
|
+
artifacts:
|
|
245
|
+
paths:
|
|
246
|
+
- target/
|
|
247
|
+
|
|
248
|
+
test-job:
|
|
249
|
+
stage: test
|
|
250
|
+
script:
|
|
251
|
+
- mvn test jacoco:report
|
|
252
|
+
coverage: '/Total.*?([0-9]{1,3})%/'
|
|
253
|
+
|
|
254
|
+
package-job:
|
|
255
|
+
stage: package
|
|
256
|
+
script:
|
|
257
|
+
- mvn package -DskipTests
|
|
258
|
+
- docker build -t $IMAGE_TAG .
|
|
259
|
+
only:
|
|
260
|
+
- main
|
|
261
|
+
```
|