تمرين - نشر وحدة إلى أحد السجلات

مكتمل

في شركة الألعاب خاصتك، كنت تنشر وحدات Bicep خاصتك في سجل. لقد شغلت عملية النشر يدوياً من حاسوبك الخاص. الآن، تريد إنشاء سير عمل للتعامل مع عملية النشر.

في هذا التمرين، ستقوم بما يلي:

  • بادر بإنشاء سجل حاوية لوحدات Bicep خاصتك.
  • أضِف مهمة تحليل الأخطاء إلى سير العمل.
  • أضِف مهمة سير عمل لنشر الوحدة إلى سجلك.
  • تحقق من تشغيل سير عملك بنجاح.
  • تحقق من الوحدة المنشورة في سجلك الخاص.

إنشاء سجل حاويات

قبل أن تتمكن من نشر الوحدات، يتعين إنشاء سجل لتستخدمه مؤسستك. هنا، يمكنك استخدام مدخل Azure لإنشاء سجل.

  1. في متصفحك، بادر بإنشاء سجل حاوية جديد داخل مدخل Azure.

  2. في علامة التبويب Basics، حدد اشتراكك المستهدف ومجموعة موارد ToyReusable التي أنشأتها سابقاً.

  3. أدخل اسمًا لسجلك وموقعًا قريبًا منك.

    هام

    يجب أن يكون اسم التسجيل فريداً داخل Azure وأن يحتوي على 5-50 حرفاً أبجدياً رقمياً. تشير علامة الاختيار الموجودة بجوار اسم السجل إلى توفر الاسم الذي اخترته.

  4. بالنسبة لـ" SKU"، حدد " Basic".

    اترك القيم الافتراضية لإعدادات التكوين الأخرى.

  5. حدد "Review + create".

    Screenshot of the Azure portal that shows the container registry creation page.

  6. راجع الإعدادات تعرض التحقق من الصحة الذي تم تمريره ثم حدد إنشاء.

    انتظر حتى ينتهي التوزيع، والذي يستغرق عادةً من دقيقة إلى دقيقتين.

  7. عند ظهور رسالة Deployment succeeded، حدد Go to resource لفتح سجل الحاوية.

    Screenshot of the Azure portal that shows the container registry deployment, with the button for going to a resource highlighted.

  8. في منطقة Overview الخاصة بسجل الحاويات، لاحظ قيمة إعداد Login server. الاسم مثل yourregistryname.azurecr.io.

    Screenshot of the Azure portal that shows the container registry's details, with the login server highlighted.

    ستحتاج إلى هذه القيمة قريباً.

أضف ملف بيانات تعريف الوحدة

في الوحدة السابقة، تعلمت أهمية وجود استراتيجية تعيين الإصدار لوحداتك. تعلمت أيضاً كيفية استخدام ملفات بيانات التعريف الخاصة بالوحدة لتحديد رقم الإصدار الرئيسي والثانوي لوحدتك داخل سير العمل. هنا، يمكنك إضافة ملف بيانات التعريف لوحدة حساب التخزين خاصتك.

  1. في Visual Studio Code، قم بتوسيع المجلد modules /storage-account في جذر المستودع الخاص بك.

  2. بادر بإنشاء ملف جديد باسم metadata.json.

    Screenshot of Visual Studio Code that shows the location of the metadata dot J S O N file.

  3. أضف المحتوى التالي إلى الملف:

    {
      "version": {
        "major": 1,
        "minor": 2
      }
    }
    

    لاحظ أنه في ملف بيانات التعريف، يمكنك تحديد أرقام الإصدارات الرئيسية والثانوية بشكل منفصل. يجمع سير العمل بين هذه الأرقام ورقم تشغيل سير العمل، في رقم إصدار كامل، في كل مرة يتم فيها تشغيل سير العمل.

  4. حفظ التغييرات الخاصة بك على الملف.

حدِّث تعريف سير عملك وأضِف مهمة تحليل الأخطاء

