בניית צינורות Azure DevOps בעולם האמיתי עבור תבניות ARM

כאשר אתה מחפש באינטרנט, תמצא מגוון פוסטים בבלוגים, תיעוד והדרכות על Azure DevOps. כל אלה הם מקורות יקרים, אך נדיר שמישהו ידריך אותך דרך סצנריו אמיתי. רבים עוברים מעל נושא האבטחה ומשאירים סיסמאות בטקסט פשוט או מסוף התהליך כשהתוצאה הסופית יכולה להיות שלא עושה כלום. בואו נשנה את זה.

במאמר/הדרכה זו, אתה הולך ללמוד מהתחלה ועד סוף איך לבנות צינור שחרור אמיתי של Azure DevOps שמאופטמת את התשתיות. בצורה יותר ספציפית, אתה תלמד כיצד להשתמש ב-Azure DevOps לבניית צינור השקה רציני לפרסום מכונות וירטואליות ב-Azure.

עד סיום פרויקט זה, יהיה לך צינור Azure פועל במלואו. ממעברת commit ב- GitHub יושקל:

  • בניית קבוצת משאבי Azure זמנית
  • הקמת VM ב-Azure דרך תבנית ARM
  • הגדרת התבנית ARM בצינור CI/CD
  • בכל שינוי בתבנית, התחלת מבחן אימות
  • השקת התבנית ARM ל-Azure
  • בדיקת תשתיות התקנה
  • השמדת כל המשאבים ב-Azure

בוא נתקפל ישירות!

סקירת פרויקט

פרויקט זה יופץ לשישה חלקים עיקריים. אלה הם:

הכנה של משאבי Azure

במקטע זה, תלמד כיצד להגדיר את כל המשאבים הדרושים ב-Azure. כאן תמצא:

  • הקמת שוליים של Azure service principal למגוון משימות בצינור עבודה
  • הגדרת Azure Key Vault עם סודות לשימוש בצינור העבודה
  • הגדרת מדיניות גישה מתאימה לDP ARM ושימוש בצינור

הכנה ל-Azure DevOps

כאשר כל המשאבים של Azure מוגדרים, הגיע הזמן להכין את Azure DevOps לצורך הצינור שלך. בחלק זה, תבצע את הפעולות הבאות:

סקירת סקריפט/תבנית

ישנם פריטים שונים המלווים את הפרויקט הזה כולל התבנית ARM לבניית השרת ובדיקות ה- Pester. במקטע זה, נכסה בקצרה מה מבנה התבנית עושה ומה בדיוק Pester בודק בצינור.

יצירת הצינור

במקטע זה הכיף האמיתי מתחיל. תתחילו להגדיר את הצינור האמיתי. כאן תלמדו כיצד להגדיר את כל תהליך האורכסטרציה באמצעות קובץ YAML יחיד.

תקימו את הצינור באמצעות חוויית ממשק המשתמש לצינור בשלבים מרובים. כפי שנכתב כאן, תכונה זו נמצאת בתצורת תצוגה מקדימה.

הדגמת הצינור

לאחר שהצינור נבנה, עליכם לראות אותו בפעולה! במקטע זה תלמדו כיצד להפעיל את הצינור ופשוט לצפות בקסם יוצר.

ניקוי

ולבסוף, מאחר שזה רק הדגמה, תקבלו גישה לסקריפט לפירוק כל מה שנבנה במהלך המדריך.

נשמע כמו הרבה? זהו! אך אל תדאגו, תלמדו שלב אחר שלב כשתתקפו כל משימה לבדה.

אם תרצו סקריפט עם כל פקודות ה- Azure CLI המשמשות לבניית הצינור הזה, תוכלו למצוא אותו במאגר ה-GitHub של ServerAutomationDemo כ-demo.ps1.

דרישות מקדימות

תלמד המון, אך מצפים ממך גם להביא מספר דברים לשולחן. אם אתה מתכנן להמשיך, היה בטוח שיש לך את הדברים הבאים:

