diff --git a/README.md b/README.md index 86ef9e5..67841d2 100644 --- a/README.md +++ b/README.md @@ -23,8 +23,8 @@ - 明确列出应用仓库必须产出的文件、GitOps 导出结果和 CI 处理顺序 - 只允许应用仓库 CI 同步当前应用自己的 release 结果与 `Application.targetRevision` -- `deploy/release/secret.yaml` 是唯一作者源;CI 只导出 `releases//manifests/secret.yaml` -- 如果保留 `releases//manifests/` source,就必须保留固定模板的 `kustomization.yaml` +- `deploy/release/secret.yaml` 是应用私有 Secret 作者源 +- 应用仓库 CI 保留 GitOps 仓库中已有的 `manifests/kustomization.yaml` 与 `manifests/db-secret.yaml` - 如果 Go 构建发生在 Dockerfile 内,`build-images` 必须用 `--build-arg` 透传 `GOPROXY` 等构建变量 - 需要公网 HTTP 入口时固定使用 nginx + 单一 `NodePort`,不改成 Ingress - 百智云用户鉴权是必填项,按固定顺序逐项补齐 `app_id` 与证书材料 diff --git a/gitops-app-onboarding/SKILL.md b/gitops-app-onboarding/SKILL.md index 4a93d31..1017710 100644 --- a/gitops-app-onboarding/SKILL.md +++ b/gitops-app-onboarding/SKILL.md @@ -77,41 +77,19 @@ GitLab CI 默认依赖这些变量: - `deploy/release/values.yaml` - `deploy/release/secret.yaml` -如果 `Application` 仍引用 `releases//manifests/`,还必须生成: - -- `deploy/release/manifests/kustomization.yaml` - -默认模板固定为: - -```yaml -apiVersion: kustomize.config.k8s.io/v1beta1 -kind: Kustomization -namespace: -resources: - - secret.yaml - - ../../../shared -``` - -只有在确实需要额外静态资源时,才往 `resources:` 追加内容。 - -如果 `Application` 不再引用 `releases//manifests/`,就不要保留 `deploy/release/manifests/`。 - ## GitOps 仓库里最终应该有哪些文件 CI 导出结果固定为: - `deploy/release/metadata.yaml` -> `releases//metadata.yaml` - `deploy/release/values.yaml` -> `releases//values.yaml` -- `deploy/release/manifests/kustomization.yaml` -> `releases//manifests/kustomization.yaml` - `deploy/release/secret.yaml` -> `releases//manifests/secret.yaml` - `apps//application.yaml` -> 只更新 chart source 的 `targetRevision` 固定规则: - 不导出 `releases//secret.yaml` -- `releases//manifests/kustomization.yaml` 默认只维护 `secret.yaml` 和 `../../../shared` -- 不要依赖 `../secret.yaml` 这类位于当前 source path 外的裸资源文件 -- 如果不再导出 `releases//manifests/`,必须同时移除 `Application` 中对应的 manifests source +- 不生成或覆盖 `db-secret.yaml`、 `kustomization.yaml` 这类 GitOps 仓库里已有的文件 ## GitLab CI 规则 @@ -207,12 +185,10 @@ Go 项目默认变量写在 `.gitlab-ci.yml` 的 `variables:`: 处理顺序固定为: 1. 克隆 `https://${GITEA_USER}:${GITEA_TOKEN}@deploy.baizhi.cloud/gitops-admin/argodeploy.git` -2. 清空并重建 `releases//` -3. 复制 `deploy/release/` 到 `releases//` -4. 删除 `releases//secret.yaml` -5. 如果仍保留 manifests source: - - 保留 `releases//manifests/kustomization.yaml` - - 将 `deploy/release/secret.yaml` 物化为 `releases//manifests/secret.yaml` +2. 确保 `releases//` 与 `releases//manifests/` 存在,不要整体清空目录 +3. 将应用仓库中的 `deploy/release/metadata.yaml` 和 `deploy/release/values.yaml` 复制到 GitOps 仓库的 `releases//metadata.yaml` 与 `releases//values.yaml`,覆盖已有内容 +4. 保留已有的 `releases//manifests/kustomization.yaml` 与 `releases//manifests/db-secret.yaml` +5. 将 `deploy/release/secret.yaml` 物化为 `releases//manifests/secret.yaml` 6. 替换 `releases//metadata.yaml` 和 `releases//values.yaml` 中的 `__VERSION__` 7. 更新 `apps//application.yaml` 中当前应用 chart source 的 `targetRevision` 8. 只有存在 diff 时才提交并推送 `main` @@ -241,6 +217,7 @@ Chart 必须反映应用的真实运行架构。 - 支持 `imagePullSecrets` - 环境变量注入保持可读 - 如果镜像内带 nginx / 反向代理配置,upstream service 名必须与 Chart 渲染出的 Service 名一致 +- 生成 chart 时要确认应用是否包含需要经 nginx 转发的静态文件;如果有,必须明确静态资源目录、挂载方式和 nginx 路由,不要只配后端 upstream - 不要依赖 Kubernetes 不支持的 `$(OTHER_ENV)` 展开 - 对 Neo4j 这类镜像,不要注入不存在的 `NEO4J_*` 配置名,例如 `NEO4J_PASSWORD` @@ -295,12 +272,27 @@ Chart 必须反映应用的真实运行架构。 - 应用自建镜像使用 `registry.baizhi.cloud//...` - 第三方镜像保持真实来源 - Secret 名与 Chart 约定一致 +- PostgreSQL 连接读取应用自己的 `databaseSecret` - 私有镜像包含 `imagePullSecrets` - 与 Chart schema 一致 - nginx 对外入口使用 `NodePort` - `NodePort` 值来自用户或平台分配结果 - 不包含 Ingress 配置项 +### `manifests/db-secret.yaml` + +这是 deploy 仓库注册应用阶段生成的数据库源,不是应用仓库侧要生成的文件。至少包含: + +- `host` +- `port` +- `database` +- `username` +- `password` + +固定规则: + +- chart 如果依赖 Postgres 则必须消费这个 secret + ### `secret.yaml` 只放应用私有 Secret,key 名必须与 Chart 读取的 key 对齐。 @@ -330,8 +322,6 @@ Chart 必须反映应用的真实运行架构。 `platform-shared-secrets` 提供: -- `POSTGRES_USER` -- `POSTGRES_PASSWORD` - `REDIS_PASSWORD` - `QDRANT_API_KEY` - `MINIO_ACCESS_KEY` @@ -346,7 +336,6 @@ Chart 必须反映应用的真实运行架构。 固定 FQDN: -- `postgres.infra.svc.cluster.local` - `redis.infra.svc.cluster.local` - `qdrant.infra.svc.cluster.local` - `minio.infra.svc.cluster.local` @@ -354,7 +343,7 @@ Chart 必须反映应用的真实运行架构。 固定规则: - 不要写成当前应用 namespace 下的裸服务名 -- 不默认为 `PostgreSQL`、`Redis`、`Qdrant`、`MinIO` 生成应用私有实例 +- 不默认为 `Redis`、`Qdrant`、`MinIO` 生成应用私有实例 - `Neo4j` 不属于 shared;如应用需要,由应用自己部署 - 不要把应用私有鉴权材料放进 `shared/` - 如果 Chart 依赖的运行时资源不是由 Chart 直接创建,就必须确保 `releases//manifests/` 仍会把这些资源 apply 到目标 namespace