jenkins
This commit is contained in:
+15
-13
@@ -37,7 +37,7 @@ GitLab ──(Jenkins 集成,请求内嵌凭据)──► Jenkins job「kra」
|
||||
(3 后端 + 3 前端 + MySQL + Redis)
|
||||
```
|
||||
|
||||
分支路由的核心:GitLab 集成发送的 push payload 中带 `ref`(分支),Jenkins 的 gitlab-plugin 把它注入为环境变量 `gitlabBranch`,`deploy/Jenkinsfile` 的 `Select environment` 阶段按它派生出命名空间、环境标识、目标集群与 kubeconfig 凭据,`Checkout branch` 阶段再动态检出实际推送的分支。**单 job 同时服务两个环境,不会串**:
|
||||
分支路由的核心:GitLab 集成发送的 push payload 中带 `ref`(分支),Jenkins 的 gitlab-plugin 把它注入为环境变量 `gitlabBranch`,并把 push 的最终提交注入为 `gitlabAfter`。`deploy/Jenkinsfile` 的 `Select environment` 阶段按分支派生出命名空间、环境标识、目标集群与 kubeconfig 凭据,随后优先按 `gitlabAfter` 的 SHA 检出构建内容。**单 job 同时服务两个环境,不会串**:
|
||||
|
||||
- 镜像 tag 含分支与 commit(如 `dev-f0657c1abc12`),按 commit 不可变;
|
||||
- 构建不并发(`disableConcurrentBuilds`),同时推送时排队执行;
|
||||
@@ -114,7 +114,7 @@ systemctl restart rke2-server
|
||||
| Git | SCM 检出 |
|
||||
| Credentials / Credentials Binding | 凭据管理与注入 |
|
||||
|
||||
### 5.3 凭据(6 个,ID 与 `deploy/Jenkinsfile` 中变量对应)
|
||||
### 5.3 凭据(5 个,ID 与 `deploy/Jenkinsfile` 中变量对应)
|
||||
|
||||
| 凭据 ID | 类型 | 来源 / 获取方式 |
|
||||
|---------|------|----------------|
|
||||
@@ -123,7 +123,6 @@ systemctl restart rke2-server
|
||||
| `kra-rke2-128-kubeconfig` | Secret file | 128 节点 `/etc/rancher/rke2/rke2.yaml`,**把 server 的 127.0.0.1 改为 192.168.200.128** 后保存 |
|
||||
| `kra-rke2-129-kubeconfig` | Secret file | 129 节点同上,server 改为 192.168.200.129 |
|
||||
| `kra-mysql-root-password` | Secret text | 自定的 MySQL root 密码(与节点上 MySQL 一致) |
|
||||
| `kra-jwt-signing-key` | Secret text | 自定的随机长字符串(JWT 签名密钥)。模板默认占位值在 `configs/config.yaml`,生产必须覆盖;**换值会导致已登录 token 全部失效**,需重新登录 |
|
||||
|
||||
kubeconfig 添加路径:系统管理 → 凭据 → Add Credentials → 类型 Secret file → 上传文件 → 填 ID。
|
||||
|
||||
@@ -150,22 +149,25 @@ gitlabBranch(集成/推送触发)
|
||||
| 项 | 说明 |
|
||||
|----|------|
|
||||
| Harbor 拉镜像信任 | 见 §4 第 3 步 `registries.yaml` |
|
||||
| 应用配置文件 | 节点放置 `/var/lib/kra/conf/config.yaml`(模板 [k8s/config.example.yaml](k8s/config.example.yaml)),hostPath 挂载为容器 `/data/conf`(可写),属主 `chown -R 1000:1000`(镜像固定 UID/GID=1000) |
|
||||
| 数据持久化 | `/var/lib/<APP_NAME>/mysql`、`/var/lib/<APP_NAME>/redis`(节点本地目录,当前单节点集群适用) |
|
||||
| 应用配置文件 | Jenkins 将 [k8s/config.example.yaml](k8s/config.example.yaml) 渲染为 `<APP_NAME>-config-template` ConfigMap,初始化容器复制到共享配置 PVC `/data/conf` |
|
||||
| 配置与上传存储 | `<APP_NAME>-config`(1Gi)和 `<APP_NAME>-uploads`(20Gi),均要求存储类支持 `ReadWriteMany` |
|
||||
| 数据持久化 | `/var/lib/<APP_NAME>/mysql`、`/var/lib/<APP_NAME>/redis`(节点本地目录,当前单节点集群适用;Redis initContainer 需要允许 root 修正 hostPath 权限) |
|
||||
| kubectl | 节点用 `/var/lib/rancher/rke2/bin/kubectl`,并 `export KUBECONFIG=/etc/rancher/rke2/rke2.yaml` |
|
||||
|
||||
**首次部署初始化流程**(kra 框架约定,勿用环境变量注入数据库 DSN):
|
||||
|
||||
1. 服务启动时数据库未就绪,首页显示"前往初始化"。
|
||||
2. 走完 `/init/initdb` 向导:建库建表 + 写入种子数据(默认账号 admin)。
|
||||
3. 向导最后一步把数据库连接**写回** `/data/conf/config.yaml`(即节点的 hostPath 文件),配置持久化在节点上。
|
||||
4. 若需后续手工改配置:改节点文件后 `rollout restart deployment/kra-backend` 让 3 副本同步。
|
||||
3. 向导最后一步把数据库连接**写回**共享 PVC 中的 `/data/conf/config.yaml`,配置不会随 Pod 消失。
|
||||
4. 初始化期间建议先把后端缩容到 1 个副本:`kubectl -n <APP_NAME>-dev scale deployment/<APP_NAME>-backend --replicas=1`。初始化完成后再恢复副本数并滚动重启:`kubectl -n <APP_NAME>-dev scale deployment/<APP_NAME>-backend --replicas=3`,然后 `kubectl -n <APP_NAME>-dev rollout status deployment/<APP_NAME>-backend`。后续手工改配置也需要执行滚动重启。
|
||||
|
||||
> `<APP_NAME>-config-template` ConfigMap 只负责首次创建配置文件。初始化后,运行时配置以共享 PVC 中的 `/data/conf/config.yaml` 为准;更新 ConfigMap 不会覆盖已有配置,避免覆盖初始化写入的数据库连接。
|
||||
|
||||
## 7. 首次部署清单(按顺序)
|
||||
|
||||
1. Harbor:建 `library` 项目 + robot 账号;证书分发到 131 宿主机与 128/129 节点。
|
||||
2. RKE2 节点:`registries.yaml` 配好并重启 rke2-server;放置 `/var/lib/kra/conf/config.yaml`。
|
||||
3. Jenkins:安装插件;添加 §5.3 全部 6 个凭据;按 §5.4 建 `kra` job。
|
||||
2. RKE2 集群:确认 `KRA_SHARED_STORAGE_CLASS` 对应的存储类支持 `ReadWriteMany`。
|
||||
3. Jenkins:安装插件;添加 §5.3 所列 5 个凭据;按 §5.4 建 `kra` job。
|
||||
4. GitLab:配置 Jenkins 集成(§3)。
|
||||
5. 推送任意分支触发构建,观察首次构建(有依赖缓存预热,耗时会比后续长)。
|
||||
6. 初始化向导(§6),完成后浏览器验证。
|
||||
@@ -178,7 +180,7 @@ curl http://192.168.200.128:30081/health # "ok"
|
||||
curl -I http://192.168.200.129:30080/ # 同上验证 129
|
||||
```
|
||||
|
||||
构建日志里 `resolved branch='xxx'` 一行可直接确认本次构建部署到了哪个环境。
|
||||
构建日志里的 `resolved branch='xxx'` 和 `building commit <sha>` 两行可分别确认部署环境和实际构建版本。
|
||||
|
||||
## 9. 排障速查
|
||||
|
||||
@@ -187,12 +189,12 @@ curl -I http://192.168.200.129:30080/ # 同上验证 129
|
||||
| push 后没有构建 | GitLab 集成"最近事件"(hook_logs)看响应码与请求体;确认集成启用且勾选推送 |
|
||||
| 构建失败 | Jenkins 构建日志;先看 `resolved branch` 是否符合预期 |
|
||||
| Pod 镜像拉取失败 | 节点 `registries.yaml`、Harbor robot 是否有效、`harbor-registry` Secret |
|
||||
| 后端 503 / 初始化异常 | 节点 `/var/lib/kra/conf/config.yaml` 是否存在且属主 1000:1000;后端日志是否连上 `<APP_NAME>-mysql:3306` |
|
||||
| 登录态全部失效 | 是否更换了 `kra-jwt-signing-key`(换值即失效所有 token) |
|
||||
| 后端 503 / 初始化异常 | 配置 PVC 是否已绑定、ConfigMap 是否存在、后端日志是否连上 `<APP_NAME>-mysql:3306` |
|
||||
| 登录态全部失效 | 是否在系统设置中更换了 JWT 签名密钥(换值即失效所有 token) |
|
||||
| 构建慢 | 缓存目录是否挂载成功;镜像源(goproxy/npmmirror/daocloud)偶发卡顿需重试 |
|
||||
|
||||
## 10. 附录:安全与维护
|
||||
|
||||
- 所有账号密码只存 Jenkins Credentials / 各系统自身,不写入仓库;`configs/config.yaml` 不要提交真实密钥。
|
||||
- 轮换 Jenkins 密码:GitLab 集成表单改一次即可。
|
||||
- 轮换 Harbor robot / MySQL / JWT key:更新 Jenkins 对应凭据 → 推送任意分支触发一次部署(kubeconfig 类凭据即时生效;JWT 轮换会使登录态失效)。
|
||||
- 轮换 Harbor robot:更新 Jenkins 凭据后重新部署即可。轮换 MySQL 密码必须先在 MySQL 中执行 `ALTER USER` 并确认连接正常,再更新 Jenkins 凭据并重启相关 Pod;仅更新 Secret 不会修改已初始化 MySQL 数据目录中的 root 密码。JWT 签名密钥通过系统设置修改并保存到共享配置 PVC,随后滚动重启后端;换值会使现有登录态失效。
|
||||
|
||||
Reference in New Issue
Block a user