استخدام Azure Spring Apps CI/CD مع إجراءات GitHub

إشعار

يعد Azure Spring Apps هو الاسم الجديد لخدمة Azure Spring Cloud. رغم أن الخدمة تحمل اسماً جديداً، سترى الاسم القديم في بعض الأماكن لفترة من الوقت بينما نعمل على تحديث الأصول مثل لقطات الشاشة، ومقاطع الفيديو، والرسوم التخطيطية.

تنطبق هذه المقالة على: ✔️ Basic/Standard ✔️ Enterprise

توضح هذه المقالة كيفية إنشاء سير عمل CI/CD لـAzure Spring Apps باستخدام إجراءات GitHub.

تدعم إجراءات GitHub سير عمل دورة حياة تطوير البرامج التلقائية. يمكنك، باستخدام إجراءات GitHub لـ Azure Spring Apps، إنشاء مهام سير العمل في المستودع لإنشاء التطبيقات واختبارها وحزمها وإصدارها ونشرها في Azure.

المتطلبات الأساسية

يتطلب هذا المثال Azure CLI.

إعداد مستودع GitHub والمصادقة

تحتاج إلى بيانات اعتماد كيان خدمة Azure لتخويل إجراء تسجيل الدخول إلى Azure. للحصول على بيانات اعتماد Azure، نفذ الأوامر التالية على جهازك المحلي:

az login
az ad sp create-for-rbac \
    --role contributor \
    --scopes /subscriptions/<SUBSCRIPTION_ID> \
    --json-auth

للوصول إلى مجموعة موارد محددة، يمكنك تقليل النطاق:

az ad sp create-for-rbac \
    --role contributor \
    --scopes /subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP> \
    --json-auth

يجب أن يُخرج الأمر كائن JSON:

{
    "clientId": "<GUID>",
    "clientSecret": "<GUID>",
    "subscriptionId": "<GUID>",
    "tenantId": "<GUID>",
    ...
}

يستخدم هذا المثال عينة steeltoe على GitHub. انسخ المستودع، وافتح صفحة مستودع GitHub للنسخ، وحدد علامة التبويب «إعدادات». افتح قائمة «أسرار»، وحدد «سر جديد»:

Screenshot of the GitHub Actions secrets and variables page with the New repository secret button highlighted.

قم بتعيين الاسم السري إلى AZURE_CREDENTIALS وقيمته إلى سلسلة JSON التي عثرت عليها ضمن العنوان «إعداد مستودع GitHub والمصادقة».

Screenshot of the GitHub Actions secrets / New secret page.

كما يمكنك أيضا الحصول على بيانات اعتماد تسجيل الدخول إلى Azure من Key Vault في إجراءات GitHub كما هو مبين في مصادقة Azure Spring مع Key Vault في إجراءات GitHub .

مثيل تكوين إعدادات تشغيل الخدمة

لتكوين إعدادات مثيل خدمة Azure Spring Apps، قم بتشغيل الأوامر التالية باستخدام Azure CLI.

az extension add --name spring
az group create \
    --name <resource-group-name> \
    --location eastus 
az spring create \
    --resource-group <resource-group-name> \
    --name <service-instance-name> 
az spring config-server git set \
    --name <service-instance-name> \
    --uri https://github.com/Azure-Samples/azure-spring-apps-samples \
    --label main \
    --search-paths steeltoe-sample/config

إنشاء سير العمل

يتم تعريف سير العمل باستخدام الخيارات التالية.

الاستعداد للنشر باستخدام Azure CLI

الأمر az spring app create غير متكرر حاليا. بعد تشغيله مرة واحدة، تحصل على خطأ إذا قمت بتشغيل نفس الأمر مرة أخرى. نوصي بسير العمل هذا على تطبيقات ومثيلات Azure Spring Apps الموجودة.

استخدم أوامر Azure CLI التالية للتجهيز:

az config set defaults.group=<service-group-name>
az config set defaults.spring=<service-instance-name>
az spring app create --name planet-weather-provider
az spring app create --name solar-system-weather

