הובלת DevOps: שילוב Azure CLI בצינורות CI/CD
By Mirko Peters ·
בעולם המהיר של אספקת תוכנה מודרנית, יעילות ומהירות הן הכול. ככל שצוותי פיתוח מאמצים שיטות של אינטגרציה מתמשכת ופריסה מתמשכת (CI/CD), הצורך בכלי אוטומציה קלים, אמינים ורב-פלטפורמיים הפך לקריטי מתמיד. בין אם אתם מקימים סביבות staging זמניות, פורסים תשתית כקוד או מגדירים microservices, כלי צינור הפריסה שלכם חייבים לפעול במהירות ובעקביות.
Automatically translated with AI from the original post. Read the English original
בעולם המהיר של אספקת תוכנה מודרנית, יעילות ומהירות הן הכול. ככל שצוותי פיתוח מאמצים שיטות של אינטגרציה מתמשכת ופריסה מתמשכת (CI/CD), הצורך בכלי אוטומציה קלים, אמינים ורב-פלטפורמיים הפך לקריטי מתמיד. בין אם אתם מקימים סביבות staging זמניות, פורסים תשתית כקוד או מגדירים microservices, כלי צינור הפריסה שלכם חייבים לפעול במהירות ובעקביות.
הנה Azure CLI. הכלי נבנה לפשטות, מהירות והרצה על פני פלטפורמות שונות, והוא הפך במהירות לכלי הראשון בבחירה של מהנדסי ענן שמבקשים לייעל את תהליכי ה-DevOps שלהם. בפוסט הזה נבחן מדוע Azure CLI בולט בצינורות פריסה מודרניים, כיצד הוא משתווה לכלי ניהול אחרים, וכיצד ניתן לשלב אותו בצורה חלקה בתהליכי ה-CI/CD שלכם.
אם נהניתם מהצלילה העמוקה הזו, הקפידו להאזין לפרק הפודקאסט הקשור, Azure CLI vs PowerShell: Which Should You Use?, שבו אנחנו מפרקים את ההבדלים המרכזיים בין ממשקי הניהול המובילים של Microsoft לענן.
מבוא ל-Azure CLI ב-CI/CD
צינורות אינטגרציה מתמשכת ופריסה מתמשכת דורשים כלים שיכולים לרוץ בתוך סביבות קונטיינר מינימליות ללא תקורה כבדה. באופן מסורתי, סקריפטים לאוטומציה היו קשורים בחוזקה למערכות הפעלה מסוימות, מה שיצר חיכוך בעת מעבר בין מחשבי הפיתוח המקומיים, סוכני הבנייה והאשכולות בסביבת הייצור. ב-DevOps המודרני נדרש מעבר לכלים שמספקים שוויון מלא בין Windows, macOS ו-Linux.
Azure CLI עונה על הדרישות הללו בצורה ישירה. מבנה פקודות נקי ונוח לסקריפטים, שמחזיר JSON כברירת מחדל, מאפשר למפתחים ולסוכנים אוטומטיים לשאול, ליצור ולשנות משאבי ענן בקלות רבה. כאשר הוא משולב בתוך צינור CI/CD, כגון GitHub Actions, GitLab CI או Azure DevOps, Azure CLI הופך שלבי פריסה מופשטים לקוד שניתן לחזור עליו ולצפות את תוצאתו.
מדוע Azure CLI לצינורות מודרניים
בתכנון ארכיטקטורות CI/CD מודרניות, כל שנייה נחשבת. סוכני הבנייה צורכים משאבי מחשוב, ותורי פריסה ממושכים יכולים לעכב את קצב הפיתוח. Azure CLI מותאם במיוחד לסביבות מהירות אלו. מכיוון שהארכיטקטורה הבסיסית שלו נשענת על קריאות REST קלות, הביצוע מהיר במיוחד וחסכוני במשאבים.
יתרה מכך, סוכני בנייה מבוססי קונטיינרים רצים לעיתים קרובות על תמונות Linux מצומצמות. התקנת תלויות כבדות עלולה להאריך את זמני ההפעלה של הצינור. טביעת הרגל הקטנה של Azure CLI וההתקנה הפשוטה שלו הופכים אותו לשותף אידיאלי עבור מרוצי CI/CD מבוססי Docker. הוא מאפשר למפתחים לבדוק סקריפטים של פריסה באופן מקומי, בסביבת shell זהה לזו שבה שרת הבנייה המרוחק מריץ אותם, ובכך מצמצם באופן דרסטי באגים מסוג "אצלי זה עובד".
Azure CLI מול PowerShell: השוואה מהירה
דילמה נפוצה בניהול ענן היא הבחירה בין Azure CLI ל-PowerShell. שני הכלים עוצמתיים מאוד, אבל הם מיועדים לפרסונות משתמש ולדפוסי הפעלה שונים לחלוטין. כדי להבין מדוע Azure CLI זוכה לעיתים קרובות במקום הראשון בצינורות CI/CD, כדאי לבחון איך הם משתווים זה לזה זה לצד זה.
| תרחיש | הכלי המומלץ | מה בולט בו |
|---|---|---|
| פריסת משאבים מהירה | Azure CLI | מהיר, קל, פקודות פשוטות, פועל בכל פלטפורמה, מצוין ל-DevOps ולסקריפטים. |
| אוטומציה ארגונית | PowerShell | מטפל באוטומציה מורכבת, פלט מבוסס אובייקטים, פעולות המוניות ואינטגרציה חזקה עם Windows. |
| שילוב בצינור CI/CD | Azure CLI | פקודות ברמה גבוהה, תמיכה מובנית בתשתית כקוד, והגדרת צינור פשוטה. |
| סקריפטים מתקדמים | PowerShell | סקריפטים גמישים, יצירת כלים משלך, ושליטה מעמיקה במשאבי Azure. |
| ניהול רב-פלטפורמי | Azure CLI | פועל על Linux, macOS ו-Windows, בנוי ב-Python, אידיאלי לסביבות מגוונות. |
בעוד ש-PowerShell מצטיין במשימות ניהול כבדות ומונחות אובייקטים ובאינטגרציות עמוקות ל-Windows, Azure CLI מנצח בצינורות מבוססי קונטיינרים בזכות פלט הטקסט הפשוט שלו, זמני ביצוע מהירים יותר לפעולות קלות והמוניות, ותאימות מובנית ל-Bash.
התקנה והגדרה של Azure CLI
לפני שתוכלו לאטמת את תשתית הענן שלכם, יש לוודא שה-Azure CLI מותקן כראוי ומאומת בתוך סביבת הפריסה שלכם. למרבה המזל, ההתקנה פשוטה בכל מערכת הפעלה.
אם אתם מגדירים מכונה מקומית או מכונה וירטואלית שמשמשת כסוכן בנייה, ופועלת עליה מערכת Windows, ניתן להתקין את ה-CLI באמצעות PowerShell:
Invoke-WebRequest -Uri https://aka.ms/installazurecliwindows -OutFile .\AzureCLI.msi; Start-Process msiexec.exe -Wait -ArgumentList '/I AzureCLI.msi /quiet'; rm .\AzureCLI.msiעבור רצי CI/CD מבוססי Linux (כמו רצי GitHub Actions רגילים על Ubuntu), ניתן לבצע את ההתקנה בשלב אחד באמצעות מאגר החבילות של Microsoft, או להסתמך על סביבות ריצה מותקנות מראש שכוללות את Azure CLI כברירת מחדל. לאחר ההתקנה, אימות ההתקנה פשוט כמו הרצת הפקודה:
az --versionלאימות בצנרת, יש להימנע מהתחברויות אינטראקטיביות דרך דפדפן. במקום זאת, הגדירו את הצנרת לאימות מאובטח באמצעות Service Principal או Managed Identity:
az login --service-principal -u $AZURE_CLIENT_ID -p $AZURE_CLIENT_SECRET --tenant $AZURE_TENANT_IDתחביר הליבה של Azure CLI ופקודות מרכזיות
היתרון של Azure CLI טמון בתחביר האינטואיטיבי והצפוי שלו. כל פקודה מתחילה במרחב השמות az, לאחר מכן מופיעה קבוצת המשאבים או השירות, ולבסוף הפעולה שברצונכם לבצע. מבנה פקודות שטוח זה הופך את כתיבה וקריאה של סקריפטים של צנרת לפשוטים במיוחד.
להלן כמה פקודות בסיסיות שנמצאות בשימוש תדיר באוטומציה בענן:
# Create a resource group
az group create --name MyPipelineResourceGroup --location eastus
# List all virtual machines in a table format
az vm list --output table
# Deploy an ARM or Bicep template
az deployment group create --resource-group MyPipelineResourceGroup --template-file azuredeploy.jsonכברירת מחדל, פקודות Azure CLI מחזירות מטעני JSON נקיים. כך קל מאוד לשלוף מאפיינים ספציפיים באמצעות ביטויי JMESPath מובנים (--query) ולהעביר ערכים אלה לשלבים הבאים של תהליך ה-CI/CD שלכם.
אוטומציה של פריסות עם Azure CLI
אוטומציה היא לב הפעימה של DevOps. כשפורסים יישומים ל-Azure, כמעט אף פעם לא כדאי להסתמך על לחיצות ידניות בפורטל Azure. באמצעות עטיפת לוגיקת הפריסה שלכם בסקריפטים של Azure CLI, תבטיחו עקביות מלאה בין סביבות הפיתוח, הבדיקות והייצור.
דמיינו שאתם צריכים להקים Azure App Service חדש, לעדכן את הגדרות התצורה שלו ולפרוס את הקוד בכל מיזוג לענף הראשי. סקריפט אוטומטי באמצעות Azure CLI הופך משימה זו לפשוטה:
# Create an App Service plan
az appservice plan create --name MyPlan --resource-group MyResourceGroup --sku B1 --is-linux
# Create the web app
az webapp create --name MyAppService --resource-group MyResourceGroup --plan MyPlan --runtime "NODE:18-lts"
# Configure environment variables
az webapp config appsettings set --name MyAppService --resource-group MyResourceGroup --settings DATABASE_URL="Server=tcp:myServer.database.windows.net..."
מכיוון שהפקודות האלה הן אידמפוטנטיות, הרצתן מספר פעמים לא תשבש את התשתית שלכם; במקום זאת, הן מבטיחות שסביבת היעד תתאים למצב התצורה הרצוי שלכם.
שילוב Azure CLI בצנרות CI/CD
שילוב פקודות Azure CLI במתזמרים פופולריים של CI/CD כמו GitHub Actions או Azure DevOps Pipelines הוא פשוט במיוחד. מכיוון שסוכני צנרת מבצעים בדרך כלל סקריפטים של מעטפת, ניתן להוסיף את פקודות ה-`az` הסטנדרטיות ישירות לקובצי ההגדרה של זרימת העבודה שלכם.
להלן דוגמה לקטע מתוך קובץ זרימת עבודה של GitHub Actions, שמתחבר ל-Azure ופורס יישום אינטרנט:
name: Deploy to Azure
on:
push:
branches: [ main ]
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Azure Login
uses: azure/login@v1
with:
creds: ${{ secrets.AZURE_CREDENTIALS }}
- name: Deploy Azure Resources
run: |
az group create --name ProdRG --location eastus
az deployment group create --resource-group ProdRG --template-file infra/main.bicep
על ידי שילוב פעולות רשמיות של runner עם פקודות Azure CLI גולמיות, אתם יוצרים צנרת פריסה אוטומטית, חזקה וניתנת לביקורת, שפועלת בצורה חלקה בכל שינוי קוד.
שיטות עבודה מומלצות לייעול DevOps עם Azure CLI
כדי להפיק את המירב מאוטומציה של Azure CLI ולשמור על אבטחה וביצועים טובים בצנרות ה-CI/CD שלכם, מומלץ לפעול לפי שיטות העבודה המוכחות הבאות:
- לעולם אל תקודדו סודות בקוד: יש לאחסן תמיד את אישורי ה-Service Principal, מחרוזות החיבור ומפתחות ה-API שלכם במנהל הסודות המאובטח של פלטפורמת ה-CI/CD שלכם (למשל GitHub Secrets או Azure DevOps Variable Groups).
- נעלו את גרסאות ה-CLI: סביבות ענן משתנות במהירות. כדי למנוע שינויים שוברים בלתי צפויים בצנרות שלכם, הגדירו במפורש את גרסת Azure CLI שסוכני הבנייה שלכם צריכים להשתמש בה.
- השתמשו בשאילתות JSON: השתמשו בפרמטר
--queryהמובנה כדי לחלץ מזהים או נקודות קצה ספציפיים מפלטי הפקודות, במקום לכתוב ביטויים רגולריים חיצוניים מורכבים או סקריפטים לניתוח נתונים. - שמרו על אידמפוטנטיות של הסקריפטים: תכננו את פקודות ה-CLI שלכם כך שניתן יהיה להריץ אותן שוב ושוב בלי לגרום להשפעות לוואי לא רצויות או לשגיאות של כפילות משאבים.
- נקו סביבות בדיקה: השתמשו בסקריפטים אוטומטיים לפירוק בצנרות ה-PR שלכם כדי למחוק קבוצות משאבים זמניות ולמנוע הצטברות של עלויות ענן מיותרות.
סיכום
שילוב Azure CLI בצנרות ה-CI/CD שלכם הוא שינוי משחק עבור צוותי DevOps מודרניים. אופיו הקל, התאימות שלו לפלטפורמות שונות והתחביר האינטואיטיבי שלו הופכים אותו לבן הלוויה האידיאלי לפריסות ענן מהירות ואוטומטיות. על ידי שילוב של שיטות אימות מאובטחות, סקריפטים מובנים היטב ושילוב צנרת חזק, תוכלו להשיג רמות חסרות precedent של מהירות ואמינות במחזור חיי אספקת התוכנה שלכם.
כדי להעמיק עוד יותר בנושא ולשמוע דיון מעניין על גישות שונות לשורת הפקודה, כדאי להאזין לפרק הנלווה שלנו בפודקאסט: Azure CLI vs PowerShell: Which Should You Use?. למדו את שני הכלים, הבינו את היתרונות הייחודיים של כל אחד מהם, ושלטו בארכיטקטורת הענן שלכם ב-Azure.