אפשר להתקין את Firebase Local Emulator Suite ולהגדיר אותו לסביבות שונות של אב טיפוס ובדיקות, החל מסשנים חד-פעמיים של יצירת אב טיפוס ועד לתהליכי עבודה של שילוב רצוף (CI) בקנה מידה תעשייתי.
התקנת חבילת האמולטור המקומית
לפני שמתקינים את Emulator Suite, צריך:
כדי להתקין את חבילת האמולטור:
- מתקינים את Firebase CLI.
אם עדיין לא התקנתם את Firebase CLI,
מתקינים אותו עכשיו.
כדי להשתמש בחבילת האמולטור יש צורך בגרסה 8.14.0 ומעלה של CLI. אפשר לבדוק באיזו גרסה אתם משתמשים באמצעות הפקודה הבאה:
firebase --version
- אם עדיין לא עשיתם זאת, צריך לאתחל את ספריית העבודה הנוכחית כפרויקט ב-Firebase, ופועלים לפי ההנחיות במסך כדי לציין את המוצרים שבהם רוצים להשתמש:
firebase init
- מגדירים את Emulator Suite. הפקודה הזו מפעילה אשף תצורה שמאפשר לבחור את הסימולטורים הרצויים, להוריד את הקבצים הבינאריים המתאימים של הסימולטורים ולהגדיר את יציאות הסימולטורים אם הגדרות ברירת המחדל לא מתאימות.
firebase init emulators
אחרי שמתקינים אמולטור, לא מתבצעות בדיקות עדכונים ולא מתבצעות הורדות אוטומטיות נוספות עד שמעדכנים את הגרסה של Firebase CLI.
הגדרת חבילת אמולטור
אפשר גם להגדיר את נתיבי הרשת של המהדמנים ואת הנתיב להגדרות של כללי האבטחה בקובץ firebase.json
:
- כדי לשנות את היציאות של האמולטור, מריצים את
firebase init emulators
או עורכים אתfirebase.json
באופן ידני. - כדי לשנות את הנתיב להגדרות של כללי האבטחה, אפשר לערוך את
firebase.json
באופן ידני.
אם לא תגדירו את ההגדרות האלה, הסימולטורים יקשיבו ביציאות ברירת המחדל שלהם, והסימולטורים של Cloud Firestore, Realtime Database ו-Cloud Storage for Firebase יפעלו עם אבטחת נתונים פתוחה.
פקודה | תיאור |
---|---|
init emulators | הפעלת אשף אתחול של אמולטור. מזהים את האמולטורים שרוצים להתקין, ואפשר גם לציין את הגדרות היציאה של האמולטור. init emulators לא גורם נזק. אישור הגדרות ברירת המחדל ישמור על הגדרות המהדר הנוכחיות. |
הגדרת יציאות
כל אמולטור מקושר ליציאה אחרת במכונה עם ערך ברירת מחדל מועדף.
אמולטור | יציאת ברירת מחדל |
---|---|
Authentication | 9099 |
Emulator Suite UI | 4000 |
Cloud Functions | 5001 |
Eventarc | 9299 |
Realtime Database | 9000 |
Cloud Firestore | 8080 |
Cloud Storage for Firebase | 9199 |
Firebase Hosting | 5000 |
Pub/Sub | 8085 |
הגדרת מזהה הפרויקט
בהתאם לאופן שבו מפעילים את הסימולטורים, אפשר להריץ כמה מכונות של סימולטור באמצעות מזהי פרויקטים שונים ב-Firebase, או כמה מכונות של סימולטור למזהה פרויקט נתון. במקרים כאלה, מכונות של המהדמנים פועלות בסביבה נפרדת.
באופן כללי, מומלץ להגדיר מזהה פרויקט אחד לכל ההפעלות של המהדמנים, כדי ש-Emulator Suite UI, המהדמנים השונים של המוצרים וכל המופעים שפועלים של אמולטור מסוים יוכלו לתקשר בצורה תקינה בכל המקרים.
Local Emulator Suite מנפיק אזהרות כשמזהה כמה מזהי פרויקטים בסביבה, אבל אפשר לשנות את ההתנהגות הזו על ידי הגדרת המפתח singleProjectMode
לערך false
ב-firebase.json
.
אפשר לבדוק את ההצהרות על מזהי הפרויקט כדי לאתר אי-התאמות בפרטים הבאים:
- פרויקט ברירת המחדל בשורת הפקודה. כברירת מחדל, מזהה הפרויקט ייקבע בזמן ההפעלה מהפרויקט שנבחר באמצעות
firebase init
אוfirebase use
. כדי להציג את רשימת הפרויקטים (ולראות איזה מהם נבחר), משתמשים ב-firebase projects:list
. - בדיקות יחידת כללים. מזהה הפרויקט מצוין בדרך כלל בקריאות לשיטות
initializeTestEnvironment
אוinitializeTestApp
בספרייה של בדיקת היחידה של הכללים. - הדגל
--project
בשורת הפקודה. העברת הדגל--project
ב-CLI מבטלת את פרויקט ברירת המחדל. צריך לוודא שהערך של הדגל תואם למזהה הפרויקט בבדיקות היחידה ובהפעלת האפליקציה.
כדאי גם לבדוק את ההגדרות של מזהי הפרויקטים שמוגדרות ספציפית לפלטפורמה, שהגדרתם בזמן ההגדרה של פרויקטים ב-פלטפורמות של Apple, ב-Android וב-אינטרנט.
הגדרת כללי האבטחה
האמולטורים יקבלו את ההגדרות של כללי האבטחה ממפתחות ההגדרה database
, firestore
ו-storage
ב-firebase.json
.
{
// Existing firebase configuration ...
"database": {
"rules": "database.rules.json"
},
"firestore": {
"rules": "firestore.rules"
},
"storage": {
"rules": "storage.rules"
}
// ...
// Optional emulator configuration. Default
// values are used if absent.
"emulators": {
"singleProjectMode": false, // do not warn on detection of multiple project IDs
"firestore": {
"port": "8080"
},
"ui": {
"enabled": true, // Default is `true`
"port": 4000 // If unspecified, see CLI log for selected port
},
"auth": {
"port": "9099"
},
"pubsub": {
"port": "8085"
}
}
}
ציון אפשרויות של Java
האמולטור Realtime Database, האמולטור Cloud Firestore והחלק מאמולטור Cloud Storage for Firebase מבוססים על Java, שאפשר להתאים אישית באמצעות דגלי JVM באמצעות משתנה הסביבה JAVA_TOOL_OPTIONS
.
לדוגמה, אם נתקלתם בשגיאות שקשורות למרחב האשפה של Java, תוכלו להגדיל את גודל האשפה המקסימלי של Java ל-4GB:
export JAVA_TOOL_OPTIONS="-Xmx4g"
firebase emulators:start
אפשר לציין כמה דגלים במירכאות שמופרדות ברווחים, למשל JAVA_TOOL_OPTIONS="-Xms2g -Xmx4g"
. הדגלים משפיעים רק על הרכיבים של המהדמנים שמבוססים על Java, ואין להם השפעה על חלקים אחרים של CLI של Firebase, כמו Emulator Suite UI.
הפעלת אמולטורים
אפשר להפעיל את האמולטורים עד שמסיימים אותם ידנית, או להפעיל אותם למשך פרק הזמן של סקריפט בדיקה ייעודי ואז להשבית אותם באופן אוטומטי.
פקודה | תיאור | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
אמולטורים:start | מפעילים את המהדמנים של מוצרי Firebase שהוגדרו בקובץ firebase.json .
תהליכי המהדמנים ימשיכו לפעול עד להפסקה מפורשת. קריאה ל-
emulators:start תוריד את האמולטורים אל ~/.cache/firebase/emulator/ אם
הם עדיין לא מותקנים.
|
||||||||||||
emulators:exec scriptpath | מריצים את הסקריפט ב-scriptpath אחרי שמפעילים את הסימולטורים של מוצרי Firebase שהוגדרו ב-firebase.json . תהליכי אמולטור יפסיקו באופן אוטומטי
כשהסקריפט יסיים להריץ.
|
בדרך כלל השיטה firebase emulators:exec
מתאימה יותר לתהליכי עבודה של אינטגרציה רציפה (CI).
ייצוא וייבוא של נתוני אמולטור
אפשר לייצא נתונים מהאמולטורים Authentication, Cloud Firestore, Realtime Database ו-Cloud Storage for Firebase כדי להשתמש בהם כקבוצת נתוני בסיס משותפת שאפשר לשתף. אפשר לייבא את קבוצות הנתונים האלה באמצעות הדגל --import
, כפי שמתואר למעלה.
emulators:export export_directory |
Authentication, Cloud Firestore, Realtime Database או אמולטור של Cloud Storage for Firebase.
ייצוא נתונים ממכונת אמולטור Cloud Firestore, Realtime Database או Cloud Storage for Firebase שפועלת. השדה
אפשר להורות למהדמנים לייצא נתונים באופן אוטומטי כשהם מושבתים באמצעות הדגלים |
שילוב עם מערכת ה-CI
מתבצע הרצה של קובצי אימג' של חבילת אמולטור בקונטיינרים
קל להתקין ולהגדיר את Emulator Suite עם קונטיינרים בהגדרת CI רגילה.
יש כמה בעיות שכדאי לשים לב אליהן:
קובצי JAR מותקנים ונשמרים במטמון בכתובת
~/.cache/firebase/emulators/
.- כדאי להוסיף את הנתיב הזה להגדרות של מטמון ה-CI כדי למנוע הורדות חוזרות.
אם אין לכם קובץ
firebase.json
במאגר, תצטרכו להוסיף ארגומנט לשורת הפקודה לפקודהemulators:start
אוemulators:exec
כדי לציין אילו מכונות וירטואליות צריך להפעיל. לדוגמה,--only functions,firestore
.
יצירת אסימון אימות (לאמולטור אירוח בלבד)
אם תהליכי העבודה של השילוב המתמשך מסתמכים על Firebase Hosting, תצטרכו להתחבר באמצעות אסימון כדי להריץ את firebase emulators:exec
. לא צריך להתחבר למהדמרים האחרים.
כדי ליצור אסימון, מריצים את הפקודה firebase login:ci
בסביבה המקומית. לא מומלץ לבצע את הפעולה הזו ממערכת CI. פועלים לפי ההוראות כדי לבצע אימות. צריך לבצע את השלב הזה רק פעם אחת לכל פרויקט, כי האסימון יהיה תקף בכל גרסאות ה-build. צריך להתייחס לאסימון כמו לסיסמה, ולוודא שהוא נשמר בסודיות.
אם סביבת ה-CI מאפשרת לכם לציין משתני סביבה שאפשר להשתמש בהם בסקריפטים ל-build, פשוט יוצרים משתנה סביבה בשם FIREBASE_TOKEN
, והערך הוא המחרוזת של אסימון הגישה. ה-CLI של Firebase יזהה באופן אוטומטי את משתנה הסביבה FIREBASE_TOKEN
והמכונות הווירטואליות יתחילו לפעול כמו שצריך.
כחלופה אחרונה, אפשר פשוט לכלול את האסימון בסקריפט ה-build, אבל חשוב לוודא שלצדדים לא מהימנים אין גישה. לגישה הזו עם קידוד מובנה, אפשר להוסיף את הערך --token "YOUR_TOKEN_STRING_HERE"
לפקודה firebase emulators:exec
.
שימוש ב-API ל-REST של Emulator Hub
הצגת רשימה של אמולטורים שפועלים
כדי לקבל רשימה של המהדמנים שפועלים כרגע, שולחים בקשת GET
לנקודת הקצה /emulators
של Emulator Hub.
curl localhost:4400/emulators
התוצאה תהיה אובייקט JSON שבו מפורטים כל האמולטורים הפעילים ואת הגדרות המארח/היציאה שלהם. לדוגמה:
{
"hub":{
"name": "hub",
"host": "localhost",
"port": 4400
},
"functions": {
"name": "functions",
"host": "localhost",
"port": 5001
}
"firestore": {
"name": "firestore",
"host": "localhost",
"port": 8080
}
}
הפעלה או השבתה של טריגרים של פונקציות ברקע
במצבים מסוימים תצטרכו להשבית באופן זמני את הטריגרים של הפונקציות המקומיות והתוספים. לדוגמה, יכול להיות שתרצו למחוק את כל הנתונים במהדמ ה-Cloud Firestore בלי להפעיל פונקציות onDelete
שפועלות במהדמ ה-Cloud Functions או ה-Extensions.
כדי להשבית באופן זמני טריגרים של פונקציות מקומיות, שולחים בקשה מסוג PUT
לנקודת הקצה /functions/disableBackgroundTriggers
של Emulator Hub.
curl -X PUT localhost:4400/functions/disableBackgroundTriggers
התוצאה תהיה אובייקט JSON עם פרטים על המצב הנוכחי.
{
"enabled": false
}
כדי להפעיל טריגרים של פונקציות מקומיות אחרי שהם הושבתו, שולחים בקשה מסוג PUT
לנקודת הקצה /functions/enableBackgroundTriggers
של Emulator Hub.
curl -X PUT localhost:4400/functions/enableBackgroundTriggers
התוצאה תהיה אובייקט JSON עם פרטים על המצב הנוכחי.
{
"enabled": true
}
שילובים של SDK למהדמרים
בטבלאות שבקטע הזה מצוינים האמולטורים שנתמכים ב-SDK ללקוח וב-Admin SDK. עתידי: המשמעות היא שאנחנו מתכננים תמיכה באמולטורים, אבל היא עדיין לא זמינה.
זמינות של SDK ללקוחות
Android | פלטפורמות של Apple | אתר |
ממשק המשתמש של Firebase Android |
ממשק המשתמש של Firebase iOS |
ממשק המשתמש של Firebase אינטרנט |
|
---|---|---|---|---|---|---|
Realtime Database | 19.4.0 | 7.2.0 | 8.0.0 | 6.4.0 | עתיד | לא רלוונטי |
Cloud Firestore | 21.6.0 | 7.2.0 | 8.0.0 | 6.4.0 | עתיד | לא רלוונטי |
Authentication | 20.0.0 | 7.0.0 | 8.0.0 | 7.0.0 | עתיד | 4.7.2 |
Cloud Storage for Firebase | 20.0.0 | 8.0.0 | 8.4.0 | 7.0.0 | 11.0.0 | לא רלוונטי |
Cloud Functions | 19.1.0 | 7.2.0 | 8.0.0 | לא רלוונטי | לא זמין | לא זמין |
Hosting | לא זמין | לא זמין | לא זמין | לא זמין | לא זמין | לא זמין |
Extensions | לא זמין | לא זמין | לא זמין | לא זמין | לא זמין | לא רלוונטי |
הזמינות של Admin SDK
Node | Java | Python | Go | |
---|---|---|---|---|
Realtime Database | 8.6.0 | 6.10.0 | 2.18.0 | עתיד |
Cloud Firestore | 8.0.0 | 6.10.0 | 3.0.0 | 1.0.0 |
Authentication | 9.3.0 | 7.2.0 | 5.0.0 | 4.2.0 |
Cloud Storage for Firebase | 9.8.0 | עתיד | עתיד | עתיד |
Cloud Functions | לא רלוונטי | לא זמין | לא זמין | לא זמין |
Hosting | לא זמין | לא זמין | לא זמין | לא זמין |
Extensions | לא זמין | לא זמין | לא זמין | לא רלוונטי |