Ofer Shapira

איך אתם דואגים שהקובץ .env שלכם יהיה תמיד עדכני ושכל הצוות יהיה מסונכרן עליו?

פורסם במקור ב LinkedIn

איך אתם דואגים שהקובץ .env שלכם יהיה תמיד עדכני ושכל הצוות יהיה מסונכרן עליו?
הפתרון שלנו היה להדיר מחדש ״מה זה קובץ env״, וזה לא קובץ שמישהו מחזיק ומעדכן ידנית, אלא build artifact שנוצר לבד בכל פעם שמריצים את האפליקציה.

במשך הרבה זמן הפתרון שלנו לניהול ה-env היה גרוע וידני: הודעה בסלאק.
(אם אתם מזדהים תרימו את היד...)
אם מישהו מוסיף משתנה סביבה חדש, דוחף את הקוד, ושלושה ימים אחר כך מישהו אחר עושה pull, מריץ, ומקבל קריסה על משתנה שהוא לא שמע עליו מעולם. ואז מגיעה ההודעה הקבועה או השיטוט בהודעות סלאק. גם אם מעבירים את זה דרך איזה סיקרט מנג׳ר כמו bitwarden, עדיין זמן יקר מתבזבז על החוסר סנכרון...

במוצר שלנו שיש בו כבר עשרות סרוויסים (פרונט ובק) הבעיה נהיית הרבה יותר גדולה כי לכל פרויקט יש את ה-env שלו.

אז הפתרון שלנו היה לעשות שיפט לענן - לכל שירות יש היום סיקרט אחד ב Secret Manager של גוגל שמחזיק את כל משתני הפיתוח המקומיים כאובייקט JSON. מספיק לעדכן ערך במקום אחד - וכל הצוות מקבל אותו, עם היסטוריה (ועל הדרך גם אפשרות לחזור אחורה בקלות).

ומהצד של המפתח (DevEx) הסנכרון הפסיק להיות פקודה שמישהו צריך לזכור אלא פעולה אוטומטית: כתבנו executor קטן ל Nx והגדרנו אותו כתלות של כל dev target אצלנו, ככה שעוד לפני שהאפליקציה בכלל עולה Nx כבר משך את הסודות העדכניים וכתב env טרי.

ומה עושים אם רוצים לעשות override מקומית?
גם את זה פתרנו בצורה אלגנטית - כל מה ששמים ב env.local ממוזג מעל מה שהגיע מהענן. הערכים המשותפים נשארים משותפים, המחשב שלך נשאר שלך.

יש לזה מחיר קטן שצריך לשלם - כל כמה זמן צריך לרענן את החיבור שלנו לGCP (הרענון קורה אוטומטית אבל עדיין צריך לאשר את החיבור דרך הדפדפן) ועדכוני סיקרטים דורשים לעבוד עם הממשק הזוועתי של הסיקרטים של גוגל (שגם לזה תפרתי פתרון בצורת תוסף דפדפן שעושה שם סדר), אבל מאז שעשינו את זה, ״אצלי זה עובד״ הפסיק להיות בעיה של משתני סביבה.

אם אתם עדיין נאבקים בלסנכרן קבצי env בצוות אני ממליץ בחום לאמץ את תצורת העבודה הזאת, זה חוסך המון כאב ראש וזמן יקר של מפתחים, וממקד בדברים החשובים באמת

מדיה מהפוסט המקורי

התמונות והסרטונים זמינים בפוסט המקורי בלינקדאין.