ARM deployments allowed to access the key vault
  • Cloud Shell או PowerShell 6+ אם אתה מריץ מקומית – דוגמאות עשויות לעבוד ב־Windows PowerShell אך לא נבדקו. כל הדוגמאות יבוצעו מקומית דרך מסוף PowerShell אך Cloud Shell תעבוד גם כך. תאפס בניית הצינור.
  • הפעל Azure CLI (אם אתה מריץ מקומית) – תלמד איך לבצע משימות במאמר זה עם Azure CLI. אבל, אותן פעולות ניתן גם לבצע דרך פורטל Azure, PowerShell או Azure SDK.

אזהרה: הפעולות שאתה עומד לבצע עלולות לעלות כסף אמיתי אלא אם כן יש לך קרדיט Azure מסוים. המשאבים הכי יקרים שתעלה ב־Azure הם מכונת וירטואלית אך רק לטווח זמן מוגבל.

לפני שתתחיל

אתה הולך לעשות המון הגדרות במדריך זה. לפני שתתחיל, אנא בדוק שיש לך את הפריטים הבאים ליד.

  • שם המינוי Azure למשאבים שיתקינו – הדוגמאות ישתמשו ב־Adam the Automator.
  • תעודת זהות של המנוי
  • מזהה של השוכר של Azure AD
  • שם הארגון של DevOps – הדוגמאות ישתמשו ב־adbertram.
  • האזור שבו המשאבים יושקעו – הדוגמאות ישתמשו ב־eastus.
  • שם קבוצת המשאבים ב־Azure שבה תוכנס כספת המפתחות הזמנית – הדוגמאות ישתמשו ב־ServerAutomationDemo.
  • A password to assign to the local administrator account on a deployed VM – the examples will use “I like azure.”.
  • כתובת האתר של ה־GitHub – הדוגמאות ישתמשו ב־https://github.com/adbertram/ServerAutomationDemo.

התחברות עם Azure CLI

היה מוכן לעבודה מול Azure CLI במאמר. אני אוהב את ה־Azure PowerShell cmdlets, אך כרגע ה־Azure CLI מסוגלת לבצע יותר משימות DevOps.

המשימה הראשונה שלך היא להתקדם לקונסולת PowerShell 6+‎. לאחר שהגעת לקונסולה, התחבר ל־Azure באמצעות הפקודה az login. הפקודה תפתח חלון דפדפן ותבקש את החשבון שלך.

לאחר ההתחברות, ודא שהמנוי שלך מוגדר כברירת מחדל. הגדרתו כברירת מחדל תמנע ממך מלהציין אותו באופן קבוע.

az login
az account set --subscription 'Adam the Automator'

הכנת משאבי Azure

פעם שתתחבר ל- Azure CLI, הגיע הזמן להתחיל לעבוד. לצינור Azure יש המון תלות שונות ושלל ידיתים לכוונן. בסעיף זה תלמד איך להגיע להגדרה ולהכין את הסביבה שלך לצורך הצינור שלך.

התקנת הרחבת Azure CLI DevOps

תצטרך דרך לבנות את הרכיבים השונים של Azure DevOps עם Azure CLI. בצורה ברירת המחדל, זה לא כולל פונקציות אלו. כדי לנהל את Azure DevOps מתוך Azure CLI, יהיה עליך להתקין את ההרחבה של DevOps.

ממש מזל, התקנת ההרחבה היא שורה אחת, כפי שמוצג למטה.

az extension add --name azure-devops

לאחר התקנת ההרחבה, הגדר את הארגון שלך כברירת מחדל כדי למנוע מכם לציין אותו שוב ושוב.

az devops configure --defaults organization=https://dev.azure.com/adbertram

יצירת קבוצת המשאבים

אף שהצינור ייצור קבוצת משאבים זמנית, עדיף ליצור גם אחת עבור כל המשאבים שיופעלו בדמו. במיוחד, קבוצת המשאבים הזו היא המקום בו תיצור כור Azure Key.