يحتوي مستودعك على مسودة سير العمل التي يمكنك استخدامها لتكون نقطة بداية.

  1. في Visual Studio Code، قم بتوسيع المجلد .github/workflows في جذر المستودع.

  2. افتح ملف module-storage-account.yml.

    Screenshot of Visual Studio Code that shows the location of the workflow definition file.

  3. تحديث قيمة MODULE_REGISTRY_SERVER متغير البيئة إلى اسم خادم سجل الحاوية. لقد نسخت هذا الاسم في وقتٍ سابقٍ من هذا التمرين.

    على سبيل المثال، إذا كان خادم تسجيل الدخول الخاص بالسجل الخاص بك yourregistryname.azurecr.io، فإن التعليمات البرمجية الخاصة بك مثل هذا المثال:

    env:
      MODULE_NAME: storage-account
      MODULE_REGISTRY_SERVER: yourregistryname.azurecr.io
      MODULE_FILE_PATH: modules/storage-account/main.bicep
      MODULE_METADATA_FILE_PATH: modules/storage-account/metadata.json
    
  4. في أسفل الملف، بالنسبة لتعليق To be added، أضِف تعريف مهمة تحليل الأخطاء التالي:

    jobs:
      lint:
        runs-on: ubuntu-latest
        steps:
        - uses: actions/checkout@v3
        - name: Run Bicep linter
          run: az bicep build --file ${{ env.MODULE_FILE_PATH }}
    

أضِف مهمة الإبلاغ عن النشر إلى سير عملك

الآن، يمكنك إضافة مهمة ثانية لنشر الوحدة إلى سجل الحاوية خاصتك.

  1. في أسفل ملف module-storage-account.yml، أضِف الجزء الأول من تعريف مهمة النشر.

    publish:
      runs-on: ubuntu-latest
      needs: [ lint ]
      steps:
      - uses: actions/checkout@v3
      - uses: azure/login@v1
        name: Sign in to Azure
        with:
          client-id: ${{ secrets.AZURE_CLIENT_ID }}
          tenant-id: ${{ secrets.AZURE_TENANT_ID }}
          subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
    

    تسحب الخطوات من التعليمات البرمجية من مستودعك وتسجل الدخول إلى Azure.

  2. أسفل التعليمة البرمجية التي أضفتها للتو، أضِف خطوة لقراءة رقم الإصدار من ملف metadata.json الخاص بوحدتك وبادر بتعيينه ليكون أحد متغيرات البيئة.

    - name: Get module version number
      run: |
        majorMinorVersionNumber=$(jq '(.version.major | tostring) + "." + (.version.minor | tostring)' ${{ env.MODULE_METADATA_FILE_PATH }} -r )
        versionNumber="$majorMinorVersionNumber.${{ github.run_number }}"
        echo "MODULE_VERSION=$versionNumber" >> $GITHUB_ENV
    

    تشغل الخطوة برنامجاً نصياً يستخدم تطبيق سطر الأوامر jq لتوزيع ملف JSON.

  3. بعد الخطوة التي قمت بإنشائها، أضف خطوة لنشر الوحدة النمطية إلى السجل.

    - uses: azure/cli@v1
      name: Publish module
      with:
        inlineScript: |
          az bicep publish \
            --target 'br:${{ env.MODULE_REGISTRY_SERVER }}/${{ env.MODULE_NAME }}:${{ env.MODULE_VERSION }}' \
            --file ${{ env.MODULE_FILE_PATH }}
    

    لاحظ أن هذه الخطوة تنشئ قيمة الوسيطة --target ديناميكياً. إنه يجمع بين قيمة خادم السجل واسم الوحدة ورقم الإصدار.

  4. حفظ التغييرات الخاصة بك على الملف.

تحقق من تعريف سير العمل الخاص بك ونفذه

  1. تحقق من أن ملف module-storage-account.yml خاصتك يبدو كالمثال التالي:

    name: module-storage-account
    concurrency: module-storage-account
    
    on:
      workflow_dispatch:
      push:
        branches:
          - main
        paths:
          - 'modules/storage-account/**'
    
    permissions:
      id-token: write
      contents: read
    
    env:
      MODULE_NAME: storage-account
      MODULE_REGISTRY_SERVER: yourregistryname.azurecr.io
      MODULE_FILE_PATH: modules/storage-account/main.bicep
      MODULE_METADATA_FILE_PATH: modules/storage-account/metadata.json
    
    jobs:
      lint:
        runs-on: ubuntu-latest
        steps:
        - uses: actions/checkout@v3
        - name: Run Bicep linter
          run: az bicep build --file ${{ env.MODULE_FILE_PATH }}
    
      publish:
        runs-on: ubuntu-latest
        needs: [ lint ]
        steps:
        - uses: actions/checkout@v3
        - uses: azure/login@v1
          name: Sign in to Azure
          with:
            client-id: ${{ secrets.AZURE_CLIENT_ID }}
            tenant-id: ${{ secrets.AZURE_TENANT_ID }}
            subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
        - name: Get module version number
          run: |
            majorMinorVersionNumber=$(jq '(.version.major | tostring) + "." + (.version.minor | tostring)' ${{ env.MODULE_METADATA_FILE_PATH }} -r )
            versionNumber="$majorMinorVersionNumber.${{ github.run_number }}"
            echo "MODULE_VERSION=$versionNumber" >> $GITHUB_ENV
        - uses: azure/cli@v1
          name: Publish module
          with:
            inlineScript: |
              az bicep publish \
                --target 'br:${{ env.MODULE_REGISTRY_SERVER }}/${{ env.MODULE_NAME }}:${{ env.MODULE_VERSION }}' \
                --file ${{ env.MODULE_FILE_PATH }}
    

    إذا لم يكن كذلك، فقم بتحديثه ليطابق هذا المثال، ثم احفظه.

  2. قم بتثبيت التغييرات ودفعها إلى مستودع Git الخاص بك عن طريق تشغيل الأوامر التالية في المحطة الطرفية لتعليمة Visual Studio البرمجية:

    git add .
    git commit -m "Add lint and publish jobs to storage account module workflow"
    git push
    

