בדף הזה מוסבר איך אפשר לאחסן ארטיפקטים של בנייה ב-Cloud Storage.
מומלץ להשתמש ב-Artifact Registry לאחסון ארטיפקטים של בנייה. Artifact Registry הואGoogle Cloud מוצר שאפשר לשלב עם Cloud Build כדי לאחסן ולנהל את הארטיפקטים שלכם בצורה מאובטחת במאגרים פרטיים או ציבוריים. אחסון פריטי מידע שנוצרים בתהליך פיתוח (Artifact) ב-Artifact Registry מאפשר לכם:
- ניהול מטא-נתונים של קונטיינרים וסריקה לאיתור נקודות חולשה בקונטיינרים באמצעות Artifact Analysis.
- אכיפת מדיניות פריסה באמצעות Binary Authorization.
- שימוש בהזרמת תמונות ב-Google Kubernetes Engine, שימושי במיוחד לתמונות גדולות של קונטיינרים.
הוראות להגדרת 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"
]
}
}
}
המאמרים הבאים
- איך יוצרים פרויקטים ב-
Go - איך מתחילים לבנות באופן ידני ואיך משתמשים בטריגרים
- איך פותרים בעיות שקשורות לבנייה