# Hướng Dẫn Quy Trình Làm Việc Tài liệu này cung cấp hướng dẫn về quy trình làm việc với dự án matching-app, bao gồm các vai trò khác nhau, công cụ hữu ích và quy trình làm việc mẫu. ## Quy trình làm việc theo Role ### Developer #### Thiết lập môi trường - Sử dụng `make dev-workflow` để thiết lập môi trường làm việc ban đầu - Cài đặt các công cụ cần thiết với `make install-tools` - Đảm bảo đã cài đặt các công cụ: Go, Docker, Golangci-lint #### Phát triển - Sử dụng `make dev` cho phát triển với hot-reload - Chạy test với `make test` sau mỗi thay đổi quan trọng - Kiểm tra định dạng và lỗi cú pháp với `make lint` - Trước khi commit, chạy kiểm tra đầy đủ với `make ci-local` #### Triển khai - Sử dụng `make docker-build` để tạo Docker image - Test trên môi trường local với `make docker-up` - Push code lên repository để hệ thống CI/CD tự động triển khai ### DevOps #### Quản lý môi trường - Định kỳ kiểm tra và cập nhật Docker image với `make docker-build` - Quản lý các môi trường triển khai với các lệnh `make deploy-*` - Giám sát logs với `make docker-logs` #### CI/CD - Thiết lập pipeline sử dụng các lệnh `make lint`, `make test`, `make sast`, `make sca` - Tự động hóa quy trình triển khai với `make deploy-*` - Kiểm tra bảo mật định kỳ với `make sast` và `make sca` ### QA #### Kiểm tra - Sử dụng `make run` hoặc `make dev` để chạy ứng dụng trên môi trường local - Kiểm tra các tính năng mới theo test case - Báo cáo lỗi kèm theo logs từ `make docker-logs` #### Kiểm tra tự động - Chạy unit test với `make test` - Kiểm tra bao phủ mã nguồn từ báo cáo coverage ## Các hàm hữu dụng ### Quản lý ứng dụng - `make build`: Biên dịch ứng dụng - `make run`: Chạy ứng dụng đã biên dịch - `make dev`: Chạy ứng dụng với hot-reload - `make clean`: Dọn dẹp các file tạm và build ### Kiểm tra chất lượng - `make lint`: Kiểm tra định dạng và lỗi cú pháp - `make test`: Chạy unit test - `make sast`: Phân tích bảo mật tĩnh - `make sca`: Kiểm tra lỗ hổng trong dependencies - `make ci-local`: Chạy tất cả kiểm tra trên ### Docker & Môi trường local - `make docker-build`: Build Docker image trên môi trường local - `make docker-up`: Khởi động container Docker trên môi trường local - `make docker-down`: Dừng container Docker trên môi trường local - `make docker-logs`: Xem logs từ container trên môi trường local ### Quy trình phát triển - `make dev-workflow`: Thiết lập môi trường phát triển - `make dev-docker`: Thiết lập môi trường Docker cho phát triển ## Quy trình bảo mật và CI/CD ### Bảo mật trong quy trình phát triển - Tất cả code phải được gửi qua Pull Request, không được push trực tiếp vào các nhánh chính - Mọi Pull Request phải được ít nhất 1 người review và approve - Chỉ merge code sau khi đã pass tất cả các kiểm tra tự động (CI checks) ### Triển khai qua CI/CD - Chỉ hệ thống CI/CD mới có quyền triển khai lên các môi trường staging và production - Tất cả triển khai lên môi trường production phải đi qua môi trường staging trước - Pipeline CI/CD được cấu hình trong file `.drone.yml` ### Đặc quyền môi trường - Người phát triển chi được phép làm việc trên môi trường local - Chỉ DevOps và quản trị viên có quyền truy cập vào môi trường staging và production ## Quy trình mẫu làm 1 ngày ### Developer #### Buổi sáng 1. Pull code mới nhất từ repository 2. Chạy `make clean` để dọn dẹp môi trường 3. Chạy `make dev` để bắt đầu phát triển với hot-reload 4. Review các task được giao #### Trong ngày 1. Phát triển các tính năng theo task 2. Chạy `make test` sau mỗi thay đổi lớn 3. Chạy `make lint` để kiểm tra lỗi và định dạng code 4. Sử dụng `make docker-up` để test trong môi trường Docker nếu cần #### Trước khi commit 1. Chạy `make ci-local` để đảm bảo code chất lượng 2. Fix các vấn đề được phát hiện 3. Commit và push code #### Triển khai 1. Push code lên repository để kích hoạt quy trình CI/CD 2. Theo dõi kết quả của pipeline trên hệ thống CI/CD 3. Kiểm tra tính năng trên môi trường staging sau khi triển khai tự động hoàn tất ### DevOps #### Buổi sáng 1. Kiểm tra trạng thái các môi trường với `make docker-logs` 2. Xử lý các vấn đề từ monitoring overnight #### Trong ngày 1. Hỗ trợ các developer với vấn đề môi trường 2. Cập nhật cấu hình CI/CD nếu cần 3. Chuẩn bị cho việc triển khai #### Cuối ngày 1. Triển khai các thay đổi đã được phê duyệt với `make deploy-prod` 2. Kiểm tra logs sau triển khai 3. Cập nhật tài liệu và báo cáo ### QA #### Buổi sáng 1. Review các tính năng cần kiểm tra 2. Thiết lập môi trường test với `make dev-workflow` #### Trong ngày 1. Kiểm tra các tính năng theo test case 2. Báo cáo lỗi và ghi chép kết quả test 3. Hỗ trợ developer sửa lỗi #### Cuối ngày 1. Tổng kết kết quả kiểm tra 2. Duyệt các tính năng đã pass test 3. Chuẩn bị test case cho ngày hôm sau