هناك العديد من الفوائد لاستخدام حاويات 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 Actions
دعونا نستعرض مثالًا لفهم كيفية استخدام محاكي Azure Cosmos DB مع GitHub Actions، وهو منصة التكامل المستمر والتسليم المستمر (CI/CD) التي تتيح لك أتمتة عملية البناء والاختبار والنشر باستخدام سير العمل. سير العمل هو عملية مؤتمتة قابلة للتكوين يمكن أن تقوم بتشغيل وظيفة واحدة أو أكثر. يتم تعريفه بواسطة ملف YAML يتم التحقق منه في مستودعك ويعمل عند تفعيله بواسطة حدث في مستودعك، أو يمكن تفعيله يدويًا أو وفق جدول محدد.
مثال: سير عمل CI لتطبيق .NET
يقوم هذا سير العمل الخاص بـ GitHub Actions بتكوين محاكي Azure Cosmos DB المستند إلى Linux كـ حاوية خدمة GitHub Actions كجزء من وظيفة. تتولى GitHub بدء تشغيل حاوية Docker وتدمرها عند انتهاء الوظيفة – لا حاجة للتدخل اليدوي (مثل تنفيذ أمر docker run).
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 وتستخدم صورة دوكر mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator:vnext-preview
كحاوية خدمة. يتم تكوين سلسلة الاتصال واسم قاعدة البيانات واسم الحاوية كمتغيرات بيئية. نظرًا لأن المهمة تعمل مباشرةً على منصة عملاء GitHub المستضافة، يمكن لخطوة “تشغيل الاختبارات” الوصول إلى المحاكي باستخدام localhost:8081
.
تتعلق خطوة تصدير شهادة محاكي Cosmos DB بتطبيقات .NET (بالإضافة إلى Java) نظرًا لعدم دعم SDKs .NET و Java في وضع
HTTP
في المحاكي حاليًا. يتم تعيين متغير البيئةPROTOCOL
إلى https في القسمservices
وتقوم هذه الخطوة بتصدير شهادة المحاكي وإضافتها إلى متجر الشهادات الموثوق به في نظام التشغيل.
جربها الآن!
يوفر هذا مستودع GitHub أمثلة على كيفية تكوين المحاكي على لينكس كجزء من سير عمل CI لـ GitHub Actions لتطبيقات .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-based أيضًا. إذا كنت تفكر في مشغلات Windows x64، فلاحظ أنه في وقت الكتابة، لا تدعم حاويات خدمة GitHub Actions على المشغلات غير اللينكس. لكن يمكنك التغلب على ذلك عن طريق إضافة خطوات لتثبيت Docker وإدارة دورة حياته، بما في ذلك بدء وإيقاف الحاوية.
ختامًا
كما ذكرت سابقًا، هناك العديد من الفوائد في استخدام حاويات Docker في أنابيب CI. تم استخدام GitHub Actions كمنصة CI/CD في هذه الحالة، ولكن هذه المفاهيم تنطبق أيضًا على حلول أخرى. جربها، وأخبرنا برأيك!
Source:
https://dzone.com/articles/use-azure-cosmos-db-as-a-docker-container-in-cicd