ai-engineering-init 1.16.4 → 1.17.1

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.
@@ -0,0 +1,154 @@
1
+ # /init-config - 从 Markdown 一键初始化环境配置
2
+
3
+ 从用户提供的 Markdown 文件中解析 MySQL 数据库连接和 Loki 日志查询配置,一键写入配置文件。
4
+
5
+ ## 使用方式
6
+
7
+ ```
8
+ /init-config <md文件路径> [--scope global|local]
9
+ ```
10
+
11
+ - `/init-config env-config.md` — 解析 md 文件,写入全局配置(默认)
12
+ - `/init-config env-config.md --scope local` — 写入当前项目本地配置
13
+ - `/init-config` — 无参数时,使用模板文件 `.claude/templates/env-config.md`
14
+
15
+ ## 参数
16
+
17
+ - `$ARGUMENTS` 的第一个词为文件路径,可以是相对路径或绝对路径
18
+ - `--scope global`(默认)写入 `~/.claude/` + `~/.cursor/`
19
+ - `--scope local` 写入当前项目 `.claude/`
20
+
21
+ ## Markdown 文件格式
22
+
23
+ 文件中必须包含以下两个段落(任一即可):
24
+
25
+ ### MySQL 数据库连接(标题含"MySQL"或"数据库")
26
+
27
+ ```markdown
28
+ ## MySQL 数据库连接
29
+
30
+ | 环境 | host | port | user | password | range | 描述 |
31
+ |------|------|------|------|----------|-------|------|
32
+ | local | 127.0.0.1 | 3306 | root | xxx | | 本地环境 |
33
+ | dev | dev-db.com | 3306 | dev_user | xxx | 1~15 | 开发环境 |
34
+
35
+ 默认环境: local
36
+ ```
37
+
38
+ ### Loki 日志查询(标题含"Loki"或"日志")
39
+
40
+ ```markdown
41
+ ## Loki 日志查询
42
+
43
+ | 环境 | 名称 | URL | Token | 别名 | range |
44
+ |------|------|-----|-------|------|-------|
45
+ | monitor-dev | Monitor开发 | https://grafana.example.com | glsa_xxx | mdev,dev | dev1~15 |
46
+
47
+ 默认环境: monitor-dev
48
+ ```
49
+
50
+ ### 注意事项
51
+
52
+ - host/URL 为 `YOUR_*` 占位符的行会被跳过
53
+ - Token 为 `YOUR_*` 的行会写入空 Token(稍后可用 `config --type loki` 补充)
54
+ - range 字段会自动展开为 projects 列表(如 `dev1~15` → `["dev01","dev02",...,"dev15"]`)
55
+
56
+ ## 执行流程
57
+
58
+ ### 第一步:确定文件路径和范围
59
+
60
+ ```bash
61
+ # 解析参数
62
+ FILE_PATH="${ARGUMENTS%% --*}" # 第一个参数为文件路径
63
+ SCOPE="global" # 默认全局
64
+ [[ "$ARGUMENTS" == *"--scope local"* ]] && SCOPE="local"
65
+
66
+ # 如果没指定文件,检查模板
67
+ if [ -z "$FILE_PATH" ]; then
68
+ FILE_PATH=".claude/templates/env-config.md"
69
+ fi
70
+ ```
71
+
72
+ 确认文件存在,不存在则提示用户创建。
73
+
74
+ ### 第二步:读取并解析 Markdown
75
+
76
+ 读取文件内容,按标题(`## MySQL`/`## Loki`)分割为两个段落。
77
+
78
+ 解析每个段落中的 Markdown 表格:
79
+ 1. 找到表头行(含 `|` 且下一行为 `|---|`)
80
+ 2. 提取表头列名
81
+ 3. 逐行解析数据行
82
+ 4. 跳过 `YOUR_*` 占位符
83
+ 5. 提取"默认环境: xxx"
84
+
85
+ ### 第三步:生成配置 JSON
86
+
87
+ **MySQL 配置**(mysql-config.json):
88
+ ```json
89
+ {
90
+ "environments": {
91
+ "local": { "host": "127.0.0.1", "port": 3306, "user": "root", "password": "xxx", "_desc": "本地环境" },
92
+ "dev": { "host": "dev-db.com", "port": 3306, "user": "dev_user", "password": "xxx", "range": "1~15", "_desc": "开发环境" }
93
+ },
94
+ "default": "local"
95
+ }
96
+ ```
97
+
98
+ **Loki 配置**(loki-config.json):
99
+ ```json
100
+ {
101
+ "active": "monitor-dev",
102
+ "environments": {
103
+ "monitor-dev": {
104
+ "name": "Monitor开发",
105
+ "url": "https://grafana.example.com",
106
+ "token": "glsa_xxx",
107
+ "aliases": ["mdev", "dev"],
108
+ "range": "dev1~15",
109
+ "projects": ["dev01", "dev02", "...", "dev15"]
110
+ }
111
+ }
112
+ }
113
+ ```
114
+
115
+ ### 第四步:写入配置文件
116
+
117
+ 根据 scope 决定写入位置:
118
+
119
+ | scope | MySQL 路径 | Loki 路径 |
120
+ |-------|-----------|----------|
121
+ | global | `~/.claude/mysql-config.json` + `~/.cursor/mysql-config.json` | `~/.claude/loki-config.json` + `~/.cursor/loki-config.json` |
122
+ | local | `.claude/mysql-config.json` | `.claude/loki-config.json` |
123
+
124
+ 写入后输出:
125
+ ```
126
+ ✔ MySQL 配置(N 个环境)→ 路径
127
+ ✔ Loki 配置(N 个环境)→ 路径
128
+ ```
129
+
130
+ ### 第五步:确保 .gitignore(仅 local scope)
131
+
132
+ 如果是本地配置,确保 `.gitignore` 包含:
133
+ ```
134
+ **/mysql-config.json
135
+ **/loki-config.json
136
+ ```
137
+
138
+ ## 模板文件
139
+
140
+ 如果用户没有配置文件,输出模板路径:
141
+
142
+ ```
143
+ 提示:请先创建配置文件,参考模板:
144
+ .claude/templates/env-config.md
145
+
146
+ 填写后运行:
147
+ /init-config .claude/templates/env-config.md
148
+ ```
149
+
150
+ ## 安全规则
151
+
152
+ - 不要在输出中显示完整的 password 和 Token(用 `***` 脱敏)
153
+ - local scope 时自动更新 .gitignore
154
+ - 覆盖已有配置前先展示将要写入的环境列表,让用户确认
@@ -117,6 +117,7 @@ const instructions = `## 强制技能激活流程(必须执行)
117
117
  - skill-creator: 创建技能模板/技能脚手架/skill scaffold
118
118
  - leniu-report-scenario: 报表/报表开发/报表查询/报表导出/合计行/totalLine/汇总报表/定制报表/report_order_info/金额处理/分转元/餐次/mealtime/ReportBaseTotalVO/CustomNumberConverter
119
119
  - leniu-marketing-scenario: 营销/营销规则/消费规则/计价规则/充值规则/扣款规则/就餐规则/折扣/满减/限额/限次/补贴/赠送/满赠/管理费/MarketApi/RulePriceHandler/RuleRechargeHandler/RulePayHandler/MarketRule/规则定制
120
+ - jenkins-deploy: 打包/部署/Jenkins/构建/Portainer/发布到dev/发布到test/更新环境/自动部署
120
121
 
121
122
  ### 步骤 2 - 激活(逐个调用,等待每个完成)
122
123
 
@@ -0,0 +1,207 @@
1
+ ---
2
+ name: jenkins-deploy
3
+ description: |
4
+ Jenkins + Portainer 自动打包部署技能。通过 Python 脚本调用 Jenkins API 构建项目,并触发 Portainer Webhook/Update 完成容器更新。
5
+
6
+ 触发场景:
7
+ - 需要将代码打包部署到 dev/test 环境
8
+ - 需要触发 Jenkins 构建 core 或 api 项目
9
+ - 需要更新 Portainer 容器服务
10
+ - 需要查看或修改构建配置(分支、环境、模式)
11
+ - 定制项目的打包部署
12
+
13
+ 触发词:打包、部署、Jenkins、构建、Portainer、发布到dev、发布到test、更新环境、自动部署
14
+ ---
15
+
16
+ # Jenkins + Portainer 自动打包部署
17
+
18
+ ## 概述
19
+
20
+ 项目使用 `jenkins/` 目录下的 Python 脚本实现自动化构建部署,流程:
21
+
22
+ ```
23
+ Jenkins 构建 core → Jenkins 构建 api → Portainer 更新容器
24
+ ```
25
+
26
+ ## 文件位置
27
+
28
+ | 文件 | 作用 |
29
+ |------|------|
30
+ | `jenkins/jk_build.py` | 主构建脚本 |
31
+ | `jenkins/env_param.json` | 环境配置(Jenkins/Portainer 连接参数) |
32
+ | `jenkins/last_cd_env.json` | 上次构建参数(自动保存) |
33
+
34
+ ## 构建模式
35
+
36
+ | 模式 | 说明 | 执行步骤 |
37
+ |------|------|---------|
38
+ | `0` | 只构建 | 构建 core + api,不更新 Portainer |
39
+ | `1` | 全构建+更新 | 构建 core + api → 触发 Portainer 更新 |
40
+ | `2` | 构建 api+更新 | 跳过 core,构建 api → 触发 Portainer 更新 |
41
+ | `3` | 只更新 | 不构建,直接触发 Portainer 更新 |
42
+
43
+ ## 环境支持
44
+
45
+ | 环境 | 前缀 | Jenkins Job | Portainer |
46
+ |------|------|-------------|-----------|
47
+ | 开发环境 | `dev` + 编号 | `dev-tengyun-core` / `dev-tengyun-yunshitang-api` | devops-dev.xnzn.net |
48
+ | 测试环境 | `test` + 编号 | `test-tengyun-core` / `test-tengyun-yunshitang-api` | devops-test.xnzn.net |
49
+ | dev16+ | `dev16` ~ `dev43` | 同 dev | xnzn-dev.xnzn.net(使用 forceupdateservice) |
50
+ | dev44+ | `dev44` 及以上 | 只支持模式 0 | 需手动更新 |
51
+
52
+ ## 定制项目支持
53
+
54
+ 当指定 `api_param_folder`(定制工程文件夹名)时,Jenkins Job 路径变为:
55
+
56
+ ```
57
+ {folder_name}/dev-后端-core # 替代 dev-tengyun-core
58
+ {folder_name}/dev-后端-api # 替代 dev-tengyun-yunshitang-api
59
+ ```
60
+
61
+ ## 使用方式
62
+
63
+ ### 直接运行脚本
64
+
65
+ ```bash
66
+ cd jenkins && python jk_build.py
67
+ ```
68
+
69
+ 脚本会交互式询问:
70
+ 1. **模式**(0/1/2/3)
71
+ 2. **环境**(dev1, dev2, test1 等)
72
+ 3. **core 分支**(如 release_5.56.0)
73
+ 4. **api 分支**(如 master)
74
+ 5. **定制工程文件夹**(可选,空格或 None 跳过)
75
+
76
+ ### 通过 Claude 辅助部署
77
+
78
+ 当用户说"打包到 devX"时:
79
+
80
+ 1. **读取** `jenkins/last_cd_env.json` 获取上次构建参数
81
+ 2. **确认参数**:环境、分支、模式、是否定制项目
82
+ 3. **修改** `last_cd_env.json` 写入新参数
83
+ 4. **执行** `cd jenkins && python jk_build.py`(脚本读取预设值,用户直接回车即可)
84
+
85
+ ## 配置文件说明
86
+
87
+ ### last_cd_env.json(构建参数)
88
+
89
+ ```json
90
+ {
91
+ "build_mode": "0",
92
+ "cd_env": "dev63",
93
+ "core_param_branch": "release_5.56.0",
94
+ "api_param_branch": "master",
95
+ "api_param_folder": null
96
+ }
97
+ ```
98
+
99
+ | 字段 | 说明 |
100
+ |------|------|
101
+ | `build_mode` | 构建模式(0/1/2/3) |
102
+ | `cd_env` | 目标环境(如 dev1, test2) |
103
+ | `core_param_branch` | core 仓库分支 |
104
+ | `api_param_branch` | api 仓库分支 |
105
+ | `api_param_folder` | 定制项目文件夹(null 表示标准项目) |
106
+
107
+ ### env_param.json(环境连接配置)
108
+
109
+ 包含 Jenkins 和 Portainer 的连接参数(用户名、API Token、服务地址等),按 dev/test 环境分组。
110
+
111
+ > **注意**:此文件包含敏感凭证,不要将内容输出到对话中。
112
+
113
+ ## 构建流程详解
114
+
115
+ ```
116
+ 1. 连接 Jenkins(ci.xnzn.net)
117
+ 2. 构建 core(参数:BRANCH + VERSION=环境名)
118
+ └─ 轮询构建进度,超时 10 分钟
119
+ 3. 构建 api(参数同上)
120
+ └─ 轮询构建进度,超时 5 分钟
121
+ 4. 更新 Portainer:
122
+ ├─ dev1~15:Webhook 触发
123
+ │ └─ 获取 JWT → 查 Service ID → 获取/创建 Webhook → POST 触发
124
+ └─ dev16+:Force Update
125
+ └─ 获取 JWT → 查 Service ID → PUT forceupdateservice
126
+ ```
127
+
128
+ ## 常见操作
129
+
130
+ ### 只改了 api 代码,快速部署
131
+
132
+ ```bash
133
+ # 修改 last_cd_env.json 的 build_mode 为 "2",然后运行
134
+ cd jenkins && python jk_build.py
135
+ ```
136
+
137
+ ### 只需要更新容器(已在 Jenkins 手动构建完)
138
+
139
+ ```bash
140
+ # build_mode 设为 "3"
141
+ cd jenkins && python jk_build.py
142
+ ```
143
+
144
+ ### 部署定制项目
145
+
146
+ ```json
147
+ // last_cd_env.json
148
+ {
149
+ "api_param_folder": "leniu-tengyun-wuhanxieheyiyuan"
150
+ }
151
+ ```
152
+
153
+ ## 首次初始化(团队成员)
154
+
155
+ 当用户说"初始化部署环境"或检测到 `jenkins/` 目录不存在时,执行以下步骤:
156
+
157
+ ### 自动初始化流程
158
+
159
+ ```bash
160
+ # 1. 创建 jenkins 目录
161
+ mkdir -p jenkins
162
+
163
+ # 2. 从技能模板复制文件(SKILL_DIR 为技能目录路径)
164
+ cp .claude/skills/jenkins-deploy/assets/jk_build.py jenkins/jk_build.py
165
+ cp .claude/skills/jenkins-deploy/assets/last_cd_env.template.json jenkins/last_cd_env.json
166
+
167
+ # 3. 环境配置需要用户提供(含敏感凭证)
168
+ cp .claude/skills/jenkins-deploy/assets/env_param.template.json jenkins/env_param.json
169
+
170
+ # 4. 安装依赖
171
+ pip install python-jenkins requests
172
+ ```
173
+
174
+ ### 配置凭证
175
+
176
+ 初始化后,`jenkins/env_param.json` 中的占位符需要替换为真实值:
177
+
178
+ | 占位符 | 说明 | 获取方式 |
179
+ |--------|------|---------|
180
+ | `__JENKINS_DEV_USER__` | Jenkins dev 账号 | 向团队负责人获取 |
181
+ | `__JENKINS_DEV_TOKEN__` | Jenkins dev API Token | Jenkins → 用户 → 设置 → API Token |
182
+ | `__JENKINS_TEST_USER__` | Jenkins test 账号 | 同上 |
183
+ | `__JENKINS_TEST_TOKEN__` | Jenkins test API Token | 同上 |
184
+ | `__PORTAINER_*_USER__` | Portainer 用户名 | 向团队负责人获取 |
185
+ | `__PORTAINER_*_PWD__` | Portainer 密码 | 向团队负责人获取 |
186
+
187
+ **快捷方式**:如果团队已有成员配置好,可直接拷贝对方的 `env_param.json` 文件。
188
+
189
+ ### AI 初始化行为
190
+
191
+ 当技能被触发但 `jenkins/` 不存在时:
192
+ 1. 提示用户"检测到尚未初始化部署环境"
193
+ 2. 询问是否执行初始化
194
+ 3. 执行上述复制步骤
195
+ 4. 提示用户填写凭证(或拷贝已有配置)
196
+
197
+ ## 依赖
198
+
199
+ ```bash
200
+ pip install python-jenkins requests
201
+ ```
202
+
203
+ ## 注意
204
+
205
+ - 本技能用于 dev/test 环境部署,**不涉及生产环境**
206
+ - 如果是 Git 提交/分支管理,请使用 `git-workflow` 技能
207
+ - 如果是代码构建错误排查,请使用 `bug-detective` 技能
@@ -0,0 +1,51 @@
1
+ {
2
+ "portainer_api_url": {
3
+ "dev": "https://devops-dev.xnzn.net/api",
4
+ "dev16": "https://xnzn-dev.xnzn.net/api",
5
+ "test": "https://devops-test.xnzn.net/api"
6
+ },
7
+ "portainer_user_name": {
8
+ "dev": "__PORTAINER_DEV_USER__",
9
+ "dev16": "__PORTAINER_DEV16_USER__",
10
+ "test": "__PORTAINER_TEST_USER__"
11
+ },
12
+ "portainer_user_pwd": {
13
+ "dev": "__PORTAINER_DEV_PWD__",
14
+ "dev16": "__PORTAINER_DEV16_PWD__",
15
+ "test": "__PORTAINER_TEST_PWD__"
16
+ },
17
+ "portainer_endpoints": {
18
+ "dev": "2",
19
+ "dev16": "1",
20
+ "test": "2"
21
+ },
22
+ "portainer_server_suffix": {
23
+ "dev": "_yunshitang-api",
24
+ "dev16": "_yunshitang-api-offline",
25
+ "test": "_yunshitang-api"
26
+ },
27
+ "core_job": {
28
+ "dev": "dev-tengyun-core",
29
+ "test": "test-tengyun-core"
30
+ },
31
+ "core_job_custom": {
32
+ "dev": "dev-后端-core",
33
+ "test": "test-后端-core"
34
+ },
35
+ "api_job": {
36
+ "dev": "dev-tengyun-yunshitang-api",
37
+ "test": "test-tengyun-yunshitang-api"
38
+ },
39
+ "api_job_custom": {
40
+ "dev": "dev-后端-api",
41
+ "test": "test-后端-api"
42
+ },
43
+ "jenkins_user_id": {
44
+ "dev": "__JENKINS_DEV_USER__",
45
+ "test": "__JENKINS_TEST_USER__"
46
+ },
47
+ "jenkins_api_token": {
48
+ "dev": "__JENKINS_DEV_TOKEN__",
49
+ "test": "__JENKINS_TEST_TOKEN__"
50
+ }
51
+ }