במדריך הזה נסביר איך לנהל את התשתית כקוד באמצעות Terraform ו-Cloud Build, עם השיטה הפופולרית GitOps. את המונח GitOps טבעו במקור ב-Weaveworks, והעיקרון הראשי שלו הוא שימוש במאגר של Git לאחסון מצב הסביבה שרוצים. Terraform הוא כלי בקוד פתוח של HashiCorp שמאפשר ליצור, לשנות ולשפר בצורה חזויה את תשתית הענן באמצעות קוד. במדריך הזה נלמד איך נעזרים ב-Cloud Build, שירות Google Cloud אינטגרציה רציפה (CI), כדי ליישם אוטומטית מניפסטים של Terraform בסביבה שלכם.
המדריך מיועד למפתחים ולמפעילים שמחפשים דרך לבצע שינויים חזויים בתשתית באמצעות אסטרטגיה אלגנטית. הוא מתבסס על ההנחה שאתם מכירים את Google Cloudואת Linux.
בדוחות של State of DevOps מפורטות יכולות שמשפרות את הכנת התוכנות להפצה. במדריך הזה תלמדו על היכולות הבאות:
ארכיטקטורה
במדריך הזה אנחנו משתמשים בשיטות של GitOps לניהול פעולות של Terraform. שימו לב שהשתמשנו בהסתעפויות של Secure Source Manager – dev ו-prod – כדי לייצג את הסביבות בפועל. הסביבות האלה מוגדרות על ידי רשתות של ענן וירטואלי פרטי (VPC) – dev ו-prod, בהתאמה – בGoogle Cloud פרויקט.
התהליך מתחיל כשדוחפים את הקוד של Terraform להסתעפות dev או prod. במקרה הזה, מפעילים את Cloud Build ומיישמים מניפסטים של Terraform כדי להגיע למצב הרצוי בסביבה הרלוונטית.
מנגד, כשדוחפים קוד של Terraform לכל הסתעפות אחרת, למשל הסתעפות של מאפיין, Cloud Build פועל כדי לבצע את terraform plan אבל שום דבר לא מיושם על אף סביבה.
במקרה האידיאלי, המפתחים או המפעילים צריכים להציע הצעות לתשתית להסתעפות של פיתוח או תכונות, ואז לשלוח אותן באמצעות בקשות משיכה (pull requests). כך תוכלו לדון בשינויים האפשריים ולבדוק אותם עם אנשים אחרים ולהוסיף התחייבויות נוספות לפני שהשינויים ימוזגו להסתעפות הבסיסית.
אם הכול נראה בסדר, תצטרכו למזג קודם את השינויים עם ההסתעפות dev. המיזוג יפעיל את פריסת התשתית בסביבה של dev, ויאפשר לכם לבדוק אותה. אחרי שבדקתם ואתם בטוחים מה נפרס, תצטרכו למזג את ההסתעפות dev להסתעפות prod כדי להפעיל את התקנת התשתית בסביבה.
מטרות
- מגדירים את המאגר ואת מופע Secure Source Manager.
- הגדרת Terraform לאחסון מצבים בקטגוריות של Cloud Storage.
- מתן הרשאות לחשבון השירות ב-Cloud Build.
- חיבור של Cloud Build למאגר שלכם ב-Secure Source Manager.
- שינוי התצורה של הסביבה בסביבה נפרדת (feature branch).
- ליישם שינויים בסביבת הפיתוח.
- ליישם שינויים בסביבת הייצור.
עלויות
במסמך הזה משתמשים ברכיבים הבאים של Google Cloud, והשימוש בהם כרוך בתשלום:
כדי להעריך את ההוצאות בהתאם לתחזית השימוש שלכם, אתם יכולים להיעזר במחשבון העלויות.
כשמסיימים את המשימות שמתוארות במסמך הזה אפשר למחוק את המשאבים שיצרתם כדי להימנע מחיובים נוספים. מידע נוסף זמין בקטע הסרת המשאבים.
לפני שמתחילים
- נכנסים לחשבון Google Cloud . אם אתם משתמשים חדשים ב- Google Cloud, צרו חשבון כדי שתוכלו להעריך את הביצועים של המוצרים שלנו בתרחישים מהעולם האמיתי. לקוחות חדשים מקבלים בחינם גם קרדיט בשווי 300$ להרצה, לבדיקה ולפריסה של עומסי העבודה.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
במסוף Google Cloud , מפעילים את Cloud Shell.
בחלק התחתון של Google Cloud המסוף יתחיל סשן של Cloud Shell ותופיע הודעה של שורת הפקודה. Cloud Shell היא סביבת מעטפת שבה ה-CLI של Google Cloud מותקן ומוגדרים ערכים לפרויקט הקיים. הסשן יופעל תוך כמה שניות.
- מאתרים ב-Cloud Shell את המזהה של הפרויקט שבחרתם:
אם הפקודה לא מחזירה את מזהה הפרויקט, מגדירים את Cloud Shell להשתמש בפרויקט. מחליפים אתgcloud config get-value project
PROJECT_IDבמזהה הפרויקט.gcloud config set project PROJECT_ID
- מפעילים את ממשקי ה-API הנדרשים:
השלב הזה עשוי להימשך כמה דקות.gcloud services enable cloudbuild.googleapis.com compute.googleapis.com securesourcemanager.googleapis.com
- אם עדיין לא השתמשתם ב-Git ב-Cloud Shell, תצטרכו להגדיר את Git עם השם וכתובת האימייל שלכם:
המידע הזה ישמש את Git לזיהוי כשאתם יוצרים התחייבויות ב-Cloud Shell.git config --global user.email "YOUR_EMAIL_ADDRESS" git config --global user.name "YOUR_NAME"
הגדרת מאגר Secure Source Manager
במדריך הזה נשתמש במאגר אחד של Secure Source Manager כדי להגדיר את תשתית הענן שלכם. מתזמרים את התשתית הזו באמצעות הסתעפויות שונות שמתאימות לסביבות השונות:
- ההסתעפות
devכוללת את השינויים האחרונים שבוצעו בסביבת הפיתוח. - ההסתעפות
prodכוללת את השינויים האחרונים שבוצעו בסביבת הייצור. - ענפים של תכונות, בדומה ל-
feature_x, משמשים לביצוע שינויים לפני שמעבירים אותם לענפיםdevאוprod.
בעזרת התשתית הזו תמיד יהיה לכם מאגר להשוואה, כדי שתוכלו לדעת מה ההגדרה שצפויה להיות בכל סביבה, וגם תוכלו למזג שינויים חדשים בסביבה dev לפני שאתם מציעים אותם. אחר כך, כדי ליישם את השינויים, תוכלו למזג את ההסתעפות dev עם ההסתעפות הבאה prod.
- יוצרים מאגר ריק ב-Secure Source Manager – לא מאתחלים את המאגר.
מריצים את הפקודה הבאה כדי להוסיף את כלי העזר לאימות של Secure Source Manager ל-
git configהגלובלי:git config --global credential.'https://*.*.sourcemanager.dev'.helper gcloud.shעוזר האימות משתמש ב-CLI של gcloud כדי לאחזר את פרטי הכניסה שלכםGoogle Cloud כשמשתמשים בפקודות Git עם Secure Source Manager.
כדי לבצע אימות מחדש אחרי ההגדרה הראשונית של פרטי הכניסה, מריצים ב-CLI של gcloud את הפקודה הבאה:
gcloud auth loginמשכפלים את המאגר solutions-terraform-cloudbuild-gitops אל מעטפת מקומית או סביבת עבודה:
git clone https://github.com/GoogleCloudPlatform/solutions-terraform-cloudbuild-gitops.gitמוסיפים את המאגר של Secure Source Manager כמאגר במעלה הזרם.
git remote add google HTTPS_REPO_URLכאשר
HTTPS_REP_URLהיא כתובת ה-URL של ה-HTTPS למאגר Secure Source Manager. כתובת ה-URL מופיעה בחלק העליון של דף המאגר בממשק האינטרנט של Secure Source Manager.יוצרים את הענף
devועוברים אליו.git checkout devמעבירים את המאגר המשוכפל למאגר שלכם באמצעות הפקודה הבאה:
git push -u google --allחוזרים על שני השלבים הקודמים עבור הענף
prod.
כך בנוי הקוד במאגר הזה:
התיקייה
environments/מכילה תיקיות משנה שמייצגות סביבות, כמוdevאוprod, כדי לאפשר הפרדה לוגית בין עומסי עבודה (workloads) בשלבים שונים של ותק, פיתוח וייצור. מומלץ להגדיר את הסביבות האלה בצורה דומה ככל האפשר, אבל לכל תיקיית משנה יכולות להיות הגדרות ייחודיות משלה ב-Terraform, לפי הצורך.התיקייה
modules/מכילה מודולים מוטבעים של Terraform, שמייצגים קבוצות לוגיות של מקורות קשורים, ומשמשים לשיתוף הקוד בסביבות השונות.cloudbuild.yamlהוא קובץ תצורה של build שמכיל הוראות ל-Cloud Build, כמו סדרת פעולות לביצוע משימות. הקובץ הזה מציין שההפעלה מותנית בהתאם להסתעפות של Cloud Build שממנה הקוד נלקח. לדוגמה:להסתעפויות
devו-prod, מבצעים את הפעולות הבאות:terraform initterraform planterraform apply
בכל הסתעפות אחרת, מבצעים את הפעולות הבאות:
terraform initבכלenvironmentsתיקיות המשנהterraform planבכלenvironmentsתיקיות המשנה
כדי לוודא שהשינויים המוצעים מתאימים לכל סביבה, terraform init ו-terraform plan פועלים בכל environments תיקיות המשנה. כך למשל, לפני מיזוג בקשת המשיכה תוכלו לבדוק את התוכניות כדי לוודא שלא ניתנה גישה לישות לא מורשית.
שינוי קובץ תצורת ה-build
כדי שקובץ התצורה לדוגמה של ה-build יפעל עם Secure Source Manager, צריך לבצע את השינויים הבאים:
- מוסיפים שלב לשיבוט המאגר.
- מוסיפים שלב כדי לקבל את שם הענף ולהקצות אותו למשתנה.
עורכים את קובץ תצורת ה-build בענף dev:
עוברים לענף
dev:git checkout devפותחים את הקובץ
cloudbuild.yamlומחליפים את התוכן שלו בתוכן הבא:# Copyright 2019 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # https://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. steps: - id: 'clone repository' name: 'gcr.io/cloud-builders/git' args: - clone - '${_REPO_URL}' - . - id: 'branch name' name: gcr.io/cloud-builders/git entrypoint: 'sh' args: - '-c' - | branch=$(basename "$_REF") git checkout ${branch} echo "***********************" git branch --show-current echo "***********************" - id: 'tf init' name: 'hashicorp/terraform:1.0.0' entrypoint: 'sh' args: - '-c' - | branch=$(basename "$_REF") if [ -d "environments/${branch}/" ]; then cd environments/${branch} terraform init else for dir in environments/*/ do cd ${dir} env=${dir%*/} env=${env#*/} echo "" echo "*************** TERRAFORM INIT ******************" echo "******* At environment: ${env} ********" echo "*************************************************" terraform init || exit 1 cd ../../ done fi - id: 'tf plan' name: 'hashicorp/terraform:1.0.0' entrypoint: 'sh' args: - '-c' - | branch=$(basename "$_REF") if [ -d "environments/${branch}/" ]; then cd environments/${branch} terraform plan else for dir in environments/*/ do cd ${dir} env=${dir%*/} env=${env#*/} echo "" echo "*************** TERRAFOM PLAN ******************" echo "******* At environment: ${env} ********" echo "*************************************************" terraform plan || exit 1 cd ../../ done fi - id: 'tf apply' name: 'hashicorp/terraform:1.0.0' entrypoint: 'sh' args: - '-c' - | branch=$(basename "$_REF") if [ -d "environments/${branch}/" ]; then cd environments/${branch} terraform apply -auto-approve else echo "***************************** SKIPPING APPLYING *******************************" echo "Branch '${branch}' does not represent an official environment." echo "*******************************************************************************" fi
בודקים שהקובץ שונה.
git statusשומרים ודוחפים את השינויים:
git add --all git commit -m "Modify build config file." git push google devפותחים בקשת משיכה כדי לקדם במהירות את השינויים שלכם לענף
prod.- בממשק האינטרנט של Secure Source Manager, עוברים למאגר.
- לוחצים על הכרטיסייה Pull requests.
- לוחצים על New pull request.
- בשדה merge into:, בוחרים את הענף
prod. - בשדה pull from:, בוחרים את הענף
dev. - בודקים את השינויים ולוחצים על New pull request (בקשת מיזוג חדשה).
- לוחצים על Create pull request.
- לוחצים על Merge pull request.
לוחצים שוב על Merge pull request.
השינויים ימוזגו עם הענף
prod.
הגדרת Terraform לאחסון מצבים בקטגוריות של Cloud Storage
כברירת מחדל, המצבים של Terraform נשמרים מקומית בקובץ בשם terraform.tfstate. ברירת המחדל הזו עלולה להקשות על צוותים להשתמש ב-Terraform, במיוחד כשהרבה אנשים משתמשים ב-Terraform במקביל, וכל מכונה רואה את התשתית הקיימת בדרך משלה.
כדי למנוע בעיות כאלה, מוסבר כאן איך להגדיר מצב של שמירה ביעד מרוחק, שמצביע לקטגוריה של Cloud Storage. מצב של שמירה ביעד מרוחק הוא מאפיין של קצוות עורפיים, ובמדריך הזה הוא מוגדר בקבצים מסוג backend.tf. לדוגמה:
בשלבים הבאים תיצרו קטגוריה של Cloud Storage ותשנו כמה קבצים כדי להצביע על הקטגוריה החדשה ועל הפרויקט שלכם Google Cloud .
יוצרים את הקטגוריה של Cloud Storage ב-Cloud Shell:
PROJECT_ID=$(gcloud config get-value project) gcloud storage buckets create gs://${PROJECT_ID}-tfstateכדי לשמור את היסטוריית הפריסות, צריך להפעיל את החלוקה הגרסאות של האובייקטים:
gcloud storage buckets update gs://${PROJECT_ID}-tfstate --versioningהפעלת החלוקה לגרסאות של אובייקטים מייקרת את עלויות השימוש באחסון, אבל אפשר להוזיל אותן על ידי הגדרת ניהול מחזור החיים של האובייקטים כדי למחוק גרסאות ישנות של מצבים.
יוצרים ענף
cloud-storage-bucketחדש כדי לבצע בו את השינויים:cd ~/solutions-terraform-cloudbuild-gitops git checkout -b cloud-storage-bucketמחליפים את ה-placeholder הזה
PROJECT_IDבמזהה הפרויקט בקובץterraform.tfvarsוגם בקובץbackend.tf:sed -i s/PROJECT_ID/$PROJECT_ID/g environments/*/terraform.tfvars sed -i s/PROJECT_ID/$PROJECT_ID/g environments/*/backend.tf
ב-OS X או ב-macOS, יכול להיות שתצטרכו להוסיף שתי מירכאות (
"") אחריsed -i, באופן הבא:sed -i "" s/PROJECT_ID/$PROJECT_ID/g environments/*/terraform.tfvars sed -i "" s/PROJECT_ID/$PROJECT_ID/g environments/*/backend.tf
בודקים אם כל הקבצים עודכנו:
git statusהפלט אמור להיראות כך:
On branch cloud-storage-bucket Changes not staged for commit: (use "git add
..." to update what will be committed) (use "git restore ..." to discard changes in working directory) modified: environments/dev/backend.tf modified: environments/dev/terraform.tfvars modified: environments/prod/backend.tf modified: environments/prod/terraform.tfvars no changes added to commit (use "git add" and/or "git commit -a") שומרים ודוחפים את השינויים:
git add --all git commit -m "Update project IDs and buckets" git push google -u cloud-storage-bucketהענף החדש
cloud-storage-bucketנדחף למאגר.כדי למזג את השינויים ב-
cloud-storage-bucketעם הענפיםdevו-prod, פותחים בקשות מיזוג לכל ענף ושולחים אותן.
מתן הרשאות לחשבון השירות ב-Cloud Build
כדי לאפשר לחשבון השירות של Cloud Build להריץ סקריפטים של Terraform לניהול משאבי Google Cloud , צריך לתת לו את הרשאת הגישה המתאימה לפרויקט. כדי לשמור על הסבר פשוט, במדריך נתנו גישה לעורך הפרויקטים. בסביבות ייצור, חשוב להקפיד על נוהלי אבטחת IT של החברה שלכם, ובדרך כלל לתת הרשאות גישה מינימליות.
כדי למצוא את כתובת האימייל בחשבון השירות ב-Cloud Build, עוברים לדף Settings בדף Cloud Build.
מעתיקים את הערך של כתובת האימייל בחשבון השירות.
נותנים לחשבון השירות ב-Cloud Build את הרשאת הגישה הנדרשת:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member serviceAccount:CLOUDBUILD_SA --role roles/editorמחליפים את מה שכתוב בשדות הבאים:
- PROJECT_ID במזהה הפרויקט.
- CLOUDBUILD_SA מחליפים בכתובת האימייל של חשבון השירות ב-Cloud Build.
חיבור ל-Cloud Build
כדי להפעיל את Cloud Build כשמעבירים בדחיפה לכל ענף, צריך להגדיר webhook של Secure Source Manager. קובץ הגדרות ה-build יבדוק את שם הענף כדי לקבוע אם צריך לבצע שינויים בסביבות dev או prod.
מפעילים ומגדירים את Cloud Build בפרויקט.
פותחים את הדף Triggers במסוף Google Cloud .
בוחרים את הפרויקט מהתפריט הנפתח לבחירת פרויקט בחלק העליון של הדף.
לוחצים על פתיחה.
לוחצים על Create trigger (יצירת ביטוי להפעלה).
מזינים את הגדרות הטריגר הבאות:
Name (שם):
trigger-on-pushאזור: בוחרים את האזור של הטריגר. אם בקובץ הגדרות ה-build שמשויך לטריגר מוגדר מאגר פרטי, האזור שבוחרים לטריגר צריך להיות זהה לאזור של המאגר הפרטי.
אם בוחרים באפשרות
globalכאזור, Cloud Build משתמש באזור שצוין בקובץ הגדרות ה-build כדי להריץ את ה-build. האזור הזה יכול להיות האזור של המאגר הפרטי, אם מציינים מאגר פרטי בקובץ תצורת build, או מאגר ברירת המחדל הגלובלי אם לא מציינים מאגר פרטי.תיאור (אופציונלי): מזינים תיאור להפעלה.
אירוע: בוחרים באפשרות אירוע של פעולה מאתר אחר (webhook) כאירוע המאגר להפעלת הטריגר.
אם Secret Manager לא מותקן, תופיע בקשה להפעיל אותו.
Webhook URL (כתובת ה-URL של ה-webhook): בוחרים באחת מהאפשרויות הבאות:
- שימוש בסוד חדש אם רוצים ליצור סוד חדש באמצעות Cloud Build. לוחצים על יצירת Secret כדי ליצור את ה-Secret.
- משתמשים בסוד קיים או יוצרים סוד משלכם אם רוצים להשתמש בסוד קיים. מזינים את הסוד ואת הגרסה בתיבות הבחירה בתפריט הנפתח.
אם משתמשים בסוד קיים, יכול להיות שיהיה צורך להקצות ידנית את התפקיד Secret Manager Secret Accessor לסוכן השירות של Cloud Build
service-PROJECT_NUMBER@gcp-sa-cloudbuild.iam.gserviceaccount.com.מידע נוסף זמין במאמר הענקת תפקיד לסוכן השירות של Cloud Build.
לוחצים על הצגת תצוגה מקדימה של כתובת ה-URL ורושמים את כתובת ה-URL. תצטרכו את כתובת ה-URL הזו כדי להגדיר את ה-webhook ב-Secure Source Manager.
- Configuration (הגדרה): בType (סוג) בוחרים באפשרות Cloud Build configuration file (YAML or JSON) (קובץ הגדרות של Cloud Build (YAML או JSON)), ובLocation (מיקום) בוחרים באפשרות Inline (בתוך השורה).
לוחצים על הלחצן Open Editor (פתיחת העורך) כדי לערוך את קובץ הגדרות ה-build.
מעתיקים את התוכן של קובץ
cloudbuild.yamlלעורך.כמו שהסברנו קודם, לצינור עיבוד הנתונים האלה יש התנהגויות שונות בהתאם להסתעפות שמאוחזרת. ה-build בודק אם המשתנה
${branch}תואם לתיקייה כלשהי בסביבה. אם כן, Cloud Build יריץ אתterraform planעבור הסביבה הזו. אם לא, Cloud Build יריץ אתterraform planלכל הסביבות כדי לוודא שהשינוי המוצע מתאים לכולם. אם אחת מהתוכניות לא מצליחה לפעול, ה-build ייכשל.- id: 'tf plan' name: 'hashicorp/terraform:1.0.0' entrypoint: 'sh' args: - '-c' - | branch=$(basename "$_REF") if [ -d "environments/${branch}/" ]; then cd environments/${branch} terraform plan else for dir in environments/*/ do cd ${dir} env=${dir%*/} env=${env#*/} echo "" echo "*************** TERRAFOM PLAN ******************" echo "******* At environment: ${env} ********" echo "*************************************************" terraform plan || exit 1 cd ../../ done fi
הפקודה
terraform applyפועלת להסתעפויות בסביבה, אבל בכל מקרה אחר מתעלמים ממנה.לוחצים על + הוספת משתנה ומוסיפים את שני משתני ההחלפה הבאים:
- משתנה:
_REPO_URL, ערך:$(body.repository.clone_url) - משתנה:
_REF, ערך:$(body.ref)
- משתנה:
לוחצים על יצירה.
הגדרת webhook ב-Secure Source Manager
יוצרים webhook כדי להפעיל בנייה כשמבצעים push לענפים dev או prod.
- בממשק האינטרנט של Secure Source Manager, עוברים אל המאגר שרוצים ליצור בשבילו webhook.
- לוחצים על הגדרות.
- לוחצים על Webhooks (הודעות webhook) ואז על Add webhook (הוספת הודעת webhook).
בשדה Hook ID (מזהה ה-webhook), מזינים מזהה ל-webhook.
בשדה כתובת URL של יעד, מזינים את כתובת ה-URL של ה-Webhook שהעתקתם כשהגדרתם טריגר של Webhook ב-Cloud Build.
כדי למצוא את כתובת ה-Webhook URL:
פותחים את הדף Triggers במסוף Google Cloud .
לוחצים על הטריגר.
בקטע Webhook URL (כתובת URL של webhook), לוחצים על Show URL preview (הצגת תצוגה מקדימה של כתובת ה-URL) ומעתיקים את כתובת ה-URL.
כתובת ה-URL של ה-webhook מכילה את הערכים של המפתח והסוד שהזנתם כש יצרתם את הטריגר של Cloud Build. כדי למנוע דליפה של הערכים האלה, צריך להסיר אותם מסוף כתובת היעד ולהעתיק אותם לשדה מחרוזת שאילתה רגישה.
כדי למצוא את המפתח והסוד בכתובת ה-URL של ה-webhook, מחפשים את הטקסט שמתחיל ב-
key=לדוגמה, אם כתובת ה-URL היא:
https://cloudbuild.googleapis.com/v1/projects/my-project/triggers/test-trigger:webhook?key=eitIfKhYnv0LrkdsyHqIros8fbsheKRIslfsdngf&secret=Hello%20Secret%20Managerמעתיקים את החלק שמתחיל בסימן השאלה
?key=...מהשדה כתובת יעד ומסירים אותו. אחר כך מסירים את סימן השאלה הראשוני, ומעבירים את החלק שנותרkey=...לשדה מחרוזת שאילתה רגישה.לוחצים על Add webhook (הוספת webhook).
התגובה לפעולה מאתר אחר (webhook) מוצגת בדף Webhooks.
שינוי ההגדרה של הסביבה בהסתעפות של פיצ'ר חדש
חשוב לוודא שנמצאים בהסתעפות
dev:cd ~/solutions-terraform-cloudbuild-gitops git checkout devמשיכת השינויים האחרונים:
git pullיוצרים סביבה נפרדת (branch) בשם
bug-fixכדי לשנות את הגדרות הסביבה.git checkout -b bug-fixפותחים את
modules/firewall/main.tfכדי לערוך.מתקנים את שגיאת ההקלדה
"http-server2"בשדהtarget_tagsבשורה 30.הערך חייב להיות
"http-server".שומרים ודוחפים את השינויים:
git add --all git commit -m "Fix typo." git push google -u bug-fixפותחים את הדף History של Cloud Build במסוף Google Cloud :
לוחצים על Build כדי לראות מידע נוסף, כולל הפלט של
terraform plan.
שימו לב שהמשימה ב-Cloud Build הריצה את צינור עיבוד הנתונים שהוגדר בקובץ cloudbuild.yaml. כמו שהסברנו קודם, לצינור עיבוד הנתונים האלה יש התנהגויות שונות בהתאם להסתעפות שמאוחזרת. ה-build בודק אם המשתנה ${branch} תואם לתיקייה כלשהי בסביבה. אם כן, Cloud Build יריץ את terraform plan עבור הסביבה הזו.
אם לא, Cloud Build יריץ את terraform plan לכל הסביבות כדי לוודא שהשינוי המוצע מתאים לכולם. אם אחת מהתוכניות לא מצליחה לפעול, ה-build ייכשל.
- id: 'tf plan' name: 'hashicorp/terraform:1.0.0' entrypoint: 'sh' args: - '-c' - | branch=$(basename "$_REF") if [ -d "environments/${branch}/" ]; then cd environments/${branch} terraform plan else for dir in environments/*/ do cd ${dir} env=${dir%*/} env=${env#*/} echo "" echo "*************** TERRAFOM PLAN ******************" echo "******* At environment: ${env} ********" echo "*************************************************" terraform plan || exit 1 cd ../../ done fi
באותו האופן, הפקודה terraform apply פועלת להסתעפויות בסביבה, אבל בכל מקרה אחר מתעלמים ממנה. בחלק הזה שלחתם בקשה לשינוי קוד להסתעפות חדשה, אז לא בוצעו פריסות בתשתית בפרויקט שלכם ב- Google Cloud .
יישום השינויים בסביבת הפיתוח
זה הזמן ליישם את המצב שאתם רוצים בסביבת dev.
- בממשק האינטרנט של Secure Source Manager, עוברים למאגר.
- לוחצים על New pull request (בקשת מיזוג חדשה).
- בשדה merge into:, בוחרים את הענף
dev. - בשדה pull from:, בוחרים את הענף
bug-fix. - לוחצים על New pull request.
- לוחצים על Create pull request.
- לוחצים על Merge pull request (מיזוג בקשת משיכה) ואז שוב על Merge pull request (מיזוג בקשת משיכה).
בודקים שבוצעה הפעלה חדשה של Cloud Build:
פותחים את ה-build ובודקים את היומנים.
בסיום ה-build יופיע משהו כזה:
Step #3 - "tf apply": external_ip = EXTERNAL_IP_VALUE Step #3 - "tf apply": firewall_rule = dev-allow-http Step #3 - "tf apply": instance_name = dev-apache2-instance Step #3 - "tf apply": network = dev Step #3 - "tf apply": subnet = dev-subnet-01
מעתיקים את
EXTERNAL_IP_VALUEופותחים את הכתובת בדפדפן אינטרנט.http://EXTERNAL_IP_VALUE
יכול להיות שייקח למכונה הווירטואלית כמה שניות לפעול ולהחיל את כלל חומת האש. בסוף אתם אמורים לראות Environment: dev בדפדפן האינטרנט.
עוברים אל Cloud Storage:
בוחרים את הפרויקט הרצוי.
לוחצים על הקטגוריה של Cloud Storage שבה מאוחסן מצב Terraform. שם הקטגוריה נראה כך:
PROJECT_ID-tfstate
לוחצים על env ואז על dev כדי לראות את קובץ המצב של Terraform.
יישום השינויים בסביבת הייצור
עכשיו, אחרי שבדקתם את סביבת הפיתוח, אתם יכולים להעביר את קוד התשתית לסביבת הייצור.
- בממשק האינטרנט של Secure Source Manager, עוברים למאגר.
- לוחצים על הכרטיסייה Pull requests.
- לוחצים על New pull request.
- בתור merge into:, בוחרים את הענף
prodבמאגר. - בקטע pull from:, בוחרים את הענף
devבמאגר. - לוחצים על New pull request.
- ממלאים שם בשדה title, למשל "Promoting networking changes", ולוחצים על Create pull request.
בודקים את השינויים המוצעים ולוחצים על Merge pull request.
התאריך וכתובת ה-URL של המאגר מתווספים לשדה התגובה.
לוחצים שוב על Merge pull request כדי לאשר את הפעולה.
פותחים את הדף Build History במסוף Google Cloud כדי לראות את השינויים שבוצעו בסביבת הייצור:
מחכים לסיום ה-build ובודקים את היומנים.
בסוף היומנים, אתם אמורים לראות משהו כזה:
Step #3 - "tf apply": external_ip = EXTERNAL_IP_VALUE Step #3 - "tf apply": firewall_rule = prod-allow-http Step #3 - "tf apply": instance_name = prod-apache2-instance Step #3 - "tf apply": network = prod Step #3 - "tf apply": subnet = prod-subnet-01
מעתיקים את
EXTERNAL_IP_VALUEופותחים את הכתובת בדפדפן אינטרנט.http://EXTERNAL_IP_VALUE
יכול להיות שייקח למכונה הווירטואלית כמה שניות לפעול ולהחיל את כלל חומת האש. בסוף אתם אמורים לראות Environment: prod בדפדפן האינטרנט.
עוברים אל Cloud Storage:
בוחרים את הפרויקט הרצוי.
לוחצים על הקטגוריה של Cloud Storage שבה מאוחסן מצב Terraform. שם הקטגוריה נראה כך:
PROJECT_ID-tfstate
לוחצים על env ואז על prod כדי לראות את קובץ המצב של Terraform.
זהו! הגדרתם צינור עיבוד נתונים ללא שרת כקוד ב-Cloud Build. בעתיד, מומלץ לנסות את הפעולות הבאות:
- הוספת פריסות לתרחישים שונים לדוגמה.
- יצירת סביבות נוספות בהתאם לצרכים שלכם.
- שימוש בפרויקט לכל סביבה ולא בענן ווירטואלי פרטי (VPC) לכל סביבה.
הסרת המשאבים
בסיום המדריך, חשוב לפנות את המשאבים שיצרתם ב-Google Cloud כדי שלא תחויבו עליהם בעתיד.
מחיקת הפרויקט
- במסוף Google Cloud , נכנסים לדף Manage resources.
- ברשימת הפרויקטים, בוחרים את הפרויקט שרוצים למחוק ולוחצים על Delete.
- כדי למחוק את הפרויקט, כותבים את מזהה הפרויקט בתיבת הדו-שיח ולוחצים על Shut down.
המאמרים הבאים
- כדאי להשתמש בתבניות של Cloud Foundation Toolkit כדי ליצור במהירות ב-Google Cloudתשתיות לארגון שתוכלו לשכפל.
- תוכלו לצפות בהרצאה Repeatable Google Cloud Environments at Scale With Cloud Build Infra-As-Code Pipelines מ-Next' 19 בקשר לתהליך העבודה של GitOps שתואר במדריך הזה.
- מומלץ לקרוא את המדריך בנושא פיתוח רציף (continuous delivery) בסגנון GitOps באמצעות Cloud Build.
- כדאי לבדוק את התכונות המתקדמות יותר ב-Cloud Build: הגדרת סדר השלבים של ה-build, יצירה, בדיקה ופריסה של ארטיפקטים, וגם יצירת שלבים מותאמים אישית של build.
- תוכלו לקרוא בבלוג איך מוודאים שהפריסה של Terraform תואמת ובגדול הנכון באמצעות Cloud Build.
- אפשר גם לקרוא את המשאבים שלנו בנושא DevOps.
- תוכלו להרחיב על היכולות של DevOps שקשורות למדריך הזה:
- אתם יכולים לעשות את הבדיקה המהירה של DevOps כדי להבין מה מצבכם בהשוואה לשאר האנשים בתחום.