تشغيل مسار العمل

  1. في متصفحك، انتقل إلى مستودع GitHub خاصتك وحدد علامة التبويب Actions.

  2. حدد سير عمل module-storage-account.

    لاحظ أن تشغيل سير عمل قيد التقدم بالفعل. تم تشغيل مشغل الدفع لأنك عدلت ملف metadata.json داخل مجلد الوحدة.

  3. حدد أحدث تشغيل في القائمة.

    Screenshot of GitHub that highlights the latest run of the module's workflow.

    انتظر سير العمل حتى ينتهي. تُنشر الوحدة Bicep إلى سجل الحاوية خاصتك.

    لاحظ رقم تشغيل سير العمل، والذي ربما يكون 3.

مراجعة الوحدة في السجل

يمكنك أيضاً عرض الوحدة المنشورة في مدخل Azure.

  1. في المستعرض لديك، انتقل إلى مدخل Azure.

  2. انتقل إلى مجموعة موارد ToyReusable.

  3. حدد سجل الحاوية الذي أنشأته مُسبقاً.

  4. حدد Repositories من القائمة. ثم حدد مستودع modules\storage-account، الذي يمثل سير العمل الذي نشرته البنية الأساسية.

    Screenshot of the Azure portal that shows a Bicep module in the container registry.

    لاحظ أن هناك علامة واحدة تتطابق مع رقم إصدار الوحدة التي نشره سير العمل لديك. يتطابق الإصدار الرئيسي (1) والإصدار الثانوي (2) مع أرقام الإصدارات التي حددتها في ملف metadata.json. يطابق عدد المراجعة (3) رقم تشغيل سير العمل.

تفريغ مجموعة الموارد

الآن بعد الانتهاء من التمرين، يمكنك إزالة الموارد حتى لا تتم محاسبتك عليها.

في المحطة الطرفية لتعليمة Visual Studio البرمجية، شغِّل الأمر التالي:

az group delete --resource-group ToyReusable --yes --no-wait

يتم حذف مجموعة الموارد في الخلفية.

Remove-AzResourceGroup -Name ToyReusable -Force

يمكنك أيضا إزالة أسرار GitHub والمستودع وهويات حمل عمل Azure.

  • البيانات السرية في GitHub

    1. من مستودع GitHub، انتقل إلى الإعدادات> Secrets والمتغيرات>Actions.
    2. حدد إزالة البيانات السرية لكل سر مستودع واتبع المطالبات.
  • مستودع GitHub

    1. انتقل إلى الإعدادات> General
    2. حدد حذف هذا المستودع واتبع المطالبات.
  • بيانات اعتماد تسجيل تطبيق Azure الموحدة ومدير الخدمة.

    1. من الصفحة الرئيسية للمدخل، ابحث عن Azure Active Directory وحدده من قائمة الخدمات.
    2. انتقل إلى إدارة>تسجيلات التطبيقات.
    3. في التطبيقات المملوكة ، حدد toy-reusable.
    4. حدد حذف واتبع المطالبات.
    5. حدد التطبيقات المحذوفة لحذف تسجيل التطبيق نهائيا.

    هام

    من الممكن أن يكون لديك تسجيل تطبيق مكرر وأسماء كيان الخدمة. يوصى بالتحقق من معرف التطبيق للتأكد من حذف المورد الصحيح.