انشر باستخدام Azure CLI مباشرة

قم بإنشاء ملف .github/workflows/main.yml في المستودع باستخدام المحتوى التالي. استبدل <اسم مجموعة الموارد><واسم الخدمة> بالقيم الصحيحة.

name: Steeltoe-CD

# Controls when the action runs. Triggers the workflow on push or pull request
# events but only for the main branch
on:
  push:
    branches: [ main]

# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
  # This workflow contains a single job called "build"
  build:
    # The type of runner that the job runs on
    runs-on: ubuntu-latest
    env:
      working-directory: ./steeltoe-sample
      resource-group-name: <your resource group name>
      service-name: <your service name>

    # Supported .NET Core version matrix.
    strategy:
      matrix:
        dotnet: [ '3.1.x' ]

    # Steps represent a sequence of tasks that is executed as part of the job
    steps:
      # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
      - uses: actions/checkout@v2

      # Set up .NET Core 3.1 SDK
      - uses: actions/setup-dotnet@v1
        with:
          dotnet-version: ${{ matrix.dotnet }}

      # Set credential for az login
      - uses: azure/login@v1.1
        with:
          creds: ${{ secrets.AZURE_CREDENTIALS }}

      - name: install Azure CLI extension
        run: |
          az extension add --name spring --yes

      - name: Build and package planet-weather-provider app
        working-directory: ${{env.working-directory}}/src/planet-weather-provider
        run: |
          dotnet publish
          az spring app deploy -n planet-weather-provider --runtime-version NetCore_31 --main-entry Microsoft.Azure.SpringCloud.Sample.PlanetWeatherProvider.dll --artifact-path ./publish-deploy-planet.zip -s ${{ env.service-name }} -g ${{ env.resource-group-name }}
      - name: Build solar-system-weather app
        working-directory: ${{env.working-directory}}/src/solar-system-weather
        run: |
          dotnet publish
          az spring app deploy -n solar-system-weather --runtime-version NetCore_31 --main-entry Microsoft.Azure.SpringCloud.Sample.SolarSystemWeather.dll --artifact-path ./publish-deploy-solar.zip -s ${{ env.service-name }} -g ${{ env.resource-group-name }}

إعداد مستودع GitHub والمصادقة

تحتاج إلى بيانات اعتماد كيان خدمة Azure لتخويل إجراء تسجيل الدخول إلى Azure. للحصول على بيانات اعتماد Azure، نفذ الأوامر التالية على جهازك المحلي:

az login
az ad sp create-for-rbac \
    --role contributor \
    --scopes /subscriptions/<SUBSCRIPTION_ID> \
    --json-auth

للوصول إلى مجموعة موارد محددة، يمكنك تقليل النطاق:

az ad sp create-for-rbac \
    --role contributor \
    --scopes /subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP> \
    --json-auth

يجب أن يُخرج الأمر كائن JSON:

{
    "clientId": "<GUID>",
    "clientSecret": "<GUID>",
    "subscriptionId": "<GUID>",
    "tenantId": "<GUID>",
    ...
}

يستخدم هذا المثال عينة PiggyMetrics على GitHub. قم بنسخ النموذج، وقم بإلغاء تحديد نسخ فرع Azure فقط، وافتح صفحة مستودع GitHub، وحدد علامة التبويب الإعدادات. افتح قائمة الأسرار، وحدد إضافة سر جديد:

Screenshot of the GitHub Actions secrets and variables page with the New repository secret button highlighted.

قم بتعيين الاسم السري إلى AZURE_CREDENTIALS وقيمته إلى سلسلة JSON التي عثرت عليها ضمن العنوان «إعداد مستودع GitHub والمصادقة».

Screenshot of the GitHub Actions secrets / New secret page.

كما يمكنك أيضا الحصول على بيانات اعتماد تسجيل الدخول إلى Azure من Key Vault في إجراءات GitHub كما هو مبين في مصادقة Azure Spring مع Key Vault في إجراءات GitHub .

