השתמש ב-Azure Cosmos DB כקונטיינר דוקר בצינורות CI/CD

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

הָאֱמִילָטוֹר של Azure Cosmos DB המבוסס על Linux זמין כמיכל Docker ויכול לרוץ על מגוון פלטפורמות, כולל ארכיטקטורות ARM64 כמו Apple Silicon. זה מאפשר פיתוח ובדיקתי מקומיים של אפליקציות בלי צורך במינוי Azure או עלויות שירות. אתה יכול בקלות להריץ אותו כמיכל Docker ולהשתמש בו לפיתוח ובדיקות מקומיות:

Dockerfile

 

docker pull mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator:vnext-preview

Azure Cosmos DB עם פעולות GitHub

בואו נעבור דוגמה כדי להבין טוב יותר כיצד להשתמש באמולטור של Azure Cosmos DB עם פעולות GitHub, שהיא פלטפורמת CI/CD (Continuous Integration and Continuous Delivery) שמאפשרת לך לאוטומטז את תהליך הבנייה, הבדיקה וההפצה שלך באמצעות זרימות עבודה. זרימת עבודה היא תהליך אוטומטי הניתן להגדרה שיכול להפעיל עבודה אחת או יותר. הוא מוגדר על ידי קובץ YAML שמאוחסן במאגר הקוד שלך ומופעל כאשר מפעיל אירוע במאגר שלך, או יכול להיות מופעל באופן ידני או בלוח זמנים מוגדר.

דוגמה: זרימת עבודה CI עבור יישום .NET

זרימת עבודת GitHub Actions זו מגדירה את אמולטור Azure Cosmos DB המבוסס על Linux כמאכשר של פעולות GitHub כחלק מעבודה. GitHub מתייחס להפעלת התכולה של Docker ומשמיד אותה כאשר העבודה מושלמת – אין צורך בהתערבות ידנית (כגון ביצוע פקודת הריצה של docker).

YAML

 

name: .NET App CI

on:
  push:
    branches: [main]
    paths:
      - 'dotnet-app/**'
  pull_request:
    branches: [main]
    paths:
      - 'dotnet-app/**'

jobs:
  build-and-test:
    runs-on: ${{ matrix.os }}

    strategy:
      matrix:
        os: [ubuntu-latest, ubuntu-24.04-arm]

    services:
      cosmosdb:
        image: mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator:vnext-preview
        ports:
          - 8081:8081
        env:
          PROTOCOL: https

    env:
      COSMOSDB_CONNECTION_STRING: ${{ secrets.COSMOSDB_CONNECTION_STRING }}
      COSMOSDB_DATABASE_NAME: ${{ vars.COSMOSDB_DATABASE_NAME }}
      COSMOSDB_CONTAINER_NAME: ${{ vars.COSMOSDB_CONTAINER_NAME }}

    steps:
      - name: Checkout repository
        uses: actions/checkout@v4

      - name: Set up .NET
        uses: actions/setup-dotnet@v3
        with:
          dotnet-version: '8.0.x'

      - name: Export Cosmos DB Emulator Certificate
        run: |
          sudo apt update && sudo apt install -y openssl
          openssl s_client -connect localhost:8081 </dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > cosmos_emulator.cert

          sudo cp cosmos_emulator.cert /usr/local/share/ca-certificates/
          sudo update-ca-certificates

      - name: Install dependencies
        run: cd dotnet-app && dotnet restore

      - name: Build
        run: cd dotnet-app && dotnet build --no-restore

      - name: Run tests
        run: cd dotnet-app && dotnet test --no-build --verbosity normal

העבודה הזו מוגדרת לרוץ על ראנר של Ubuntu ומשתמשת בתמונת Docker mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator:vnext-preview כשירות תוכן. מחרוזת החיבור, שם מסד הנתונים ושם הקונטיינר מוגדרים כמשתנים סביבתיים. מאחר והעבודה רצה ישירות על ראנר מארח של פעולות GitHub, שלב "הרץ בדיקות" יכול לגשת לאמולטור באמצעות localhost:8081.

שלב ייצוא תעודת האמולטור של Cosmos DB מיועד לאפליקציות .NET (כמו גם Java) מאחר ובעת כתיבת הטקסט, סדקי ה-SDK של .NET ו-Java אינם תומכים במצב HTTP באמולטור. משתנה הסביבה PROTOCOL מוגדר ל-https בסעיף services ושלב זה ייצא את תעודת האמולטור ויכניס אותן לאחסון התעודות המהימן של מערכת ההפעלה.

נסה זאת!

ה-מאגר הקוד של GitHub מספק דוגמאות כיצד להגדיר את האמולטור בלינוקס כחלק מתהליך CI של פעולות GitHub עבור אפליקציות .NET, Python, Java ו-Go בשני ארכיטקטורות של x64 ו-ARM64 (מודגם עבור ראנר בלינוקס באמצעות Ubuntu).

שכפל את המאגר

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

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

הוסף את מחרוזת החיבור של מפעיל Cosmos DB (COSMOSDB_CONNECTION_STRING) כסוד למאגר. השתמש בערך הבא:

Plain Text

 

AccountEndpoint=http://localhost:8081/;AccountKey=C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==

הוסף את שם מסד הנתונים (COSMOSDB_DATABASE_NAME) ושם האחסון (COSMOSDB_CONTAINER_NAME) כ-משתנים של המאגר:

שכפל את המאגר שנכפל למחשב המקומי שלך (ודא שהשתמשת בשם המשתמש שלך ב-GitHub):

Plain Text

 

git clone https://github.com/<your-username>/cosmosdb-linux-emulator-github-actions.git

cd cosmosdb-linux-emulator-github-actions

הפעל את הזרימה

כדי להפעיל את הזרימה, עשה שינוי קטן לכל הקוד (.NET, Java, Python או Go), הוסף ושלח את השינויים שלך. לצורך הבנה קלה, זרימות עבודה נפרדות משמשות לכל שפת תכנות.

העלה את השינויים שלך למאגר השנכפל שלך ב-GitHub:

Plain Text

 

git add . 
git commit -m "Your commit message" 
git push origin main

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

התחשבויות לרץ של GitHub Actions

ה מאגר הקוד לדוגמה הציג רץ מבוסס ubuntu (עבור ארכיטקטורות x64 ו-ARM64). זה צריך לעבוד גם עבור רצים מבוססי Windows ARM. אם אתה מתכנן רצים x64 של Windows, שים לב שבזמן כתיבת הטקסט, תוכלו להתחיל את התהליך על ידי הוספת שלבים להתקנת Docker וניהול החיים שלו, כולל הפעלה ועצירת הקונטיינר.

סיכום

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

Source:
https://dzone.com/articles/use-azure-cosmos-db-as-a-docker-container-in-cicd