Phần 1: [Husky Pre-Commit] Khám phá cơ bản (1/4) 🚀
Phần 2: [Husky Pre-Commit] Husky trong thực chiến: Những điều cần biết (2/4) 🚀
Phần 3: [Husky Pre-Commit] Kiểm soát ENV tự động (3/4) 🐶
Hi anh em dev 👋, trong bài blog trước, tớ đã kể về quá trình triển khai Husky vào dự án thực tế và những phát sinh gặp phải
Có anh em nào hay dính các lỗi như tạo thiếu env trong các môi trường không?, và khi review code cũng phải review các file env? Mình thì bị thường xuyên 🥲 Đôi lúc hơi đảng trí xíu mà phải tạo hotfix env thì cũng không hay cho lắm 🥴
Ngoài ra hôm trước có bạn trong team tớ cũng bị trường hợp này, chợt nhiên nảy ra ý tưởng sử dụng husky pre-commit để kiểm tra toàn bộ các file env trước khi commit, nghe thì có vẻ khả thi, sau một lúc ngồi tìm hiểu chatgpt thì ok, vào việc thôi nào ^^
Vấn đề: File .env
- nguồn gốc của bug tiềm ẩn 🐞
Project công ty tớ sử dụng nhiều file .env
khác nhau cho từng môi trường:
.env
cho local development.env.test
cho môi trường testing.env.staging
cho môi trường staging.env.template
làm template cho môi trường production
Nghe qua tưởng đơn giản, nhưng với hơn 100 biến môi trường khác nhau, nên rất dễ quên hoặc nhầm lẫn
Một số vấn đề thường gặp:
- Thêm biến vào
.env
nhưng quên thêm vào các file khác - Sai định dạng giá trị biến mặc định
- Duplicate biến trong cùng một file (copy-paste is evil 👿)
- Kiểm tra file env cho môi trường production, ở công ty mình thì dùng file
.env.template
"Có cách nào để đảm bảo tất cả file .env luôn đồng bộ và đúng format không?"
Câu trả lời là: Có!
Giải pháp: Script kiểm tra file .env trước mỗi commit
Ý tưởng của tớ rất đơn giản: Tạo một script NodeJS chạy trong Husky pre-commit hook để kiểm tra tất cả các file .env
trước khi cho phép commit.
Script này sẽ có nhiệm vụ:
- Kiểm tra sự tồn tại của các file
.env
cần thiết - Đảm bảo không có biến duplicate trong cùng một file
- Đảm bảo tất cả các biến xuất hiện đồng nhất giữa các file
- Kiểm tra format của
.env.template
có đúng chuẩn không
Luồng xử lý của script
Về cơ bản thì hoạt động như sau:
- Scan thư mục applications(cái này do công ty tớ sử dụng 1 repository mà chứa nhiều service bên trong): Tìm tất cả các service (api, web, worker) có chứa file .env
- Kiểm tra duplicate variables: Phát hiện các biến được định nghĩa nhiều lần trong cùng một file
- Đồng bộ variables giữa các file: Đảm bảo tất cả file .env của cùng một service đều có chung các biến (trừ hardcoded variables)
- Validate syntax của template: Kiểm tra file .env.template có đúng format không
- Quyết định commit: Nếu pass hết các bước trên thì cho phép commit, còn không thì block lại và báo lỗi cụ thể
Các bạn có thể tham khảo thêm tại Repository này nha: dongitran/Husky-PreCommit-Check-ENV
Kết quả và lợi ích 🎯
Sau khi triển khai script này vào dự án, tớ thấy rõ những lợi ích nó mang lại:
- Phát hiện lỗi sớm: Các vấn đề về .env được phát hiện ngay tại local, không còn những bug khó hiểu trên môi trường khác
- Tiết kiệm thời gian: Không còn phải dành thời gian debug lỗi env giữa các môi trường
- Tăng tính nhất quán: Các file .env luôn đồng bộ và theo cùng một format
- Giảm thiểu build fail: Giảm đáng kể số lần build fail do thiếu hoặc sai biến môi trường
Bạn thấy ý tưởng này như nào? Hãy chia sẻ trong phần bình luận nhé 😆
Ngoài ra bạn có ý tưởng gì hay khi ứng dụng husky cùng chia sẽ với mình nhé ^^