مثيل تكوين إعدادات تشغيل الخدمة

لتكوين إعدادات مثيل خدمة Azure Spring Apps، قم بتشغيل الأوامر التالية باستخدام Azure CLI.

az extension add --name spring
az group create --location eastus --name <resource group name>
az spring create -n <service instance name> -g <resource group name>
az spring config-server git set -n <service instance name> --uri https://github.com/xxx/piggymetrics --label config

مهام سير عمل العينة من طرف إلى طرف

توضح الأمثلة التالية سيناريوهات الاستخدام الشائعة.

النشر

تعرض لك المقاطع التالية خيارات متنوعة لنشر تطبيقك.

للإنتاج

تدعم Azure Spring Apps النشر إلى عمليات النشر باستخدام البيانات الاصطناعية المضمنة (على سبيل المثال، JAR أو .NET Core ZIP) أو أرشيف التعليمات البرمجية المصدر.

ينشر المثال التالي في نشر الإنتاج الافتراضي في Azure Spring Apps باستخدام ملف JAR تم إنشاؤه بواسطة Maven. هذا المثال هو سيناريو النشر الوحيد الممكن عند استخدام SKU الأساسي:

إشعار

يجب أن يرجع نمط البحث في الحزمة حزمة واحدة فقط. إذا كانت مهمة الإنشاء تنتج حزم JAR متعددة مثل sources.jar javadoc.jar، تحتاج إلى تحسين نمط البحث بحيث يطابق فقط البيانات الاصطناعية الثنائية للتطبيق.

name: AzureSpringApps
on: push
env:
  ASC_PACKAGE_PATH: ${{ github.workspace }}
  AZURE_SUBSCRIPTION: <azure subscription name>

jobs:
  deploy_to_production:
    runs-on: ubuntu-latest
    name: deploy to production with artifact
    steps:
      - name: Checkout GitHub Action
        uses: actions/checkout@v2

      - name: Set up Java 11
        uses: actions/setup-java@v3
        with:
          distribution: 'temurin'
          java-version: '11'

      - name: maven build, clean
        run: |
          mvn clean package

      - name: Login via Azure CLI
        uses: azure/login@v1
        with:
          creds: ${{ secrets.AZURE_CREDENTIALS }}

      - name: deploy to production with artifact
        uses: azure/spring-apps-deploy@v1
        with:
          azure-subscription: ${{ env.AZURE_SUBSCRIPTION }}
          action: Deploy
          service-name: <service instance name>
          app-name: <app name>
          use-staging-deployment: false
          package: ${{ env.ASC_PACKAGE_PATH }}/**/*.jar

ينشر المثال التالي في نشر الإنتاج الافتراضي في Azure Spring Apps باستخدام التعليمات البرمجية المصدر.

name: AzureSpringApps
on: push
env:
  ASC_PACKAGE_PATH: ${{ github.workspace }}
  AZURE_SUBSCRIPTION: <azure subscription name>

jobs:
  deploy_to_production:
    runs-on: ubuntu-latest
    name: deploy to production with source code
    steps:
      - name: Checkout GitHub Action
        uses: actions/checkout@v2

      - name: Login via Azure CLI
        uses: azure/login@v1
        with:
          creds: ${{ secrets.AZURE_CREDENTIALS }}

      - name: deploy to production step with source code
        uses: azure/spring-apps-deploy@v1
        with:
          azure-subscription: ${{ env.AZURE_SUBSCRIPTION }}
          action: deploy
          service-name: <service instance name>
          app-name: <app name>
          use-staging-deployment: false
          package: ${{ env.ASC_PACKAGE_PATH }}

ينشر المثال التالي إلى نشر الإنتاج الافتراضي في Azure Spring Apps باستخدام التعليمات البرمجية المصدر في خطة المؤسسة. يمكنك تحديد المنشئ الذي يجب استخدامه لنشر الإجراءات باستخدام builder الخيار .

