main
Adds a manual-only Contabo canary path, Traefik overlays, fail-closed migration gates, and contract tests. Refs lingjingwanxiang/ljwx-health#390 Refs lingjingwanxiang/ljwx-health#395
ljwx-deploy
GitOps 配置仓库,使用 ArgoCD 管理 Kubernetes 集群。
Start Here
- 新进程/新项目/老项目统一接入入口:
docs/START-HERE-GITOPS-ONBOARDING.md - LJWX 业务部署权威流程:
docs/ljwx-business-deployment-flow.md - 自动扫描当前仓库是否已接入:
bash scripts/ops/scan-gitops-context.sh --repo "$PWD"
Platform Blueprint
- 平台装配蓝图入口:
docs/platform/README.md - 平台配置与契约:
platform/ - 集成版本清单:
release/platform-version.yaml - 平台 runbooks:
runbooks/ - 新集群初始化脚本骨架:
scripts/bootstrap/cluster-init.sh
Bid-MVP Factory Control Plane
- 运行验证:
bash scripts/verify.sh - Harbor 复制:
docs/harbor-replication-ghcr.md - Controller/Argo 运维:
docs/ops-runbook.md - GitOps v2 设计入口:
docs/gitops-v2/README.md - 生产集群 Bootstrap(仅生产集群执行):
argocd-apps/02-cluster-prod-bootstrap.yaml - 生产镜像拉取凭据自动同步:
cluster-prod/registry-pull-secret-sync-*.yaml - 回滚演练:
docs/rollback-drill.md - Grafana 可观测看板 + TLS(GitOps):
apps/ljwx-platform-observability/ - Public ingress + Let's Encrypt(Traefik HTTP01,GitOps):
argocd-apps/03-cert-manager-dev.yaml、argocd-apps/04-cert-manager-config-dev.yaml、apps/cert-manager-config/ - 双 k3s 同代码部署规范:
docs/dual-k3s-deployment.md - CronJob secret 示例:
cluster/deploy-promoter-secret.example.yaml - 模板化批量接入:
docs/onboarding-automation.md - 服务仓 enqueue 工作流片段:
docs/service-repo-workflow-snippet.md - Argo dev 自动同步说明:
docs/argocd-dev-autosync.md
目录结构
infra/- 基础设施组件(Gitea Runner 等)argocd-apps/- ArgoCD Application 定义apps/- 应用配置cluster/- 本地/dev 集群级别配置cluster-prod/- 生产集群级别配置(prod app + prod promoter + registry secret sync)platform/- 平台装配、契约、路由、知识治理配置runbooks/- 平台级操作手册
生产发布闭环(当前口径)
- 服务仓在 GitHub / Runner 构建,并把候选镜像 push 到 profile 指定的 candidate registry;当前标准优先 GHCR。
- 服务仓上传
ReleaseBundleartifact,并向ljwx-release-state发repository_dispatch。 ljwx-release-state生成Event -> ReleaseBundle -> ReleaseRequest -> DeployResolution。deploy-controller-v2从ljwx-release-state拉取 resolution,并作为ljwx-deploy的唯一写入者更新 overlay。- 如目标为
prod,controller 按release/services*.yaml的deployImage和 resolution 的copyRequired决定是否复制镜像;deployImage为 GHCR 且copyRequired=false时不经过本地 Harbor。 - controller 把
ReleaseResult回写到ljwx-release-state;legacy promoter/smoke CronJob 已 suspend,不再作为默认发布入口。
组件
Gitea Runner (act_runner)
- 支持 Gitea Actions 的弹性 runner
- 自动伸缩: min 1, max 5 (基于 CPU/Memory)
- 适合轻量校验、部署编排和运维任务;不再作为标准重 CI 主力
- Harbor registry: https://harbor.omniverseai.net
配置说明
Runner labels:
ubuntu-latest- Ubuntu 22.04 环境ubuntu-22.04- 明确指定版本docker- 支持 Docker 操作self-hosted- 自托管标识
弹性伸缩策略:
- 最小副本: 1
- 最大副本: 5
- CPU 阈值: 70%
- Memory 阈值: 80%
- 扩容: 30秒内最多翻倍或增加2个
- 缩容: 5分钟稳定期,每分钟最多减少50%
使用方法
1. 获取 Gitea Runner Token
在 Gitea 管理界面:
- 访问: http://192.168.1.83:33000/admin/actions/runners
- 点击"创建新的 Runner"
- 复制生成的 Registration Token
2. 创建 Runner Token Secret
kubectl -n gitea-runner create secret generic runner-token \
--from-literal=token=YOUR_REGISTRATION_TOKEN
3. 部署 Runner
ArgoCD 会自动同步并部署 runner。
4. 在仓库中使用
创建 .gitea/workflows/ci.yml:
name: CI
on:
push:
branches: [ main ]
jobs:
build:
runs-on: ubuntu-latest # 或 docker, self-hosted
steps:
- uses: actions/checkout@v4
- name: 构建镜像
run: |
docker build -t myapp:${{ gitea.sha }} .
docker push harbor.omniverseai.net/myproject/myapp:${{ gitea.sha }}
监控
# 查看 runner pods
kubectl -n gitea-runner get pods -w
# 查看 HPA 状态
kubectl -n gitea-runner get hpa
# 查看 runner 日志
kubectl -n gitea-runner logs -l app=gitea-runner -f
故障排查
Runner 未注册
检查 token 是否正确:
kubectl -n gitea-runner get secret runner-token -o jsonpath='{.data.token}' | base64 -d
Runner 无法连接 Gitea
检查网络连通性:
kubectl -n gitea-runner run test --rm -it --image=curlimages/curl -- \
curl http://192.168.1.83:33000
Docker 权限问题
Runner 使用宿主机 Docker socket,确保有权限访问。
Test stability
Languages
Python
71.5%
Shell
23.4%
JavaScript
4.5%
HTML
0.3%
CSS
0.3%