Skip to content

CI/CD và promote bản phát hành

Theo dõi bản phát hành từ GitHub qua GitLab và Dev tới Production được Owner duyệt.

GitHub giữ source chính. GitLab kiểm thử và build image bất biến; Argo CD cập nhật hệ thống theo GitOps. CI không nhận kubeconfig Production.

Môi trường Dev

Push dev để đồng bộ đúng commit sang GitLab. Kiểm thử dùng dependency tạm thời. Candidate ghi source SHA/Git tree, phiên bản control, pipeline và image digests. Dev phải đạt đúng Argo operation, PostSync và kiểm tra public từ GitHub-hosted runner.

Bộ kiểm thử Dev tạo tổ chức QA độc lập và giữ email trong Mailpit. Các luồng gồm thành viên, gói, thương hiệu khách hàng, MCP key và snapshot cũ qua API riêng không kết nối được DB. Không ngắt dịch vụ database dùng chung.

Môi trường Production

Merge nội dung đã đạt vào main. Owner được chỉ định bấm job promote thủ công. Job kiểm lại người thực hiện, bằng chứng Dev và Git tree, sau đó triển khai nguyên bộ image digest. Merge commit có thể khác SHA; nếu nội dung khác thì cần candidate Dev mới.

Production còn chờ nghiệm thu cho tới khi PostSync và kiểm tra public bên ngoài cluster đạt. Hook thất bại không có nghĩa workload chưa thay đổi hoặc đã tự rollback.

Cấu hình và phục hồi

Tách database, Redis, object storage và credentials theo môi trường. Docs phục vụ dưới /docs/; cấu hình frontend theo môi trường được truyền lúc chạy. Cloudflare SMTP dùng TLS ngay khi kết nối cổng 465; lưu credential trong Secret và xoay trước hạn.

Phục hồi bằng commit bộ image/cấu hình đã kiểm chứng trước đó vào đúng GitOps branch, full sync và nghiệm thu lại. Rollback image không hoàn tác migration hoặc phục hồi dữ liệu. Giữ release records và image digests để đối chiếu, phục hồi.

Runbook docs/devops/ trong repository ghi mapping môi trường, quyền credential, cách cài lần đầu và kết quả đã kiểm chứng thực tế.

Điều kiện bootstrap cluster

Argo có Role ghi riêng từng namespace Status và Role chỉ đọc log; CI không có token Kubernetes. Cluster Longhorn chặn volume thiếu node/disk selector: operator cấp volume Status với selector nextvision-status-storage, class longhorn-1r. Redis Production dùng PV/PVC 10 GiB tạo trước, Retain. NetworkPolicy PostgreSQL chỉ cho phép Pod compute đúng môi trường trên 5432 sau NodePort DNAT, vẫn xác minh TLS đầy đủ.

Giữ nguyên control v1; v2 sửa mạng bootstrap và retry GitOps không tạo commit rỗng. Tài khoản GitHub hiện chưa hỗ trợ branch protection cho repo private; phía GitLab vẫn có protection. Không chuyển public hoặc tự mua gói để vượt điều kiện này.

Control v3 thêm tám địa chỉ /32 đã xác minh (IP node và IP tunnel Calico của bốn node Traefik hostNetwork), chỉ trên cổng web/docs/API. Policy sửa bootstrap tạm được gỡ sau khi policy GitOps có hiệu lực.

Migration 011 cấp policy rõ ràng cho pool schema owner của API/worker; FORCE RLS vẫn giới hạn status_runtime. Integration nghiệp vụ dùng LOGIN role không có SUPERUSER/BYPASSRLS. Client libpq non-root có job hồi quy PostgreSQL tạm riêng.

Type to search…

↑↓ navigate↵ selectEsc close