name: AzureSpringApps
on: push
env:
  ASC_PACKAGE_PATH: ${{ github.workspace }}
  AZURE_SUBSCRIPTION: <azure subscription name>

jobs:
  deploy_to_production:
    runs-on: ubuntu-latest
    name: deploy to production with source code
    steps:
      - name: Checkout GitHub Action
        uses: actions/checkout@v2

      - name: Login via Azure CLI
        uses: azure/login@v1
        with:
          creds: ${{ secrets.AZURE_CREDENTIALS }}

      - name: deploy to production step with source code in the Enterprise plan
        uses: azure/spring-apps-deploy@v1
        with:
          azure-subscription: ${{ env.AZURE_SUBSCRIPTION }}
          action: deploy
          service-name: <service instance name>
          app-name: <app name>
          use-staging-deployment: false
          package: ${{ env.ASC_PACKAGE_PATH }}
          builder: <builder>

ينشر المثال التالي إلى نشر الإنتاج الافتراضي في Azure Spring Apps مع صورة حاوية موجودة.

name: AzureSpringApps
on: push
env:
  ASC_PACKAGE_PATH: ${{ github.workspace }}
  AZURE_SUBSCRIPTION: <azure subscription name>

jobs:
  deploy_to_production:
    runs-on: ubuntu-latest
    name: deploy to production with source code
    steps:
      - name: Checkout GitHub Action
        uses: actions/checkout@v2

      - name: Login via Azure CLI
        uses: azure/login@v1
        with:
          creds: ${{ secrets.AZURE_CREDENTIALS }}

      - name: Deploy Custom Image
        uses: Azure/spring-apps-deploy@v1
        with:
          azure-subscription: ${{ env.AZURE_SUBSCRIPTION }}
          action: deploy
          service-name: <service instance name>
          app-name: <app name>
          deployment-name: <deployment name>
          container-registry: <your container image registry>
          registry-username: ${{ env.REGISTRY_USERNAME }}
          registry-password: ${{ secrets.REGISTRY_PASSWORD }}
          container-image: <your image tag>

أثناء النشر، يمكنك تحقيق المزيد من الوظائف باستخدام المزيد من الوسيطات. لمزيد من المعلومات، راجع قسم الوسائط في GitHub Action للنشر في Azure Spring Apps.

أزرق-أخضر

يتم نشر الأمثلة التالية بنشر مرحلي موجود. لا يتلقى هذا النشر حركة مرور الإنتاج حتى يتم تعيينه كنشر إنتاج. يمكنك تعيين use-staging-deployment بشكل صحيح للعثور على النشر المرحلي تلقائيا أو تخصيص اسم نشر محدد فقط. ونركز فقط على spring-apps-deploy الإجراء ونترك الوظائف التحضيرية في بقية المادة.

# environment preparation configurations omitted
    steps:
      - name: blue green deploy step use-staging-deployment
        uses: azure/spring-apps-deploy@v1
        with:
          azure-subscription: ${{ env.AZURE_SUBSCRIPTION }}
          action: deploy
          service-name: <service instance name>
          app-name: <app name>
          use-staging-deployment: true
          package: ${{ env.ASC_PACKAGE_PATH }}/**/*.jar
# environment preparation configurations omitted
    steps:
      - name: blue green deploy step with deployment-name
        uses: azure/spring-apps-deploy@v1
        with:
          azure-subscription: ${{ env.AZURE_SUBSCRIPTION }}
          action: deploy
          service-name: <service instance name>
          app-name: <app name>
          deployment-name: staging
          package: ${{ env.ASC_PACKAGE_PATH }}/**/*.jar

لمزيد من المعلومات حول عمليات النشر الأزرق-الأخضر، بما في ذلك النهج البديل، راجع استراتيجيات النشر الأزرق-الأخضر.

تعيين نشر الإنتاج

يعين المثال التالي التوزيع المرحلي الحالي كتشغيل، ما يؤدي إلى تبديل التوزيع الذي يتلقى حركة مرور الإنتاج بشكل فعال.