az group create --location "eastus" --name "ServerAutomationDemo"

יצירת הסוכן השירות של Azure

המשימה הבאה היא ליצור עקרון שירות של Azure. תצטרך עקרון שירות של Azure כדי לאמת לכספת המפתחות של Azure. תשתמש גם בעקרון השירות הזה כדי לאמת חיבור לשירות. צור את עקרון השירות עבור שני הכספות, וגם עבור התקנת ARM המתבצעת לפי ההוראות הבאות.

$spIdUri = "http://ServerAutomationDemo"
$sp = az ad sp create-for-rbac --name $spIdUri | ConvertFrom-Json

בנקודה זו, יהיה רעיון טוב לשמור על ערך של $sp.appId במקום מסוים. כאשר תגיע לבניית הצנתוק מאוחר יותר, תצטרך את זה!

תשים לב שישנם פקודות PowerShell בדוגמאות, לדוגמה ConvertFrom-Json. מאחר ו-CLI של Azure מחזיר רק מחרוזות JSON, יותר קל להתייחס לתכונות אם מומר לאובייקט PowerShell.

בניית הכספת

הצנתוק במדריך זה צריך להתייחס לזוג סיסמאות. במקום לאחסן סיסמאות בטקסט גלוי, בוא נעשה זאת בדרך הנכונה. כל מידע רגיש יאוחסן בכספת המפתחות של Azure.

כדי ליצור את הכספת המפתחות, יש להשתמש בפקודת az keyvault create כפי שמוצג למטה. הפקודה הזו יוצרת את הכספת המפתחות בקבוצת המשאבים שנוצרה מראש. גם כדאי לשים לב למתג enabled-for-template-deployment. המתג הזה משנה את מדיניות הגישה לכספת המפתחות כך שתתקיים הגישה של התקנת ARM בעתיד לכספת המפתחות.

az keyvault create --location $region --name "ServerAutomationDemo-KV" --resource-group "ServerAutomationDemo" --enabled-for-template-deployment true
Allowing ARM to access the keyvault

יצירת סודות כספת המפתחות

פעם אחת שנוצר כספר המפתחות, הגיע הזמן ליצור את הסודות. לצורך הדגמה זו, יש ליצור שני סודות בשם ServerAutomationDemo-AppPw ו- StandardVmAdminPassword. הסיסמה AppPw היא הסיסמה עבור הנציג שירות. הסיסמה של ה-VM תוקצה לחשבון המנהל המקומי על ה-VM שנפתח.

az keyvault secret set --name "ServerAutomationDemo-AppPw" --value $sp.password --vault-name "ServerAutomationDemo-KV"
az keyvault secret set --name StandardVmAdminPassword --value "I like azure." --vault-name "ServerAutomationDemo-KV"

שים לב שאתה משתמש במשתנים של PowerShell שהוגדרו מראש בדוגמה זו. כאן אתה מספק את סיסמת הנציג שירות ($sp.password) שנאספה מראש.

מאפשר את הפייפליין לגשת לכספר המפתחות

הבא, הפייפליין זקוק להרשאות לגשת לכספר המפתחות. הרפה את מדיניות הגישה לכספר המפתחות קצת. ספק את ההרשאות לנציג שירות שנוצר עם הרשאות לקבל ולרשום סודות כספר המפתחות.

az keyvault set-policy --name "ServerAutomationDemo-KV" --spn $spIdUri --secret-permissions get list

מתכונן ל- Azure DevOps

כעת יש לך את כל ההכנות למשאבי Azure בוצעו. הגיע הזמן לבצע עבודת הכנה ב- Azure DevOps.

מתקין את ההרחבה Pester

המשימה הראשונה לביצוע היא התקנת ההרחבה PesterRunner ב- Azure DevOps. הפייפליין ירוץ שני סטים של בדיקות Pester כדי לוודא שהאפליקציה התקנתה בהצלחה על ה-VM. אחד הדרכים הקלות להריץ בדיקות Pester היא עם ההרחבה PesterRunner.

