استخدم Azure Cosmos DB كحاوية Docker في أنابيب 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 Actions

دعونا نستعرض مثالًا لفهم كيفية استخدام محاكي Azure Cosmos DB مع GitHub Actions، وهو منصة التكامل المستمر والتسليم المستمر (CI/CD) التي تتيح لك أتمتة عملية البناء والاختبار والنشر باستخدام سير العمل. سير العمل هو عملية مؤتمتة قابلة للتكوين يمكن أن تقوم بتشغيل وظيفة واحدة أو أكثر. يتم تعريفه بواسطة ملف YAML يتم التحقق منه في مستودعك ويعمل عند تفعيله بواسطة حدث في مستودعك، أو يمكن تفعيله يدويًا أو وفق جدول محدد.

مثال: سير عمل CI لتطبيق .NET

يقوم هذا سير العمل الخاص بـ GitHub Actions بتكوين محاكي Azure Cosmos DB المستند إلى Linux كـ حاوية خدمة GitHub Actions كجزء من وظيفة. تتولى GitHub بدء تشغيل حاوية Docker وتدمرها عند انتهاء الوظيفة – لا حاجة للتدخل اليدوي (مثل تنفيذ أمر docker run).

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 وتستخدم صورة دوكر 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) كسر من أسرار المستودع. استخدم القيمة التالية:

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-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