ישנם רבים יתרונות לשימוש במיכלי Docker בצינורות CI/CD, במיוחד עבור מערכות המתוחזקות כמו מסדי נתונים. לדוגמה, כאשר אתה מריץ בדיקות אינטגרציה, כל עבודת CI יכולה להתחיל את מסד הנתונים במיכל מבודד עם מצב נקי, מונע סכסוך בין הבדיקות. תוצאת זה היא סביבת בדיקות היא אמינה, עקבית ויעילה מבחינת עלות. הגישה הזו גם מפחיתה את העכבות ומשפרת את ביצועי הצינור CI/CD כיוון שהמסד נתונים נגיש מקומית.
הָאֱמִילָטוֹר של Azure Cosmos DB המבוסס על Linux זמין כמיכל Docker ויכול לרוץ על מגוון פלטפורמות, כולל ארכיטקטורות ARM64 כמו Apple Silicon. זה מאפשר פיתוח ובדיקתי מקומיים של אפליקציות בלי צורך במינוי Azure או עלויות שירות. אתה יכול בקלות להריץ אותו כמיכל Docker ולהשתמש בו לפיתוח ובדיקות מקומיות:
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).
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
) כסוד למאגר. השתמש בערך הבא:
AccountEndpoint=http://localhost:8081/;AccountKey=C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==
הוסף את שם מסד הנתונים (COSMOSDB_DATABASE_NAME
) ושם האחסון (COSMOSDB_CONTAINER_NAME
) כ-משתנים של המאגר:
שכפל את המאגר שנכפל למחשב המקומי שלך (ודא שהשתמשת בשם המשתמש שלך ב-GitHub):
git clone https://github.com/<your-username>/cosmosdb-linux-emulator-github-actions.git
cd cosmosdb-linux-emulator-github-actions
הפעל את הזרימה
כדי להפעיל את הזרימה, עשה שינוי קטן לכל הקוד (.NET, Java, Python או Go), הוסף ושלח את השינויים שלך. לצורך הבנה קלה, זרימות עבודה נפרדות משמשות לכל שפת תכנות.
העלה את השינויים שלך למאגר השנכפל שלך ב-GitHub:
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