אחסון של ארטיפקטים של בנייה ב-Cloud Storage

בדף הזה מוסבר איך אפשר לאחסן ארטיפקטים של בנייה ב-Cloud Storage.

מומלץ להשתמש ב-Artifact Registry לאחסון ארטיפקטים של בנייה. ‫Artifact Registry הואGoogle Cloud מוצר שאפשר לשלב עם Cloud Build כדי לאחסן ולנהל את הארטיפקטים שלכם בצורה מאובטחת במאגרים פרטיים או ציבוריים. אחסון פריטי מידע שנוצרים בתהליך פיתוח (Artifact) ב-Artifact Registry מאפשר לכם:

הוראות להגדרת Cloud Build לאחסון חבילות וקובצי אימג' מגרסאות ה-build ב-Artifact Registry מופיעות במאמר אחסון ארטיפקטים ב-Artifact Registry.

אחסון ארטיפקטים ב-Cloud Storage

כדי לאחסן ארטיפקטים שאינם קונטיינרים ב-Cloud Storage, מוסיפים שדה artifacts לקובץ ההגדרות של ה-build עם המיקום של הקטגוריה לאחסון הארטיפקט והנתיב לארטיפקט אחד או יותר:

YAML

artifacts:
  objects:
    location: [STORAGE_LOCATION]
    paths: [[ARTIFACT_PATH],[ARTIFACT_PATH], ...]

איפה,

  • [STORAGE_LOCATION]: קטגוריה של Cloud Storage או תיקייה בתוך הקטגוריה שבה Cloud Build צריך לאחסן את הארטיפקט, כמו gs://mybucket או gs://mybucket/myproject/builds. כדי למצוא את השמות של קטגוריות קיימות, אפשר לעיין במאמר בנושא רשימת קטגוריות או במאמר בנושא יצירת קטגוריה חדשה.
  • [ARTIFACT_PATH]: הנתיב לארטיפקט אחד או יותר. ‫[ARTIFACT_PATH] הוא נתיב יחסי לספריית העבודה. הוא יכול להיות /workspace, ספריית העבודה שמוגדרת כברירת מחדל ב-Cloud Build, או ספריית העבודה שהגדרתם באמצעות השדה dir.

JSON

{
    "artifacts": {
        "objects": {
            "location": [
                "[STORAGE_LOCATION]"
            ],
            "paths": [
            [
                "[ARTIFACT_PATH]"
            ],
            [
                "[ARTIFACT_PATH]"
            ],
            "..."
            ]
        }
    }
}

איפה,

  • [STORAGE_LOCATION]: קטגוריה של Cloud Storage או תיקייה בתוך הקטגוריה שבה Cloud Build צריך לאחסן את הארטיפקט, כמו gs://mybucket או gs://mybucket/myproject/builds. כדי למצוא את השמות של קטגוריות קיימות, אפשר לעיין במאמר בנושא הצגת רשימה של קטגוריות או במאמר בנושא יצירת קטגוריה חדשה.
  • [ARTIFACT_PATH]: הנתיב לארטיפקט אחד או יותר. ‫[ARTIFACT_PATH] הוא נתיב יחסי לספריית העבודה. הוא יכול להיות /workspace, ספריית העבודה שמוגדרת כברירת מחדל ב-Cloud Build, או ספריית העבודה שהגדרתם באמצעות השדה dir.

כשמאחסנים ארטיפקטים ב-Cloud Storage, חשוב לשים לב להערות הבאות:

  • אפשר לציין רק קטגוריה אחת להעלאת הארטיפקטים, ואתם צריכים להיות הבעלים של הקטגוריה. אפשר לציין נתיב ספרייה תקין בקטגוריה.

  • אתם יכולים להעלות כמה פריטי Artifact שתרצו, אבל אתם יכולים לציין עד 100 נתיבים של פריטי Artifact.

  • אם מעלים ארטיפקט לדלי שכבר יש בו ארטיפקט עם אותו שם, הארטיפקט החדש יחליף את הארטיפקט הקיים. אתם יכולים להפעיל ניהול גרסאות של אובייקטים בקטגוריה אם אתם לא רוצים שארטיפקט חדש יותר יחליף ארטיפקט קיים עם אותו שם.

אחרי שה-build מסתיים בהצלחה, אפשר לראות את תוצאות ההעלאה בקובץ המניפסט בפורמט JSON שנמצא בנתיב [STORAGE_LOCATION]/artifacts-$BUILD_ID.json.

קובץ המניפסט בפורמט JSON כולל את השדות הבאים:

  • location: כאן מציינים את המיקום ב-Cloud Storage שבו מאוחסן ארטיפקט, והערך הוא מהצורה gs://[STORAGE_LOCATION]/[FILE_NAME]#[GENERATION_NUMBER]. אפשר להשתמש במספר הדור כדי לזהות באופן ייחודי גרסה של הנתונים בקטגוריה של Cloud Storage.
  • file_hash: כאן מציינים את סוג ה-hash ואת הערך. סוג הגיבוב הוא תמיד 2, שמציין שבוצע גיבוב MD5.

דוגמאות לתוצרי פגישה