התקן את ההרחבה באמצעות הפקודה למטה.

az devops extension install --extension-id PesterRunner --publisher-id Pester

יוצר את פרויקט Azure DevOps

כעת זמן ליצור את הפרויקט שבו ייווצר הצינור שלך. יצירת צינור Azure DevOps נפלאה עם ה-CLI של Azure. פשוט הפעל את הפקודות למטה כדי ליצור את הפרויקט ולהגדיר אותו כברירת המחדל שלך.

az devops project create --name "ServerAutomationDemo"
az devops configure --defaults project=ServerAutomationDemo

יצירת חיבורי שירות

הצינור שלך צריך לאמת לשני שירותים – ARM ואת גיטהאב שלך. כדי לעשות זאת, יש ליצור שני חיבורי שירות.

ראשית, יש ליצור נקודת סיום של שירות ARM. הפקודה למטה תדרוש את סיסמת פרינסיפל השירות. וודא שתציג אותה תחילה בקונסול ותעתיק אותה ללוח הגזירים שלך.

ודא שתמלא את מזהה המינוי שלך, מזהה השוכר שלך ולהחליף את שם המינוי למטה.

## הרץ את $sp.password והעתק אותו ללוח הגזירים
$sp.Password

## צור את נקודת הסיום של השירות
az devops service-endpoint azurerm create --azure-rm-service-principal-id $sp.appId --azure-rm-subscription-id "YOURSUBSCRIPTIONIDHERE" --azure-rm-subscription-name 'Adam the Automator' --azure-rm-tenant-id $tenantId --name 'ARM'

באשר לשירות חיבור עבור גיטהאב. מאחר שהצינור יופעל דרך התחייבות Git, יהיה עליו להיות מסוגל לקרוא את האחסון.

בנקודה זו הוא היכן שאספק כרטיס הגישה האישי של GitHub מועיל. למטה תצטרך גם להדביק שוב את סיסמת פרינסיפל השירות. אתה משתמש באותו פרינסיפל השירות עבור שני חיבורי השירות.

$gitHubServiceEndpoint = az devops service-endpoint github create --github-url 'https://github.com/adbertram/ServerAutomationDemo' --name 'GitHub' | ConvertFrom-Json

## הדבק את כרטיס הגישה האישי של GitHub כאשר יתבקש 

יצירת קבוצת משתנים

הצינור יפנה למפתחי הסודות של Key Vault עבור שני הסיסמאות. כדי לבצע זאת בצורה מאובטחת, עליך ליצור קבוצת משתנים ולקשר אותה ל-Key Vault.

ראשית, צור את קבוצת המשתנים כפי שמוצג למטה.

az pipelines variable-group create --name "ServerAutomationDemo" --authorize true --variables foo=bar

שים לב למשתנה foo=bar? לא משמש אך נדרש משתנה יחיד כדי ליצור את קבוצת המשתנים.

קישור של קבוצת המשתנים ל-Key Vault

בנקודה זו, תצטרך להיכנס לפורטל Azure DevOps. בזמן כתיבת זה, אין ל- Azure CLI דרך לקשר Key Vault לקבוצת משתנים.

נווט אל פרויקט Azure DevOps ולחץ על ספרייה. תראה את קבוצת המשתנים ServerAutomationDemo כפי שמוצג למטה. לחץ על קבוצת המשתנים ServerAutomationDemo.

Available variable group

פעם שנמצאים בקבוצת המשתנים, לחץ על קישור סודות מ-Key Vault של Azure כמשתנים. כאשר תעשה זאת, תקבל אזהרה שכל המשתנים יימחקו ולחץ אישור. ניתן לראות איך לבצע זאת למטה. הפעולה זו בסדר מאחר והמשתנה foo היה זמני מההתחלה.

