استخدام Azure Spring Apps CI/CD مع إجراءات GitHub
إشعار
سيتم إهمال الخطط الأساسية والقياسية والمؤسسة بدءا من منتصف مارس 2025، مع فترة تقاعد 3 سنوات. نوصي بالانتقال إلى Azure Container Apps. لمزيد من المعلومات، راجع إعلان إيقاف Azure Spring Apps.
سيتم إهمال الاستهلاك القياسي والخطة المخصصة بدءا من 30 سبتمبر 2024، مع إيقاف التشغيل الكامل بعد ستة أشهر. نوصي بالانتقال إلى Azure Container Apps. لمزيد من المعلومات، راجع ترحيل استهلاك Azure Spring Apps القياسي وخطة مخصصة إلى Azure Container Apps.
تنطبق هذه المقالة على: ✔️ 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 للنسخ، وحدد علامة التبويب «إعدادات». افتح قائمة «أسرار»، وحدد «سر جديد»:
قم بتعيين الاسم السري إلى AZURE_CREDENTIALS
وقيمته إلى سلسلة JSON التي عثرت عليها ضمن العنوان «إعداد مستودع GitHub والمصادقة».
كما يمكنك أيضا الحصول على بيانات اعتماد تسجيل الدخول إلى 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، وحدد علامة التبويب Settings . افتح قائمة Secrets ، وحدد Add a new secret:
قم بتعيين الاسم السري إلى AZURE_CREDENTIALS
وقيمته إلى سلسلة JSON التي عثرت عليها ضمن العنوان «إعداد مستودع GitHub والمصادقة».
كما يمكنك أيضا الحصول على بيانات اعتماد تسجيل الدخول إلى 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:
إذا تم تنفيذ الإجراء عن طريق الخطأ، على سبيل المثال، إذا لم تقم بتعيين بيانات اعتماد Azure، يمكنك إعادة تشغيل عمليات التحقق بعد إصلاح الخطأ. في صفحة مستودع GitHub، حدد Actions، وحدد مهمة سير العمل المحددة، ثم حدد الزر Rerun Checks لإعادة تشغيل عمليات التحقق: