- vừa được xem lúc

[Husky Pre-Commit] Kiểm soát ENV tự động 🐶 (3/4)

0 0 1

Người đăng: Đông Trần

Theo Viblo Asia

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?"

Thinking

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ụ:

  1. Kiểm tra sự tồn tại của các file .env cần thiết
  2. Đảm bảo không có biến duplicate trong cùng một file
  3. Đảm bảo tất cả các biến xuất hiện đồng nhất giữa các file
  4. 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:

  1. 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
  2. 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
  3. Tăng tính nhất quán: Các file .env luôn đồng bộ và theo cùng một format
  4. 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é ^^

Bình luận

Bài viết tương tự

- vừa được xem lúc

Giới thiệu Typescript - Sự khác nhau giữa Typescript và Javascript

Typescript là gì. TypeScript là một ngôn ngữ giúp cung cấp quy mô lớn hơn so với JavaScript.

0 0 551

- vừa được xem lúc

Type annotation vs Type Inference - Typescript

Trong bài viết này, chúng ta sẽ tìm hiểu kỹ về TypeScript bằng cách tìm hiểu sự khác biệt giữa kiểu chú thích và kiểu suy luận. Tôi sẽ cho rằng bạn có một số kinh nghiệm về JavaScript và biết về các kiểu cơ bản, như chuỗi, số và boolean.

0 0 58

- vừa được xem lúc

Type Annotation và Type Inference trong TypeScript là gì?

Khi làm việc với javascript chắc hẳn các bạn đã quá quen với việc dùng biến mà không cần phải quan tâm đến kiểu dữ liệu của nó là gì phải không? Đúng là mới đầu tiếp cận với Typescript mình cũng cảm thấy nó khá là phiền vì cần phải khai báo đủ type để nó chặt chẽ hơn. Lúc đó mình còn nghĩ: " JavaScr

0 0 43

- vừa được xem lúc

Tìm hiểu TypeScript và kiến thức cơ bản

TypeScript là gì. TypeScript sử dụng tất cả các tính năng của của ECMAScript 2015 (ES6) như classes, modules.

0 0 60

- vừa được xem lúc

TypeScript - P1: Vì sao TypeScript được yêu thích đến vậy?

Trải nghiệm thực tế. Trước khi là một Web Developer, tôi là một Mobile Developer và Java là thứ mà tôi từng theo đuổi.

0 1 75

- vừa được xem lúc

4 Tính năng rất hay từ TypeScript

Xin chào các bạn hôm nay mình xin chia sẽ những tính năng rất hay của TypeScript (TS), các bạn cùng tìm hiểu nhé. Ngoài việc set Type cho biến, tham số hay function thì ví dụ khi bạn nhìn vào một tham

0 0 103