Linking variable group to pipeline

לאחר אישור, בחר בחיבור השירות ARM וב-Key Vault ServerAutomationDemo-KV שנוצרו מראש כמוצג למטה. לחץ הוסף.

Setting the service connection

עכשיו בדוק את שני הסודות שנוצרו מראש כמצויין למעלה ולחץ אישור ואז שמור כדי לשמור את השינויים.

Selecting keyvault secrets for the pipeline to use

סקירת קבצי הפרויקט

אם הגעת עד כאן, מזל טוב! אתה/את עכשיו מוכן/מוכנה להתחיל לבנות את הצינור. אבל רגע… יש עוד!

כדי להפוך את בניית הצינור של Azure למציאותית, המדר הזה בונה צינור שמשלים עם בדיקות "יחידה" ו"קבלת על". זה עושה את המדר הזה יותר מעניין אך דורש גם הסבר נוסף על מה שקורה.

ב-GitHub repo של המדר הזה, תמצא מספר קבצים כפי שמוצג למטה. עכשיו זה הזמן הנכון להיות או לשכפל את הריפו או לבנות את שלך מתוך הקבצים.

GitHub files list
  • azure-pipelines.yml – הצינור YAML הסופי
  • connect-azure.ps1 – סקריפט PowerShell לאימות במינוי Azure
  • server.infrastructure.tests.ps1 – מבחן Pester פשוט לאימות שההגדרות של המכונה הווירטואלית טובות
  • server.json – תבנית Azure ARM לספק VM
  • server.parameters.json – תבנית פרמטרים של ARM שמספקת לתבנית ARM עם ערכי פרמטרים

ודא שתחליף את מזהה המינוי ושם אחסון המפתחות עבור מפתח המפתחות בקובץ server.parameters.json.

  • server.templates.tests.ps1 – מבחני "יחידה" Pester לאימות שהתבנית ARM תקפה

תראה איך כל אחד מהקבצים הללו מתאים יחד בצינור בזמן קצר.

יצירת הצינור

נניח שכבר העתקת את הגיטהאב שלי או הקמת אחד בעצמך, הגיע הזמן ליצור את הצינור! כדי לעשות זאת, הפעל את הפקודה az pipelines create. הפקודה למטה יוצרת צינור בשם ServerAutomationDemo באמצעות הגיטהאב שסופק. הוא יסתכל על הענף master וישתמש בחיבור לשירות שנבנה קודם.

az pipelines create --name "ServerAutomationDemo" --repository "https://github.com/adbertram/ServerAutomationDemo" --branch master --service-connection $gitHubServiceEndpoint.id --skip-run

בהתאם לכך אם יש לך את קובץ azure-pipelines.yml בגיטהאב שלך, ייתכן שתקבל משוב דומה למטה. בכל מקרה, המסך שלך יראה דומה. ודא שיש לך את האסימון האישי שלך של גיטהאב מוכן!

Creating the Azure DevOps pipeline with the Azure CLI

ביקורת צינור YAML

בנקודה זו, הצינור שלך מוכן לריצה, אך חשוב להבין תחילה את צינור ה-YAML.  קח מבט על הקובץ azure-pipelines.yml . קובץ זה הוא הצינור כאשר משתמשים בתכונת צינור YAML רב-שלבים.

בואו נפרק את הרכיבים השונים של צינור זה.

הזימון

מכיוון שאתה בונה צינור CI שרץ אוטומטית, נדרש זימון. הזימון למטה מפעיל את הצינור כאשר התקבלה התחייבות בענף הראשי של Git.

שים לב גם למקטע ה־paths. כברירת מחדל, אם לא כלולים או מאפשרים במיוחד קבצים או תיקיות בבניית CI, הצינור ירוץ כאשר מבוצע commit לקובץ כלשהו. בגלל שהפרויקט הזה מבוסס על תבנית ARM, אין לך רצון להפעיל את הצינור אם, לדוגמה, עשית שינוי קטן בבדיקת Pester.

