בדף הזה מוסבר איך להשתמש ב-Cloud Build כדי ליצור ולבדוק Node.jsאפליקציות, לאחסן ארטיפקטים של גרסאות build במאגר npm ב-Artifact Registry וליצור מידע על אישור המקור של Build.
באמצעות Cloud Build אפשר להשתמש בכל קובץ אימג' של קונטיינר שזמין לכולם כדי להריץ את המשימות. קובץ האימג' הציבורי node מ-Docker Hub מגיע עם הכלי npm שכבר מותקן בו. אתם יכולים להגדיר את Cloud Build כך שיבנה את פרויקט Node.js באמצעות הכלי הזה.
לפני שמתחילים
ההוראות בדף הזה מניחות שאתם מכירים את Node.js. בנוסף:
- כדאי להכיר את npm.
- הכינו מראש את פרויקט
Node.js, כולל הקבציםpackage.jsonו-test.js. - חשוב לוודא שקובץ
package.jsonכולל סקריפטstartוסקריפטtest. - להכיר את האופן שבו כותבים קובץ תצורת build של Cloud Build.
- יש לכם מאגר npm ב-Artifact Registry. אם אין לכם מאגר, יוצרים מאגר חדש.
- כדי להריץ את הפקודות
gcloudשבדף הזה, צריך להתקין את Google Cloud CLI.
בנייה באמצעות npm
כדי להריץ את המשימות שלכם בתמונה node מ-Docker Hub, מציינים את כתובת ה-URL של התמונה בשדה name בקובץ ההגדרות של Cloud Build.
Cloud Build מפעיל את הקונטיינר שצוין בשדה name באמצעות נקודת הכניסה שמוגדרת כברירת מחדל בתמונה. כדי לשנות את נקודת הכניסה שמוגדרת כברירת מחדל ולהגדיר איך שלב הבנייה יפעל כשהוא יופעל, מוסיפים שדה entrypoint לשלב הבנייה. קובץ האימג' node ב-Docker Hub מגיע עם הכלי npm שכבר מותקן מראש. מציינים את הכלים בשדה entrypoint כדי להפעיל אותם כנקודת הכניסה של שלב הבנייה.
בקובץ התצורה הבא של ה-build:
- השדה
nameמציין ש-Cloud Build משתמש בתמונהnodeמ-Docker Hub כדי להפעיל את המשימה. כשמציינים אתnodeהתמונה, אפשר להשמיט את גרסת הצומת כדי להשתמש בגרסת ברירת המחדל:latest, או לציין גרסת צומת כדי להשתמש בגרסה ספציפית. לדוגמה, הפקודהname: nodeתשתמש בגרסה העדכנית ביותר של node, והפקודהname: node:12תשתמש ב-node:12. השדה
entrypointמציין שהכליnpmנמצא בשימוש כשמפעילים את התמונהnode.steps: - name: 'node' entrypoint: 'npm'
הגדרת בנייה של Node.js
בתיקיית השורש של הפרויקט, יוצרים קובץ הגדרות בשם
cloudbuild.yaml.התקנת יחסי תלות: לפני שיוצרים את האפליקציה, צריך לוודא שכל יחסי התלות של הפרויקט מותקנים מ-
npm. אפשר להתקין יחסי תלות באמצעות הפקודהinstallבשלבnpmbuild. השדהargsשל שלב בנייה מקבל רשימה של ארגומנטים ומעביר אותם לתמונה שאליה מתייחס השדה name. בקובץ הגדרות ה-build, מוסיפים אתinstallלשדהargsכדי להפעיל את הפקודהinstall:steps: - name: 'node' entrypoint: 'npm' args: ['install']הוספת בדיקות: אם הגדרתם סקריפט
testב-package.json, אתם יכולים להגדיר את Cloud Build להפעיל את הסקריפט על ידי הוספתtestלשדהargs:steps: - name: 'node' entrypoint: 'npm' args: ['install'] - name: 'node' entrypoint: 'npm' args: ['test']הפעלת פקודות בהתאמה אישית: אם הקובץ
package.jsonמכיל פקודות בהתאמה אישית, אפשר להגדיר את Cloud Build להפעלת הפקודה הזו. בשדהargsמוסיפיםrunכארגומנט הראשון ואחריו את השם של הפקודה המותאמת אישית. בקובץ התצורה הבא של ה-build יש ארגומנטים להרצת פקודה בהתאמה אישית בשםbuild:steps: - name: 'node' entrypoint: 'npm' args: ['install'] - name: 'node' entrypoint: 'npm' args: ['test'] - name: 'node' entrypoint: 'npm' args: ['run', 'build']העלאה אל Artifact Registry:
בקובץ ההגדרות, מוסיפים את השדה
npmPackagesומציינים את מאגר ה-npm ב-Artifact Registry:artifacts: npmPackages: - repository: 'https://LOCATION-npm.pkg.dev/PROJECT-ID/REPOSITORY_NAME' packagePath: 'PACKAGE_PATH'מחליפים את הערכים הבאים:
- LOCATION: המיקום של המאגר ב-Artifact Registry.
- PROJECT_ID: מזהה Google Cloud הפרויקט שמכיל את מאגר Artifact Registry.
- REPOSITORY_NAME: השם של מאגר npm ב-Artifact Registry.
- PACKAGE_PATH: הנתיב לספרייה המקומית שמכילה את חבילת ה-npm שרוצים להעלות ל-Artifact Registry. מומלץ להשתמש בנתיב מוחלט.
PACKAGE_PATHהערך יכול להיות.כדי להשתמש בספריית העבודה הנוכחית, אבל אי אפשר להשמיט את השדה או להשאיר אותו ריק. הספרייה הזו חייבת להכיל קובץpackage.json.
אופציונלי: הפעלת יצירת שיוך מקור
Cloud Build יכול ליצור מטא נתונים של מקורות build שניתנים לאימות של Supply chain Levels for Software Artifacts (SLSA) כדי לעזור לכם לאבטח את צינור השילוב הרציף שלכם.
כדי להפעיל את יצירת המקור, מוסיפים את השורה
requestedVerifyOption: VERIFIEDלקטעoptionsבקובץ ההגדרות.מתחילים את ה-build: באופן ידני או באמצעות טריגרים של build.
אחרי שהבנייה מסתיימת, אפשר לראות את פרטי המאגר ב-Artifact Registry.
אפשר גם לראות את המטא-נתונים של מקור ה-build ולאמת את המקור.
הרצת בדיקות על כמה גרסאות של node
לפעמים צריך לוודא שהפרויקט פועל בכמה גרסאות של node. אתם יכולים ליצור ולהגדיר טריגרים של Cloud Build כך ש:
- בקובץ התצורה של ה-build, מציינים את גרסת
nodeכמשתנה חלופי. - יוצרים טריגר אחד לכל גרסה של
nodeשרוצים לבנות את האפליקציה בהתאם אליה. - בכל אחת מהגדרות הטריגר, משתמשים בשדה של ערך משתנה ההחלפה כדי לציין את הגרסה של
nodeעבור הטריגר הזה.
בשלבים הבאים מוסבר איך לציין את גרסה node באמצעות משתני החלפה ספציפיים לטריגר:
בשורש המאגר, מוסיפים קובץ הגדרות build שמציין את
nodeversion כמשתנה החלפה. בדוגמה הבאה של קובץ הגדרות build, $_NODE_VERSIONהוא משתנה החלפה שהוגדר על ידי המשתמש:steps: - name: 'node:$_NODE_VERSION' entrypoint: 'npm' args: ['install'] - name: 'node:$_NODE_VERSION' entrypoint: 'npm' args: ['test']לכל גרסה של
nodeשרוצים לבצע בשבילה build, יוצרים טריגר לפיתוח גרסת Build באמצעות השלבים הבאים:פותחים את הדף Triggers במסוף Google Cloud :
בוחרים את הפרויקט מהתפריט הנפתח לבחירת פרויקט בחלק העליון של הדף.
לוחצים על פתיחה.
לוחצים על Create trigger (יצירת ביטוי להפעלה).
בדף Create trigger, מזינים את ההגדרות הבאות:
מזינים שם לטריגר.
בוחרים את אירוע המאגר כדי להפעיל את הטריגר.
בוחרים את המאגר שמכיל את קובץ ההגדרות של קוד המקור וה-build.
מציינים את הביטוי הרגולרי לשם הענף או התג שיפעיל את הטריגר.
Configuration: בוחרים את קובץ הגדרות ה-build שיצרתם קודם.
בקטע משתני החלפה, לוחצים על הוספת משתנה.
- בקטע Variable (משתנה), מציינים את משתנה הגרסה
nodeשבו השתמשתם בקובץ הגדרות ה-build, ובקטע Value (ערך), מציינים את הגרסה שלnode. לדוגמה,_NODE_VERSIONו-12.
- בקטע Variable (משתנה), מציינים את משתנה הגרסה
לוחצים על יצירה כדי לשמור את טריגר לפיתוח גרסת Build.
אתם יכולים להשתמש בטריגרים האלה כדי ליצור את הקוד שלכם בגרסה של node שציינתם בטריגר.
המאמרים הבאים
- איך צופים בתוצאות של בניית האפליקציה
- איך מאבטחים את הגרסאות
- איך יוצרים תמונות של קונטיינרים
- איך יוצרים אפליקציות Go
- איך מבצעים פריסות כחולות/ירוקות ב-Compute Engine
- איך פותרים בעיות שקשורות לבנייה