# environment preparation configurations omitted
    steps:
      - name: set production deployment step
        uses: azure/spring-apps-deploy@v1
        with:
          azure-subscription: ${{ env.AZURE_SUBSCRIPTION }}
          action: set-production
          service-name: <service instance name>
          app-name: <app name>
          use-staging-deployment: true

حذف نشر مرحلي

Delete Staging Deployment يسمح لك الإجراء بحذف التوزيع الذي لا يتلقى حركة مرور الإنتاج. يحرر هذا الحذف الموارد التي يستخدمها هذا النشر ويفسح المجال لنشر مرحلي جديد:

# environment preparation configurations omitted
    steps:
      - name: Delete staging deployment step
        uses: azure/spring-apps-deploy@v1
        with:
          azure-subscription: ${{ env.AZURE_SUBSCRIPTION }}
          action: delete-staging-deployment
          service-name: <service instance name>
          app-name: <app name>

إنشاء أو تحديث البنية (خطة المؤسسة فقط)

ينشئ المثال التالي مورد بناء أو يحدثه في خطة المؤسسة:

# environment preparation configurations omitted
    steps:
      - name: Create or update build
        uses: azure/spring-apps-deploy@v1
        with:
          azure-subscription: ${{ env.AZURE_SUBSCRIPTION }}
          action: build
          service-name: <service instance name>
          build-name: <build name>
          package: ${{ env.ASC_PACKAGE_PATH }}
          builder: <builder>

حذف البنية (خطة المؤسسة فقط)

يحذف المثال التالي مورد بناء في خطة المؤسسة:

# environment preparation configurations omitted
    steps:
      - name: Delete build
        uses: azure/spring-apps-deploy@v1
        with:
          azure-subscription: ${{ env.AZURE_SUBSCRIPTION }}
          action: delete-build
          service-name: <service instance name>
          build-name: <build name>

النشر باستخدام Maven Plugin

خيار آخر هو استخدام Maven Plugin لنشر Jar وتحديث إعدادات التطبيق. الأمر mvn azure-spring-apps:deploy غير متكرر وينشئ التطبيقات تلقائيا إذا لزم الأمر. لا تحتاج إلى إنشاء تطبيقات مطابقة مسبقا.

name: AzureSpringApps
on: push

jobs:
  build-and-deploy:
    runs-on: ubuntu-latest
    steps:

    - uses: actions/checkout@main

    - name: Set up Java 11
      uses: actions/setup-java@v3
      with:
        distribution: 'temurin'
        java-version: '11'

    - name: maven build, clean
      run: |
        mvn clean package -DskipTests

    # Maven plugin can cosume this authentication method automatically
    - name: Azure Login
      uses: azure/login@v1
      with:
        creds: ${{ secrets.AZURE_CREDENTIALS }}

    # Maven deploy, make sure you have correct configurations in your pom.xml
    - name: deploy to Azure Spring Apps using Maven
      run: |
        mvn azure-spring-apps:deploy

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

يجب تمكين إجراءات GitHub تلقائيا بعد دفع .github/workflow/main.yml إلى GitHub. يتم تشغيل الإجراء عند دفع تثبيت جديد. في حالة إنشاء هذا الملف في المستعرض، يجب أن يكون الإجراء قد تم تشغيله بالفعل.

للتحقق من تمكين الإجراء، حدد علامة التبويب Actions في صفحة مستودع GitHub:

Screenshot of the GitHub Actions tab showing the All workflows section.

إذا تم تنفيذ الإجراء عن طريق الخطأ، على سبيل المثال، إذا لم تقم بتعيين بيانات اعتماد Azure، يمكنك إعادة تشغيل عمليات التحقق بعد إصلاح الخطأ. في صفحة مستودع GitHub، حدد Actions، وحدد مهمة سير العمل المحددة، ثم حدد الزر Rerun Checks لإعادة تشغيل عمليات التحقق:

Screenshot of the GitHub Actions tab with the Re-run checks button highlighted.

الخطوات التالية