trigger:
  branches:
    include:
      - master
  paths:
    include:
      - server.json
      - server.parameters.json

הבריכה

כל בנייה דורשת סוכן. כל סוכן בנייה צריך להפעיל על מכונת וירטואלית. במקרה הזה, המכונה הווירטואלית משתמשת בדמות ה־ubuntu-latest. זו הדמות הברירת מחדל שהוגדרה כאשר נוצרה הבנייה במקור. לא התבצעו שינויים בשל "הפשטות" של הצינור הזה.

pool:
  vmImage: "ubuntu-latest"  

משתנים

השלב הבא, כולל את כל המשתנים וקבוצת המשתנים. המשימות השונות בצינור זה דורשות קריאה לערכים כמו מזהה ההרשמה של Azure, מזהה השוכן ומזהה היישום של הפרינסיפל וכו'. במקום לשכפל ערכים סטטיים בכל משימה, הם מוגדרים כמשתנה.

גם שים לב לאלמנט ה־group. אלמנט זה מתייחס לקבוצת המשתנים שיצרת בקודם. ודא שתחליף את ה־subscription_id ואת ה־tenant_id בזמן זה.

זכור בחלק "יצירת האישור של Azure" שהוזכר לך לשמור על הערך של $sp.appId במקום מסוים? זהו המקום שבו תצטרך אותו. הקצה את הערך של מזהה היישום של אישור השירות הזה ל־application_id כפי שמוצג למטה.

variables:
    - group: ServerAutomationDemo
    - name: azure_resource_group_name
      value: "ServerProvisionTesting-$(Build.BuildId)"
    - name: subscription_id
      value: "XXXXXXXXXXXXX"
    - name: application_id
      value: "XXXXXXXXXXXXX"
    - name: tenant_id
      value: "XXXXXXXXXXXX"

שים לב לערך של המשתנה azure_resource_group_name. בתוך הערך תראה $(Build.BuildId). זהו משתנה מערכתי שמייצג את מזהה הבנייה של העבודה הנוכחית. בהקשר זה, הוא משמש לוודא שהקבוצה הזמנית שנוצרה היא ייחודית.

משימות הכנה בפוורשל

הסט הבא של משימות קורא לקוד PowerShell. בדוגמת הצינורות הזו משתמשים ב-PowerShell כדי ליצור ולהסיר קבוצת משאבים זמנית לצורך בדיקה. במשימות הפרסום האלה, תראה שני דוגמאות לקריאה לקוד PowerShell.

המשימה הראשונה קוראת לתסריט בשם connect-azure.ps1 שקיים במאגר GitHub. משימה זו מאמתת את החיבור למינוי Azure עבור הפקודות הבאות של PowerShell שיתבצעו.

משימת החיבור של PowerShell של Azure מתקשרת עם התסריט ומעבירה ערך סוד של קלט כור (ServerAutomationDemo-AppPw) ואת המשתנים של הצינור subscription_id, application_id ו- tenant_id.

המשימה השנייה מריצה קוד PowerShell inline, המשמעות היא שהתסריט לא קיים כבר. במקום זאת, קוד PowerShell מוגדר בעצמו ב-YAML של הצינור באמצעות ערך של המשתנה azure_resource_group_name.

- task: PowerShell@2
  inputs:
    filePath: "connect-azure.ps1"
    arguments: '-ServicePrincipalPassword "$(ServerAutomationDemo-AppPw)" -SubscriptionId $(subscription_id) -ApplicationId $(application_id) -TenantId $(tenant_id)'
- task: PowerShell@2
  inputs:
    targetType: "inline"
    script: New-AzResourceGroup -Name $(azure_resource_group_name) -Location eastus -Force

בדיקת תבנית Pester

בהמשך יש לנו את הבדיקה הראשונה של Pester. בצינור CI/CD כזה, חשוב לציית למספר שכבות שונות של בדיקות. אם היית יוצר צינור עבור פרויקט תוכנה, תוכל ליצור מספר בדיקות יחידה שונות.

