CI/CD Pipeline
Tổng quan
Hệ thống dùng GitLab CI/CD (.gitlab-ci.yml) với 3 stages:
| Stage | Mô tả |
|---|---|
| build | Build Docker image cho từng MFE |
| update-manifest | Cập nhật K8s manifest (chỉ main branch) |
| deploy-uat | Deploy UAT bằng docker compose (dev branch) |
Quy tắc trigger build
Mỗi module có build-<module> job riêng.
rules:
- if: '$FORCE_BUILD == "true"'
- if: '$CI_COMMIT_BRANCH == "dev"'
changes:
- apps/<module>/**/*
- core/**/*
- if: '$CI_COMMIT_BRANCH == "main"'
changes:
- apps/<module>/**/*
- core/**/*
thông tin
Thay đổi trong core/ có thể trigger build nhiều module vì dùng chung dependency/UI.
Flow theo branch
Main (Production)
Push main
→ build-<module>
→ update-<module> (update tag trong infra/k8s/<module>-deployment.yaml)
→ ArgoCD auto-sync
Dev (UAT)
Push dev
→ build-<module>
→ deploy-uat (docker compose pull + up trên UAT)
Checklist khi thêm module mới vào CI/CD
1) Job build
Thêm build-<module> trong .gitlab-ci.yml:
SERVICE_NAME: vppos-<module>DOCKERFILE_PATH: apps/<module>/DockerfileBUILD_CONTEXT: .changesgồmapps/<module>/**/*vàcore/**/*
2) Job update manifest (main)
Thêm update-<module>:
SERVICE_NAME: vppos-<module>DEPLOYMENT_FILE: infra/k8s/<module>-deployment.yamlneeds: build-<module>- chỉ chạy trên
main
3) K8s manifest bắt buộc
Khi setup CI/CD cho module mới, cần đủ:
infra/k8s/<module>-deployment.yamlinfra/k8s/<module>-service.yaml
update-<module>sẽ cập nhật image tag trong file deployment.
4) Container gateway dependency (bắt buộc với MFE)
Ngoài module riêng, phải cập nhật container gateway:
apps/container/nginx.conf(route/module/→ upstream)apps/container/docker-entrypoint.sh(thêm${UPSTREAM_<MODULE>}vào envsubst)apps/container/Dockerfile(defaultENV UPSTREAM_<MODULE>)infra/k8s/container-deployment.yaml(envUPSTREAM_<MODULE>=<service>...)
Nếu thiếu bước này, module build/deploy xong vẫn không truy cập được qua container.
5) UAT compose
Đảm bảo module có trong các compose file UAT/local:
docker-compose.fe.ymlinfra/docker-compose.local.yml
và container.depends_on nếu stack cần boot cùng nhau.
CI/CD Variables cần set
| Variable | Mô tả |
|---|---|
VITE_API_BASE_URL | Backend API URL |
VITE_API_VERSION | API version |
PROXY_SSH_PRIVATE_KEY | SSH key cho Proxmox proxy |
UAT_SSH_PRIVATE_KEY | SSH key cho UAT server |
MANIFEST_PUSH_TOKEN | Token để push manifest về repo |
Verify nhanh sau khi setup CI/CD module mới
- Push nhánh
devvới thay đổi trongapps/<module>để kiểm tra build + deploy UAT. - Push
main(hoặc MR merge vàomain) để kiểm traupdate-<module>có cập nhật đúng image tag tronginfra/k8s/<module>-deployment.yaml. - Kiểm tra runtime route qua container (
/<module>/...) hoạt động bình thường.