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>/**/*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

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.