בדף הזה מוסבר איך לקשר מארח של Bitbucket Data Center ל-Cloud Build. חיבור למארח Bitbucket Data Center משלב את מאגרי Bitbucket Data Center עם Cloud Build. כך תוכלו להגדיר טריגרים של בנייה כדי לבנות מאגרי מידע מ-Bitbucket Data Center וגם לבנות מאגרי מידע מ-Bitbucket Data Center ברשת פרטית.
לפני שמתחילים
מפעילים את Cloud Build API, Secret Manager API ו-Compute Engine API, אם הם עדיין לא מופעלים.
תפקידים שנדרשים להפעלת ממשקי API
כדי להפעיל ממשקי API, נדרשת ההרשאה
serviceusage.services.enable. אם יצרתם את הפרויקט, סביר להניח שכבר יש לכם את ההרשאה הזו דרך התפקיד 'בעלים' (roles/owner). אחרת, תוכלו לקבל את ההרשאה הזו דרך התפקיד 'אדמין בממשק Service Usage' (roles/serviceusage.serviceUsageAdmin). איך מקצים תפקידים
- קוד המקור מוכן במאגר Bitbucket Data Center.
- צריך שיהיה לכם
Dockerfileאו קובץ הגדרות של Cloud Build במאגר המקור של Bitbucket Data Center. - אם לא התקנתם מופע של Bitbucket Data Center, תוכלו לקרוא את ההוראות במדריך להתקנה של Bitbucket Data Center.
הרשאות IAM נדרשות
כדי לקבל את ההרשאות שנדרשות להתחבר למארח Bitbucket Data Center, צריך לבקש מהאדמין להקצות לחשבון המשתמש את תפקיד ה-IAM Cloud Build Connection Admin (roles/cloudbuild.connectionAdmin).
כדי לקרוא הסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.
יכול להיות שאפשר לקבל את ההרשאות הנדרשות גם באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש.
אם מופע Bitbucket Data Center שלכם מתארח ברשת פרטית, כדאי לעיין במאמר יצירת מאגרי מידע מ-Bitbucket Data Center ברשת פרטית כדי לקבל מידע על תפקידי IAM נוספים שנדרשים להגדרת חיבור מארח.
יצירת טוקנים אישיים של גישה
לפני שיוצרים חיבור מארח למופע Bitbucket Data Center, צריך ליצור אסימוני גישה אישיים ב-Bitbucket Data Center. לשם כך:
נכנסים למופע של Bitbucket Data Center.
פועלים לפי ההוראות כדי ליצור אסימוני גישה מסוג HTTP לחשבון המשתמש.
יוצרים אסימון גישה עם ההיקף repository admin כדי להשתמש בו לחיבור ולניתוק מאגרי קוד.
כדי לוודא שלמאגרי Cloud Build יש גישה לקוד המקור במאגרים, צריך ליצור אסימון גישה עם ההיקף repository read.
שומרים את ערכי האסימון באופן מאובטח. תשתמשו בהם כדי להתחבר למאגר Bitbucket Data Center.
התחברות למארח Bitbucket Data Center
המסוף
כדי לחבר את המארח של Bitbucket Data Center ל-Cloud Build:
פותחים את הדף Repositories במסוף Google Cloud .
בראש הדף, לוחצים על הכרטיסייה דור שני.
בבורר הפרויקטים בסרגל העליון, בוחרים את Google Cloud הפרויקט.
לוחצים על יצירת חיבור למארח כדי לחבר מארח חדש ל-Cloud Build.
בחלונית הימנית, בוחרים באפשרות Bitbucket כספק המקור.
בקטע Configure Connection (הגדרת החיבור), מזינים את הפרטים הבאים:
אזור: בוחרים אזור לקישור. חובה לציין אזור. החיבור שלכם לא יכול להתקיים באופן גלובלי.
שם: מזינים שם לחיבור.
בקטע פרטי המארח, בוחרים או מזינים את הפרטים הבאים:
מארח Bitbucket: בוחרים ב-Bitbucket Data Center כמארח.
כתובת ה-URL של המארח: מזינים את כתובת ה-URL של המארח.
אופציונלי: אם רוצים לנהל את מפתחות ההצפנה שמשמשים להצפנת אסימוני הגישה למאגרי Bitbucket Data Center, עוברים לקטע הצפנה ובוחרים מפתח של Cloud Key Management Service. מידע נוסף זמין במאמר בנושא הפעלת מפתחות הצפנה בניהול הלקוח ב-Secret Manager.
בקטע Networking, בוחרים באחת מהאפשרויות הבאות:
אינטרנט ציבורי: בוחרים באפשרות הזו אם אפשר לגשת למופע באמצעות האינטרנט הציבורי.
רשת פרטית: בוחרים באפשרות הזו אם המופע מתארח ברשת פרטית. לאחר מכן, מגדירים את האפשרויות הבאות:
אישור CA: האישור בחתימה עצמית. לוחצים על עיון כדי לפתוח את האישור מהמחשב המקומי.
גודל האישור לא יכול להיות גדול מ-10KB והוא צריך להיות בפורמט PEM (
.pem,.cerאו.crt). אם משאירים את השדה הזה ריק, Cloud Build משתמש באישור מקבוצת האישורים שמוגדרת כברירת מחדל.בקטע Service Directory service, בוחרים את המיקום של השירות:
- בפרויקט CURRENT_PROJECT
- בפרויקט אחר
- הזנה ידנית
הזן את פריטי המידע הבאים:
פרויקט: אם בחרתם באפשרות בפרויקט אחר או באפשרות הזנה ידנית, מזינים או בוחרים Google Cloud את מזהה הפרויקט שלכם בתפריט הנפתח.
אזור: בשדה הזה האזור של החיבור שלכם נבחר מראש. האזור שצוין לשירות חייב להיות זהה לאזור שמשויך לחיבור.
מרחב שמות: בוחרים את מרחב השמות של השירות.
שירות: בוחרים את שם השירות במרחב השמות.
בקטע HTTP access tokens (אסימוני גישה ל-HTTP), מזינים את הפרטים הבאים:
אסימון גישה לאדמין: מזינים את האסימון עם גישת ההיקף repository admin. הטוקן הזה משמש לחיבור מאגרי מידע ולניתוק שלהם.
טוקן גישה לקריאה: מזינים את הטוקן עם גישה בהיקף repository read. טריגרים של Cloud Build משתמשים באסימון הזה כדי לגשת לקוד המקור במאגרי מידע.
לוחצים על Connect.
אחרי שלוחצים על הלחצן Connect (חיבור), טוקני הגישה האישיים מאוחסנים בצורה מאובטחת ב-Secret Manager. אחרי שמתחברים למארח של Bitbucket Data Center, Cloud Build יוצר בשבילכם סוד של webhook. אפשר לראות ולנהל את הסודות בדף Secret Manager.
gcloud
יוצרים סוד של webhook ב-Secret Manager על ידי הפעלת הפקודה הבאה, כאשר WEBHOOK_SECRET הוא השם שרוצים לתת לסוד של ה-webhook:
cat /proc/sys/kernel/random/uuid | tr -d '\n' | gcloud secrets create WEBHOOK_SECRET --data-file=-אם אתם מאחסנים את הסודות ב Google Cloud פרויקט אחר מזה שבו אתם מתכננים להשתמש כדי ליצור חיבור למארח, מריצים את הפקודה הבאה כדי להעניק לפרויקט גישה לסוכן השירות של Cloud Build:
PN=$(gcloud projects describe PROJECT_ID --format="value(projectNumber)") CLOUD_BUILD_SERVICE_AGENT="service-${PN}@gcp-sa-cloudbuild.iam.gserviceaccount.com" gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:${CLOUD_BUILD_SERVICE_AGENT}" \ --role="roles/secretmanager.admin"כאשר:
- PROJECT_ID הוא Google Cloud מזהה הפרויקט.
עכשיו אפשר להמשיך ולקשר את המארח של Bitbucket Data Center ל-Cloud Build.
כדי ליצור חיבור ל-Bitbucket Data Center, מריצים את הפקודה הבאה:
gcloud builds connections create bitbucket-data-center CONNECTION_NAME \ --host-uri=HOST_URI \ --project=PROJECT_ID \ --region=REGION \ --authorizer-token-secret-version=projects/PROJECT_ID/secrets/ADMIN_TOKEN/versions/SECRET_VERSION \ --read-authorizer-token-secret-version=projects/PROJECT_ID/secrets/READ_TOKEN/versions/SECRET_VERSION \ --webhook-secret-secret-version=projects/PROJECT_ID/secrets/WEBHOOK_SECRET/versions/SECRET_VERSION ``` Where:- CONNECTION_NAME הוא שם לחיבור של מארח Bitbucket Data Center ב-Cloud Build.
- HOST_URI הוא ה-URI של מופע Bitbucket Data Center.
- PROJECT_ID הוא Google Cloud מזהה הפרויקט.
- REGION הוא האזור של החיבור.
- ADMIN_TOKEN הוא שם האסימון עם ההיקף repository admin.
- READ_TOKEN הוא שם האסימון עם ההיקף repository read.
- SECRET_VERSION היא הגרסה של הסוד.
- WEBHOOK_SECRET הוא הסוד של ה-webhook.
Terraform
אפשר לחבר את המארח של Bitbucket Data Center ל-Cloud Build באמצעות Terraform.
בדוגמה הבאה, קטע הקוד מבצע את הפעולות הבאות:
- מגדיר את ספק Google של Terraform.
- יוצר סוד ב-Secret Manager לאחסון האסימונים של Bitbucket.
- נותן לסוכן השירות של Cloud Build את ההרשאות הנדרשות לגישה לסודות.
יצירת חיבור ל-Bitbucket Data Center.
// Configure the Terraform Google provider terraform { required_providers { google = {} } } provider "google" { project = "PROJECT_ID" region = "REGION" } // Create secrets and grant permissions to the Cloud Build service agent resource "google_secret_manager_secret" "admin-token-secret" { project = "PROJECT_ID" secret_id = "ADMIN_TOKEN_NAME" replication { auto {} } } resource "google_secret_manager_secret_version" "admin-token-secret-version" { secret = google_secret_manager_secret.admin-token-secret.id secret_data = "ADMIN_TOKEN_VALUE" } resource "google_secret_manager_secret" "read-token-secret" { project = "PROJECT_ID" secret_id = "READ_TOKEN_NAME" replication { auto {} } } resource "google_secret_manager_secret_version" "read-token-secret-version" { secret = google_secret_manager_secret.read-token-secret.id secret_data = "READ_TOKEN_VALUE" } resource "google_secret_manager_secret" "webhook-secret-secret" { project = "PROJECT_ID" secret_id = "WEBHOOK_SECRET_NAME" replication { auto {} } } resource "google_secret_manager_secret_version" "webhook-secret-secret-version" { secret = google_secret_manager_secret.webhook-secret-secret.id secret_data = "WEBHOOK_SECRET_VALUE" } data "google_iam_policy" "p4sa-secretAccessor" { binding { role = "roles/secretmanager.secretAccessor" members = ["serviceAccount:service-PROJECT_NUMBER@gcp-sa-cloudbuild.iam.gserviceaccount.com"] } } resource "google_secret_manager_secret_iam_policy" "policy-pak" { project = google_secret_manager_secret.admin-token-secret.project secret_id = google_secret_manager_secret.admin-token-secret.secret_id policy_data = data.google_iam_policy.p4sa-secretAccessor.policy_data } resource "google_secret_manager_secret_iam_policy" "policy-rpak" { project = google_secret_manager_secret.read-token-secret.project secret_id = google_secret_manager_secret.read-token-secret.secret_id policy_data = data.google_iam_policy.p4sa-secretAccessor.policy_data } resource "google_secret_manager_secret_iam_policy" "policy-whs" { project = google_secret_manager_secret.webhook-secret-secret.project secret_id = google_secret_manager_secret.webhook-secret-secret.secret_id policy_data = data.google_iam_policy.p4sa-secretAccessor.policy_data } // Create the connection resource resource "google_cloudbuildv2_connection" "my-connection" { project = "PROJECT_ID" location = "REGION" name = "CONNECTION_NAME" bitbucket_data_center_config { host_uri = "BITBUCKET_URI" authorizer_credential { user_token_secret_version = google_secret_manager_secret_version.admin-token-secret-version.id } read_authorizer_credential { user_token_secret_version = google_secret_manager_secret_version.read-token-secret-version.id } webhook_secret_secret_version = google_secret_manager_secret_version.webhook-secret-secret-version.id } depends_on = [ google_secret_manager_secret_iam_policy.policy-pak, google_secret_manager_secret_iam_policy.policy-rpak, google_secret_manager_secret_iam_policy.policy-whs ] }
כאשר:
- PROJECT_ID הוא Google Cloud מזהה הפרויקט.
- PROJECT_NUMBER הוא מספר הפרויקט שלכם ב- Google Cloud .
- ADMIN_TOKEN_NAME הוא השם של האסימון עם ההיקף
repository:admin. - ADMIN_TOKEN_VALUE הוא הערך של ADMIN_TOKEN_NAME.
- READ_TOKEN_NAME הוא השם של האסימון עם ההיקף
repository:read. - READ_TOKEN_VALUE הוא הערך של READ_TOKEN_NAME.
- WEBHOOK_SECRET_NAME הוא השם של הסוד של ה-webhook.
- WEBHOOK_SECRET_VALUE הוא הערך של WEBHOOK_SECRET_NAME.
- REGION הוא האזור של החיבור.
- CONNECTION_NAME הוא שם לחיבור של מארח Bitbucket Data Center ב-Cloud Build.
- BITBUCKET_URI הוא ה-URI של מופע Bitbucket Data Center.
החלפה של טוקנים ישנים או שפג תוקפם ב-Bitbucket Data Center
מבצעים רוטציה של טוקני הגישה כדי שחיבור המארח של Cloud Build יוכל לשמור על החיבור למאגר Bitbucket Data Center. אם תוקף הגישה שלכם ל-Bitbucket Data Center יפוג, הקישור של מארח Cloud Build למאגר Bitbucket Data Center ינותק. במקרה כזה, לא תוכלו להשבית את החיבור או לקשר מאגר עד שתחליפו את האסימון שפג תוקפו. בנוסף, השגיאות יופיעו במקרים הבאים:
בדף פרטי החיבורים של החיבור מופיעה הודעת שגיאה שבה מצוין
Connection is disconnected due to an invalid or expired access token.אם תנסו לקשר מאגר לחיבור עם טוקן גישה שתוקפו פג, תופיע ההודעה Invalid access token. כשלוחצים על View connection (הצגת החיבור), מגיעים לדף Connection details (פרטי החיבור) של החיבור עם האסימון שתוקפו פג.
ב-Cloud Build אפשר להחליף את טוקני הגישה על ידי הזנת ערכי טוקנים חדשים ושמירתם ב-Secret Manager בגרסה העדכנית ביותר של הסודות האלה. כדי לבצע רוטציה של טוקנים לגישה:
מבצעים רוטציה לכל אסימון גישה ב-Bitbucket Data Center:
עוברים למאגר Bitbucket Data Center שמקושר לחיבור המארח של Cloud Build.
פועלים לפי ההוראות במסמכי התיעוד של Bitbucket כדי להחליף טוקן גישה. כשמבצעים רוטציה של טוקן, Bitbucket Data Center יוצר טוקן חדש עם פרטי כניסה חדשים ומבטל את התוקף של הגרסה הקודמת של הטוקן. לאסימון המעודכן יש את אותן הרשאות ואותו היקף כמו לאסימון המקורי.
מעתיקים את המזהים של הטוקנים שהוחלפו.
מעדכנים את טוקן הגישה ב-Cloud Build:
עוברים לדף פרטי החיבור של החיבור.
בוחרים באפשרות עדכון טוקנים של גישה.
בתפריט Token rotation (רוטציה של טוקנים), מזינים את הטוקנים החדשים בשדות API access token (טוקן גישה ל-API) ו-Read access token (טוקן גישת קריאה).
(אופציונלי): אם רוצים שהחיבור ישתמש תמיד בגרסה העדכנית ביותר של הסוד עבור האסימונים, בוחרים באפשרות עדכון החיבור כך שתמיד תהיה בשימוש הגרסה העדכנית ביותר. יכול להיות שיהיה לכם שימושי להשאיר את האפשרות הזו לא מסומנת אם החיבור שלכם משתמש במספר גרסה סודי ספציפי.
כדי לשמור את השינויים, לוחצים על עדכון.
Cloud Build שומר את אסימוני הגישה החדשים כגרסה האחרונה של הסוד ב-Secret Manager.