מכיוון שצינור הדוגמה הזה מבוסס סביבת ARM VM יחידה, הבדיקות הראשונות יהיו לבדוק את תוקניות ה-JSON. בקובץ server.templates.tests.ps1 תוכל להוסיף כמה בדיקות שונות על קובץ התבנית של ARM ככל שתרצה.

שים לב למטה, הצינור משתמש במשתנים מערכתיים שונים. משתנים אלה מפנים למיקום הקובץ של הקבצים לאחר שהם מגיעים לסוכן בנייה.

המשימה של PesterRunner שולחת את תוצאות הבדיקה לקובץ XML שיקרא מאוחר יותר בצינור.

- task: Pester@0
  inputs:
    scriptFolder: "@{Path='$(System.DefaultWorkingDirectory)/server.template.tests.ps1'; Parameters=@{ResourceGroupName='$(azure_resource_group_name)'}}"
    resultsFile: "$(System.DefaultWorkingDirectory)/server.template.tests.XML"
    usePSCore: true
    run32Bit: False

התקנת VM של ARM

הגענו כעת לתהליך התקנת ARM. מאחר שכל הצינור בנוי סביב היכולת להתקין VM, זה חשוב! משימה זו מבצעת את התבנית של ARM ומספקת את כל התכונות הנדרשות כדי שזה יקרה.

שים לב לתכונה deploymentOutputs: arm_output. בשלב הבא, משימה צריכה להתחבר ל-VM שהותקן. דרך נהדרת לקבל את שם ה-DNS או כתובת ה-IP של ה-VM היא על ידי החזרתו דרך התקנת ARM. האפשרות deploymentOutputs יוצרת משתנה של צינור שניתן להפנות אליו במשימות אחרות.

- task: AzureResourceManagerTemplateDeployment@3
  inputs:
    deploymentScope: "Resource Group"
    azureResourceManagerConnection: "ARM"
    subscriptionId: "1427e7fb-a488-4ec5-be44-30ac10ca2e95"
    action: "Create Or Update Resource Group"
    resourceGroupName: $(azure_resource_group_name)
    location: "East US"
    templateLocation: "Linked artifact"
    csmFile: "server.json"
    csmParametersFile: "server.parameters.json"
    deploymentMode: "Incremental"
    deploymentOutputs: "arm_output"

בדיקת "קבלת" Pester

לאחר שה-VM הותקנה, עליך לוודא שהותקנה בהצלחה עם בדיקת "אינטגרציה" או "קבלת" נוספת. משימת PesterRunner זו קוראת ל-Pester ומפעילה עוד סט של בדיקות הקשורות לתשתיות כדי לוודא שה-VM הותקנה בהצלחה.

השים לב שאנו מעבירים את ערך הפלט של ההטבה של ARM דרך הפרמטר ArmDeploymentJsonOutput. יש בקובץ הבדיקות של Pester פרמטר המגדיר שמקבל את הערך וקורא את שם המאחסנת DNS של ה-VM.

 - task: Pester@0
    inputs:
      scriptFolder: "@{Path='$(System.DefaultWorkingDirectory)/server.infrastructure.tests.ps1'; Parameters=@{ArmDeploymentJsonOutput='$(arm_output)'}}"
      resultsFile: "$(System.DefaultWorkingDirectory)/server.infrastructure.tests.XML"
      usePSCore: true
      run32Bit: False

ניתן לראות למטה איך נראה קובץ הסקריפט PowerShell server.infrastructure.tests.ps1. שים לב שהוא קורא לשם ה-DNS של ה-VM כדי לבצע בדיקת פתיחת יציאה פשוטה לאחר מכן.

$ArmDeploymentOutput = $ArmDeploymentJsonOutput | convertfrom-json