בדוגמאות הבאות אפשר לראות איך להשתמש בשדה Artifacts בקובץ build config. בכל הדוגמאות האלה, צריך להחליף את [VALUES_IN_BRACKETS] בערכים המתאימים.

העלאת קבצים ותיקיות

קובץ התצורה של ה-build שמופיע בהמשך מעלה את helloworld.class אל gs://[STORAGE_LOCATION]/:

YAML

steps:
- name: 'gcr.io/cloud-builders/javac'
  args: ['HelloWorld.java']
artifacts:
  objects:
    location: 'gs://[STORAGE_LOCATION]/'
    paths: ['HelloWorld.class']

JSON

{
    "steps": [
    {
        "name": "gcr.io/cloud-builders/javac",
        "args": [
            "HelloWorld.java"
        ]
    }
    ],
    "artifacts": {
        "objects": {
            "location": "gs://[STORAGE_LOCATION]/",
            "paths": [
                "HelloWorld.class"
            ]
        }
    }
}

כדי להעלות יותר מארטיפקט אחד, מציינים את הנתיב לכל ארטיפקט ומפרידים בין הנתיבים באמצעות פסיק. בדוגמה הבאה מועלים הקבצים HelloWorld.java, HelloWorld.class ו-cloudbuild.yaml אל gs://[STORAGE_LOCATION]/:

YAML

steps:
- name: 'gcr.io/cloud-builders/javac'
  args: ['HelloWorld.java']
artifacts:
  objects:
    location: 'gs://[STORAGE_LOCATION]/'
    paths: ['HelloWorld.java', 'HelloWorld.class', 'cloudbuild.yaml']

JSON

{
    "steps": [
    {
        "name": "gcr.io/cloud-builders/javac",
        "args": [
            "HelloWorld.java"
        ]
    }
    ],
    "artifacts": {
        "objects": {
            "location": "gs://[STORAGE_LOCATION]/",
            "paths": [
                "HelloWorld.java",
                "HelloWorld.class",
                "cloudbuild.yaml"
            ]
        }
    }
}

אפשר גם להעלות את הארטיפקטים לנתיב ספרייה תקין בדלי. בדוגמה הבאה מתבצעת העלאה של HelloWorld.java ו-HelloWorld.class אל gs://[BUCKET_NAME]/[FOLDER_NAME]:

YAML

steps:
- name: 'gcr.io/cloud-builders/javac'
  args: ['HelloWorld.java']
artifacts:
  objects:
    location: 'gs://[BUCKET_NAME]/[FOLDER_NAME]'
    paths: ['HelloWorld.java', 'HelloWorld.class']

JSON

{
    "steps": [
    {
        "name": "gcr.io/cloud-builders/javac",
        "args": [
            "HelloWorld.java"
        ]
    }
    ],
    "artifacts": {
        "objects": {
            "location": "gs://[BUCKET_NAME]/[FOLDER_NAME]",
            "paths": [
                "HelloWorld.java",
                "HelloWorld.class"
            ]
        }
    }
}

שימוש בתווים כלליים לחיפוש כדי להעלות יותר מארטיפקט אחד

כשמעלים כמה ארטיפקטים, אפשר להשתמש בתווים כלליים לחיפוש ב-paths כדי לציין כמה קבצים.

בדוגמה הבאה, הארגומנט הוא קובץ בשם classes שמכיל את השמות של הקבצים .java שצריך לקמפל. לאחר מכן, הוא מעלה כל קובץ .class לקטגוריה של Cloud Storage שצוינה:

YAML

steps:
- name: 'gcr.io/cloud-builders/javac'
  args: ['@classes']
artifacts:
  objects:
    location: 'gs://[STORAGE_LOCATION]/'
    paths: ['*.class']

JSON

{
    "steps": [
    {
        "name": "gcr.io/cloud-builders/javac",
        "args": [
            "@classes"
        ]
    }
    ],
    "artifacts": {
        "objects": {
            "location": "gs://[STORAGE_LOCATION]/",
            "paths": [
                "*.class"
            ]
        }
    }
}

שימוש במשתני החלפה במיקום של הקטגוריה

אפשר להשתמש במשתני החלפה כדי לציין תיקייה בקטגוריה של Cloud Storage. אם התיקייה שציינתם לא קיימת, Cloud Build ייצור אותה בשבילכם.

בדוגמה שלמטה, הארטיפקטים מועלים לנתיב ב-Cloud Storage שכולל את שם הפרויקט Google Cloud שממנו הופעל ה-build (למשל gs://mybucket/myproject/‎):

YAML

steps:
- name: 'gcr.io/cloud-builders/javac'
  args: ['@classes']
artifacts:
  objects:
    location: 'gs://[BUCKET_NAME]/$PROJECT_ID'
    paths: ['helloworld.class']

JSON

{
    "steps": [
    {
        "name": "gcr.io/cloud-builders/javac",
        "args": [
            "@classes"
        ]
    }
    ],
    "artifacts": {
        "objects": {
            "location": "gs://[BUCKET_NAME]/$PROJECT_ID",
            "paths": [
                "helloworld.class"
            ]
        }
    }
}

המאמרים הבאים