Chuyển tới nội dung chính

CI/CD Pipeline

Tổng quan​

Hệ thống dùng GitLab CI/CD (.gitlab-ci.yml) với 3 stages:

StageMô tả
buildBuild Docker image cho từng MFE
update-manifestCập nhật K8s manifest (chỉ main branch)
deploy-uatDeploy 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>/Dockerfile
  • BUILD_CONTEXT: .
  • changes gồm apps/<module>/**/* và core/**/*

2) Job update manifest (main)​

Thêm update-<module>:

  • SERVICE_NAME: vppos-<module>
  • DEPLOYMENT_FILE: infra/k8s/<module>-deployment.yaml
  • needs: 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.yaml
  • infra/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 (default ENV UPSTREAM_<MODULE>)
  • infra/k8s/container-deployment.yaml (env UPSTREAM_<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.yml
  • infra/docker-compose.local.yml

và container.depends_on nếu stack cần boot cùng nhau.

CI/CD Variables cần set​

VariableMô tả
VITE_API_BASE_URLBackend API URL
VITE_API_VERSIONAPI version
PROXY_SSH_PRIVATE_KEYSSH key cho Proxmox proxy
UAT_SSH_PRIVATE_KEYSSH key cho UAT server
MANIFEST_PUSH_TOKENToken để push manifest về repo

Verify nhanh sau khi setup CI/CD module mới​

  • Push nhánh dev với thay đổi trong apps/<module> để kiểm tra build + deploy UAT.
  • Push main (hoặc MR merge vào main) để kiểm tra update-<module> có cập nhật đúng image tag trong infra/k8s/<module>-deployment.yaml.
  • Kiểm tra runtime route qua container (/<module>/...) hoạt động bình thường.