## הרץ את הבדיקות
describe 'Network Connnectivity' {
    it 'the VM has RDP/3389 open' {
        Test-Connection -TCPPort 3389 -TargetName $ArmDeploymentOutput.hostname.value -Quiet | should -Be $true
    }
}

ניקוי בדיקת "קבלת"

הסיבה היחידה שהצינור הפרסם תשתית היישום הייתה לבדוק את תקיפות התבנית של ARM. בגלל שהתשתית הזו היא זמנית בלבד, יש צורך לנקות אותה. במשימת PowerShell האחרונה, הצינור מסיר את קבוצת המשאבים שנוצרה קודם ואת כל מה שבתוכה.

- task: PowerShell@2
  inputs:
    targetType: "inline"
    script: Get-AzResourceGroup -Name $(azure_resource_group_name) | Remove-AzResourceGroup -Force

פרסום בדיקת Pester

וסופית, הגענו לסדר המשימות האחרונות. ב-Azure Pipelines יש למשימה שנקראת Publish Test Results. משימה זו קוראת לקובץ XML בסוכן בניה ומציגה תוצאות בדיקות ב-Azure DevOps. זהו דרך שימושית לראות בקלות את תוצאות כל הבדיקות שהתרחשו.

- task: PublishTestResults@2
  inputs:
    testResultsFormat: "NUnit"
    testResultsFiles: "$(System.DefaultWorkingDirectory)/server.infrastructure.tests.XML"
    failTaskOnFailedTests: true

- task: PublishTestResults@2
  inputs:
    testResultsFormat: "NUnit"
    testResultsFiles: "$(System.DefaultWorkingDirectory)/server.template.tests.XML"
    failTaskOnFailedTests: true
The Tests section of a pipeline run

שימוש בצינור ה-DevOps של Azure

סופית, אנו מוכנים להריץ את הצינור ולראות איך הוא עובד. ב-UI של Azure DevOps, ודא שאתה נמצא בפרויקט ServerAutomationDemo. לאחר מכן, לחץ על Pipelines ותראה את הצינור ServerAutomationDemo.

דרך אחת להפעיל את הצינור היא ללחוץ על שלוש נקודות בצד ימין כפי שמוצג למטה. לאחר מכן, לחץ על Run pipeline. זה יפעיל את האוטומציה.

Running a pipeline

הצינור יתקדם ויריץ כל משימה כפי שהורא לו. בסופו של דבר, תראה את כל סימני הסימון הירוקים בשביל כל משימה שבוצעה על ידי העבודה כפי שמוצג למטה.

Successful job task execution

ניקוי

ברגע שתסתכל על הצינור ועל כל מה שהצלחת כאן, עליך לנקות כל דבר. לבסוף, זה היה מיועד רק להיות מדריך ו־לא משימת ייצור!

למטה תמצא מספר פקודות לניקוי כל מה שנבנה במאמר זה. הקוד מסיר את הכלים העיקריים, את היישום של Azure AD, את קבוצת המשאבים והכל בתוכה, ואת פרויקט Azure DevOps.

$spId = ((az ad sp list --all | ConvertFrom-Json) | ? { '<https://ServerAutomationDemo>' -in $_.serviceprincipalnames }).objectId
az ad sp delete --id $spId

## הסר קבוצת המשאבים
az group delete --name "ServerAutomationDemo" --yes --no-wait

## הסר את הפרויקט
$projectId = ((az devops project list | convertfrom-json).value | where { $_.name -eq 'ServerAutomationDemo' }).id
az devops project delete --id $projectId --yes

סיכום

מטרת המדריך הייתה לתת לך הצצה לבניית צינור אוטומציה של התשתית של Azure DevOps אמיתית. אפילו עם אין ספירה של דרכים נוספות רבות לבנות צינורות כאלה, הידע שרכשת במדריך זה יסייע לך בהגדרות שונות רבות.

עכשיו תצא לפעול והתחל לאוטומציה יותר!

Source:
https://adamtheautomator.com/azure-devops/