אפשר להתחיל גרסאות build אוטומטיות באמצעות טריגרים של Jenkins ו-webhooks של Secure Source Manager.
התפקידים הנדרשים
כדי לקבל את ההרשאות שדרושות ליצירת טריגרים של בנייה ב-Jenkins, צריך לבקש מהאדמין להקצות לכם את תפקידי ה-IAM הבאים:
- אדמין של מאגר Secure Source Manager (
roles/securesourcemanager.repoAdmin) במאגר - Secure Source Manager Instance Accessor (
roles/securesourcemanager.instanceAccessor) במופע Secure Source Manager
להסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.
יכול להיות שאפשר לקבל את ההרשאות הנדרשות גם באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש.
במאמרים בקרת גישה באמצעות IAM והענקת גישה של משתמשים למופע מוסבר איך נותנים תפקידים ב-Secure Source Manager.
הגדרת טריגר webhook
Jenkins משתמש בפלאגינים של טריגרים לפיתוח גרסת Build כדי להפעיל אוטומציה של CI/CD. אפשר להגדיר טריגרים שיאזינו לאירועים נכנסים, למשל כששולחים קומיט חדש למאגר או כשמתחילים בקשת משיכה, ואז יבצעו אוטומטית בנייה כשאירועים חדשים יגיעו. אפשר גם להגדיר טריגרים כדי ליצור קוד בכל שינוי במאגר קוד המקור, או רק בשינויים שתואמים לקריטריונים מסוימים.
כדי להגדיר טריגר כללי של Jenkins webhook:
מתקינים את Git Plugin, SSH Credential Plugin ו-Generic Webhook Trigger Plugin בשרת Jenkins.
יוצרים זוג מפתחות SSH תקין בשרת Jenkins. מנהל המקורות המאובטח תומך רק במפתחות מסוג RSA.
כדי להוסיף את הדומיין של מופע Secure Source Manager לקובץ
known_hostsשל שרת Jenkins SSH, מריצים את הפקודה הבאה:ssh -t git@INSTANCE_ID-INSTANCE_PROJECT_NUMBER-ssh.us-central1.sourcemanager.devכאשר:
- INSTANCE_ID הוא השם של מופע Secure Source Manager.
- INSTANCE_PROJECT_NUMBER הוא מספר הפרויקט של מופע Secure Source Manager. במאמר זיהוי פרויקטים מוסבר איפה אפשר למצוא את מספר הפרויקט.
לדוגמה, הפקודה הבאה מוסיפה את דומיין המופע של מופע בשם
prod-test-instanceעם מספר פרויקט123456789.ssh -t git@prod-test-instance-123456789-ssh.us-central1.sourcemanager.devמשיבים
yesכדי להוסיף את דומיין המופע לרשימת המארחים המוכרים.בדף Manage Credentials ב-Jenkins:
- בוחרים באפשרות שם משתמש SSH עם מפתח פרטי.
- מדביקים את המפתח הפרטי של SSH של שרת Jenkins.
- בתפריט הנפתח סוג, ממלאים את שאר השדות לפי הצורך.
לוחצים על יצירה.
בממשק האינטרנט של Jenkins, יוצרים משימת Jenkins חדשה.
בדף ההגדרות של משימת Jenkins, בקטע Source Code Management, בוחרים באפשרות Git.
בקטע Git, מדביקים את כתובת ה-URL של מאגר ה-SSH של Secure Source Manager ככתובת ה-URL של המאגר, מזינים את ענפי הבנייה (למשל
*/main) ובוחרים את פרטי הכניסה של מפתח ה-SSH הפרטי השמורים שהוספתם קודם בדף Manage Credentials.בקטע Build Triggers (יצירת טריגרים), בוחרים באפשרות Generic Webhook Trigger (טריגר כללי של Webhook).
אפשר להוסיף אסימון כדי שהג'וב יופעל רק אם האסימון הזה יסופק בזמן ההפעלה. כדי להוסיף טוקן, בקטע Generic Webhook Trigger (טריגר כללי של Webhook), אפשר להזין טוקן בשדה Token (טוקן).
בקטע Build (בנייה), מציינים סקריפט בנייה שרוצים להשתמש בו למשימת Jenkins הזו. לדוגמה, אפשר להריץ את הפקודה
cat README.mdכדי להדפיס את התוכן של README.md.לוחצים על שמירה כדי ליצור את משימת Jenkins.
הגדרה של חשבון שירות והענקת ההרשאות הנדרשות
אם עדיין אין לכם חשבון שירות שבו אתם רוצים להשתמש, צרו חשבון שירות.
חשוב לוודא שיש לכם הרשאה מסוג
iam.serviceAccounts.actAsבחשבון השירות. ההרשאה הזו היא חלק מהתפקיד 'משתמש בחשבון שירות' (roles/iam.serviceAccountUser).בממשק האינטרנט של Secure Source Manager, לוחצים על התפריט אפשרויות נוספות.
לוחצים על מפתחות SSH של חשבון שירות. נפתח הדף Service account SSH keys ומוצגת רשימה של כל המפתחות הקיימים שהוספתם.
לוחצים על הוספת מפתח.
בדף Add SSH key (הוספת מפתח SSH), מזינים את הערכים הבאים של המפתח:
חשבון שירות: כתובת האימייל בחשבון השירות שרוצים להשתמש בו עם מפתח ה-SSH בפורמט
SA_NAME@PROJECT_ID.iam.gserviceaccount.comכאשר:
-
SA_NAMEהוא השם של חשבון השירות. -
PROJECT_IDהוא מזהה הפרויקט שבו נוצר חשבון השירות.
-
מפתח ציבורי SSH: מפתח ה-SSH הציבורי של Jenkins.
מתן הרשאות לסוכן השירות של Secure Source Manager
אם חשבון השירות לא נמצא באותו פרויקט כמו המופע של Secure Source Manager, צריך גם להקצות לסוכן השירות של Secure Source Manager את התפקיד 'יצירת אסימונים בחשבון שירות' (roles/iam.serviceAccountTokenCreator) או את ההרשאה iam.serviceAccounts.signJwt.
אם חשבון השירות נמצא באותו פרויקט כמו המופע של Secure Source Manager, אפשר לדלג אל הקצאת תפקיד מאגר לחשבון השירות.
מריצים את הפקודה הבאה כדי לקבל את מדיניות ה-IAM הקיימת של חשבון השירות:
gcloud iam service-accounts get-iam-policy SERVICE_ACCOUNT \ --format jsonכאשר SERVICE_ACCOUNT הוא חשבון השירות שבו רוצים להשתמש. הפורמט של החשבון צריך להיות מזהה מספרי של חשבון שירות או כתובת אימייל, כמו
123456789876543212345אוmy-iam-account@somedomain.com.הפלט כולל את כל הקישורים הקיימים, או, אם אין קישורים, את הערך
etagשדומה לזה:{ "etag": "BwUjHYKJUiQ=" }מעתיקים את הפלט לקובץ חדש בשם
policy.json.כדי להעניק לסוכן השירות של Secure Source Manager את התפקיד 'יצירת אסימונים בחשבון שירות' (
roles/iam.ServiceAccountTokenCreator), משנים אתpolicy.jsonומוסיפים את השורה הבאה:{ "role": "roles/iam.serviceAccountTokenCreator", "members": [ "serviceAccount:service-INSTANCE_PROJECT_NUMBER@gcp-sa-sourcemanager.iam.gserviceaccount.com" ] }כאשר
INSTANCE_PROJECT_NUMBERהוא מספר הפרויקט של המכונה של Secure Source Manager.מריצים את הפקודה הבאה כדי להחליף את מדיניות ה-IAM הקיימת של חשבון השירות:
gcloud iam service-accounts set-iam-policy SERVICE_ACCOUNT POLICY_FILEמחליפים את מה שכתוב בשדות הבאים:
- SERVICE_ACCOUNT במזהה או בכתובת האימייל של חשבון השירות.
- POLICY_FILE במיקום ובשם של קובץ בפורמט JSON, כולל המדיניות החדשה.
הענקת תפקיד במאגר לחשבון השירות
- בממשק האינטרנט של Secure Source Manager, עוברים למאגר שרוצים להעניק בו הרשאות לחשבון השירות.
- לוחצים על הכרטיסייה Permissions.
- לוחצים על הוספת משתמשים.
- בשדה Add principal, מזינים את כתובת האימייל של חשבון השירות.
- בתפריט הנפתח Role (תפקיד), בוחרים באפשרות Secure Source Manager Repository Reader (קריאת מאגר Secure Source Manager).
מריצים את הפקודה הבאה כדי להקצות לחשבון השירות את התפקיד
securesourcemanager.instanceAccessor:gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:SA_EMAIL \ --role=roles/securesourcemanager.instanceAccessorמחליפים את מה שכתוב בשדות הבאים:
-
PROJECT_IDבמזהה הפרויקט של מופע Secure Source Manager. -
SA_EMAILמחליפים בכתובת האימייל בחשבון השירות.
-
הגדרת webhook
- בממשק האינטרנט של Secure Source Manager, עוברים אל המאגר שרוצים ליצור בשבילו webhook.
- לוחצים על הגדרות.
- לוחצים על Webhooks (הודעות webhook) ואז על Add webhook (הוספת הודעת webhook).
בשדה Hook ID (מזהה ה-webhook), מזינים מזהה ל-webhook.
בשדה כתובת URL ליעד, מזינים את כתובת ה-URL של הטריגר של Jenkins.
אם השתמשתם באסימון האופציונלי כשקבעתם את ההגדרות של הטריגר של Jenkins, כתובת ה-URL של הטריגר של Jenkins תכיל את האסימון הזה בסוף. כדי למנוע חשיפה של האסימון, מסירים אותו מסוף כתובת היעד ומעתיקים אותו לשדה Sensitive Query String (מחרוזת שאילתה רגישה).
כדי למצוא את האסימון בכתובת ה-URL של הטריגר, מחפשים את הטקסט שמתחיל ב-
token=לדוגמה, אם כתובת ה-URL שלכם דומה לכתובת הבאה:
https://jenkins-server.com/generic-webhook-trigger/invoke?token=jenkins-job1מעתיקים את החלק שמתחיל בסימן השאלה
?token=jenkins-job1ומסירים אותו מהשדה כתובת יעד. אחר כך מסירים את סימן השאלה הראשוני, מעבירים את החלק שנותרtoken=jenkins-job1לשדה מחרוזת שאילתה רגישה.בקטע הפעלה ב, בוחרים באחת מהאפשרויות הבאות:
- Push: כדי להפעיל את הטריגר כשמתבצעת פעולת push למאגר.
- Pull request state changed: כדי להפעיל את הטריגר כשמצב בקשת המיזוג משתנה.
אם בחרתם באפשרות Push, תוכלו להזין רשימת היתרים לאירועי Push בשדה Branch filter.
בשדה Branch filter נעשה שימוש בתבנית glob, ורק פעולות בענפים שתואמים לתבנית יפעילו טריגר לפיתוח גרסת Build. אם השדה ריק או
*, מדווחים אירועי push לכל הענפים.לוחצים על Add webhook (הוספת webhook).
התגובה לפעולה מאתר אחר (webhook) מוצגת בדף Webhooks.
בדיקת ה-webhook
- בדף Webhooks (ווּבְּהוּקים) ב-Secure Source Manager, לוחצים על הווב-הוק שרוצים לבדוק.
גוללים לתחתית הדף ולוחצים על בדיקת מסירה.
אירוע מזויף נוסף לתור המסירה. יכול להיות שיחלפו כמה שניות עד שהיא תופיע בהיסטוריית המסירה.
אפשר גם להשתמש בפקודה
gitכדי לשלוח או למזג בקשת משיכה כדי לבדוק את ה-webhook.בפרויקט Jenkins, צופים ב-build שהופעל על ידי אירוע הבדיקה בBuild History.
אחרי ששולחים את משלוח הבדיקה הראשון, אפשר גם לראות את הבקשה ואת התגובה למשלוח הבדיקה בקטע Recent deliveries (משלוחים אחרונים) בדף של Secure Source Manager webhook.