استخدم إجراءات GitHub لأتمتة سير العمل والنشر إلى Azure App Service من GitHub.
المتطلبات الأساسية
إعداد نشر إجراءات GitHub عند إنشاء تطبيق
يتم دمج نشر GitHub Actions في عملية إنشاء تطبيق ويب الافتراضية. قم بتعيين النشر المستمر إلى تمكين في علامة التبويب Deployment ، وقم بتكوين المؤسسة والمستودع والفرع الذي اخترته.
عند تمكين النشر المستمر، تختار عملية إنشاء تطبيق ويب تلقائيا أسلوب المصادقة استنادا إلى تحديد المصادقة الأساسي وتكوين تطبيقك ومستودع GitHub وفقا لذلك:
إشعار
عند إنشاء تطبيق، قد تتلقى خطأ ينص على أن حساب Azure الخاص بك ليس لديه أذونات معينة. قد يحتاج حسابك إلى الأذونات المطلوبة لإنشاء الهوية المعينة من قبل المستخدم وتكوينها. للحصول على بديل، راجع القسم التالي.
إعداد نشر إجراءات GitHub من مركز النشر
بالنسبة لتطبيق موجود، يمكنك البدء بسرعة في GitHub Actions باستخدام Deployment Center في App Service. ينشئ أسلوب تسليم المفتاح هذا ملف سير عمل GitHub Actions استنادا إلى مكدس التطبيق الخاص بك ويلتزم به في مستودع GitHub الخاص بك.
باستخدام Deployment Center، يمكنك أيضا تكوين مصادقة OpenID Connect الأكثر أمانا بسهولة باستخدام هوية معينة من قبل المستخدم. لمزيد من المعلومات، راجع خيار الهوية المعينة من قبل المستخدم.
إذا كان حساب Azure الخاص بك يحتوي على الأذونات المطلوبة، يمكنك إنشاء هوية معينة من قبل المستخدم. وإلا، يمكنك تحديد هوية مدارة معينة من قبل المستخدم موجودة في القائمة المنسدلة Identity . يمكنك العمل مع مسؤول Azure لإنشاء هوية مدارة معينة من قبل المستخدم مع دور المساهم في موقع الويب.
لمزيد من المعلومات، راجع النشر المستمر إلى Azure App Service.
إعداد سير عمل GitHub Actions يدويا
يمكنك نشر سير عمل دون استخدام Deployment Center. نفذ هذه الخطوات الثلاث:
-
إنشاء بيانات اعتماد التوزيع.
-
تكوين سر GitHub.
-
أضف ملف سير العمل إلى مستودع GitHub الخاص بك.
تعيين بيانات اعتماد النشر
نوصي باستخدام OpenID Connect للمصادقة مع Azure App Service ل GitHub Actions. يستخدم أسلوب المصادقة هذا رموزا مميزة قصيرة الأجل. يعد إعداد OpenID Connect باستخدام GitHub Actions أكثر تعقيدا ولكنه يوفر أمانا مشددا.
يمكنك أيضا المصادقة باستخدام هوية مدارة معينة من قبل المستخدم أو كيان خدمة أو ملف تعريف نشر.
يصف الإجراء التالي خطوات إنشاء تطبيق Microsoft Entra، وأساس الخدمة، وبيانات الاعتماد الموحدة باستخدام عبارات Azure CLI. لمعرفة كيفية إنشاء تطبيق Microsoft Entra، ومدير الخدمة، وبيانات الاعتماد الموحدة في مدخل Microsoft Azure، راجع اتصال GitHub وAzure.
إذا لم يكن لديك تطبيق موجود، فسجل تطبيق Microsoft Entra جديد ومدير خدمة يمكنه الوصول إلى الموارد. إنشاء تطبيق Microsoft Entra.
az ad app create --display-name myApp
يقوم هذا الأمر بإرجاع إخراج JSON مع appId الذي هو الخاص بك client-id. احفظ القيمة لاستخدامها كـ AZURE_CLIENT_ID سر GitHub لاحقًا.
يمكنك استخدام objectId القيمة عند إنشاء بيانات اعتماد موحدة باستخدام واجهة برمجة تطبيقات Graph والإشارة إليها ك APPLICATION-OBJECT-ID.
إنشاء كيان الخدمة.
$appID استبدل ب من appId إخراج JSON الخاص بك.
ينشئ هذا الأمر إخراج JSON مع استخدام مختلف objectId في الخطوة التالية.
objectId الجديد هو assignee-object-id.
انسخ appOwnerTenantId لاستخدامه لاحقا كسر GitHub ل AZURE_TENANT_ID.
az ad sp create --id $appId
إنشاء تعيين دور جديد عن طريق الاشتراك و العنصر. بشكل افتراضي، يرتبط تعيين الدور باشتراكك الافتراضي. استبدل $subscriptionId بمعرف اشتراكك، $resourceGroupName واسم مجموعة الموارد، $webappName واسم تطبيق الويب الخاص بك، و $assigneeObjectId باسم الذي تم idإنشاؤه . تعرف على طريقة إدارة اشتراكات Azure باستخدام واجهة سطر الأوامر Azure.
az role assignment create --role "Website Contributor" --subscription $subscriptionId --assignee-object-id $assigneeObjectId --scope /subscriptions/$subscriptionId/resourceGroups/$resourceGroupName/providers/Microsoft.Web/sites/$webappName --assignee-principal-type ServicePrincipal
قم بتشغيل الأمر التالي لإنشاء بيانات اعتماد هوية موحدة جديدة لتطبيق Microsoft Entra.
استبدل APPLICATION-OBJECT-ID بالتي appId قمت بإنشائها أثناء إنشاء التطبيق لتطبيق Active Directory الخاص بك.
قم بتعيين قيمة للرجوع CREDENTIAL-NAME إليها لاحقاً.
تعيين subject. يحدد GitHub قيمته اعتمادا على سير العمل الخاص بك:
- بالنسبة للوظائف في بيئة GitHub Actions، استخدم:
repo:< Organization/Repository >:environment:< Name >
- بالنسبة للوظائف غير المرتبطة ببيئة، قم بتضمين مسار ref للفرع/العلامة استنادا إلى مسار ref المستخدم لتشغيل سير العمل:
repo:< Organization/Repository >:ref:< ref path>. على سبيل المثال: repo:n-username/ node_express:ref:refs/heads/my-branch أو repo:n-username/ node_express:ref:refs/tags/my-tag.
- بالنسبة إلى مهام سير العمل التي تم تشغيلها بواسطة حدث طلب سحب، استخدم:
repo:< Organization/Repository >:pull_request.
az ad app federated-credential create --id <APPLICATION-OBJECT-ID> --parameters credential.json
("credential.json" contains the following content)
{
"name": "<CREDENTIAL-NAME>",
"issuer": "https://token.actions.githubusercontent.com",
"subject": "repo:organization/repository:ref:refs/heads/main",
"description": "Testing",
"audiences": [
"api://AzureADTokenExchange"
]
}
ملف تعريف النشر هو بيانات اعتماد على مستوى التطبيق. يمكنك إعداد ملف تعريف النشر الخاص بك كبيانات سرية من GitHub.
انتقل إلى App Service في مدخل Microsoft Azure.
في صفحة نظرة عامة ، حدد تنزيل ملف تعريف النشر.
احفظ الملف الذي تم تنزيله. استخدم محتويات الملف لإنشاء سر GitHub.
إشعار
اعتبارا من أكتوبر 2020، تحتاج تطبيقات Linux على الويب إلى تعيين إعداد WEBSITE_WEBDEPLOY_USE_SCM التطبيق إلى trueقبل تنزيل ملف تعريف النشر.
يمكنك إنشاء كيان خدمة باستخدام az ad sp create-for-rbac الأمر في Azure CLI. قم بتشغيل هذا الأمر باستخدام Azure Cloud Shell في مدخل Microsoft Azure أو عن طريق تحديد Open Cloud Shell.
az ad sp create-for-rbac --name "myApp" --role "Website Contributor" \
--scopes /subscriptions/<subscription-id>/resourceGroups/<group-name>/providers/Microsoft.Web/sites/<app-name> \
--json-auth
في المثال السابق، استبدل العناصر النائبة بمعرف الاشتراك واسم مجموعة الموارد واسم التطبيق. سيتمثل الإخراج في كائن JSONl مزود ببيانات اعتماد تعيين الدور التي توفر إمكانية الوصول إلى تطبيق App Service. يجب أن يبدو الإخراج مشابها لمقتطف JSON التالي. انسخ كائن JSON هذا لاحقاً.
{
"clientId": "<GUID>",
"clientSecret": "<GUID>",
"subscriptionId": "<GUID>",
"tenantId": "<GUID>",
(...)
}
هام
نوصي بمنح الحد الأدنى من الوصول. يقتصر النطاق في المثال السابق على تطبيق App Service المحدد وليس مجموعة الموارد بأكملها.
تحتاج إلى توفير معرف العميل الخاص بالتطبيق ومعرف المستأجرومعرف الاشتراك للإجراء Azure/login . يمكن توفير هذه القيم إما مباشرة في سير العمل أو يمكن تخزينها في أسرار GitHub والإشارة إليها في سير العمل خاصتك. حفظ القيم على أنها أسرار GitHub هو الخيار الأكثر أمانًا.
افتح مستودع GitHub وانتقل إلى >>
إنشاء أسرار لـ AZURE_CLIENT_ID, AZURE_TENANT_ID, و AZURE_SUBSCRIPTION_ID. استخدم هذه القيم من تطبيق Active Directory لأسرار GitHub خاصتك:
| سر GitHub |
تطبيق Active Directory |
AZURE_CLIENT_ID |
معرف التطبيق (العميل) |
AZURE_TENANT_ID |
معرف الدليل (المستأجر) |
AZURE_SUBSCRIPTION_ID |
مُعرّف الاشتراك |
حدد Add secret لحفظ كل سر.
في GitHub، استعرض للوصول إلى المستودع الخاص بك. حدد Settings>Security>Secrets and variables>Actions>New repository secret.
لاستخدام بيانات الاعتماد على مستوى التطبيق التي قمت بإنشائها في القسم السابق، الصق محتويات ملف تعريف النشر الذي تم تنزيله في حقل قيمة السر. اسم السر AZURE_WEBAPP_PUBLISH_PROFILE.
عند تكوين ملف سير عمل GitHub لاحقا، استخدم AZURE_WEBAPP_PUBLISH_PROFILE في الإجراء Deploy Azure Web App . على سبيل المثال:
- uses: azure/webapps-deploy@v2
with:
publish-profile: ${{ secrets.AZURE_WEBAPP_PUBLISH_PROFILE }}
في GitHub، استعرض للوصول إلى المستودع الخاص بك. حدد Settings>Security>Secrets and variables>Actions>New repository secret.
لاستخدام بيانات الاعتماد على مستوى المستخدم التي قمت بإنشائها في القسم السابق، الصق إخراج JSON بأكمله من أمر Azure CLI في حقل قيمة السر. اسم السر AZURE_CREDENTIALS.
عند تكوين ملف سير عمل GitHub لاحقا، استخدم السر لإدخال credsAzure/login. على سبيل المثال:
- uses: azure/login@v2
with:
creds: ${{ secrets.AZURE_CREDENTIALS }}
إضافة ملف سير العمل إلى مستودع GitHub الخاص بك
يحدد ملف YAML (.yml) في /.github/workflows/ المسار في مستودع GitHub سير العمل. ويتضمن هذا التعريف الخطوات والمعلمات المختلفة التي تشكّل سير العمل.
كحد أدنى، يحتوي ملف سير العمل على الخطوات المميزة التالية:
- المصادقة باستخدام App Service باستخدام سر GitHub الذي أنشأته.
- إنشاء تطبيق الويب.
- نشر تطبيق الويب.
لنشر التعليمات البرمجية الخاصة بك إلى تطبيق App Service، استخدم azure/webapps-deploy@v3 الإجراء . يتطلب الإجراء اسم تطبيق الويب الخاص بك في app-name و، اعتمادا على مكدس اللغة الخاص بك، مسار *.zip*.war*.jarأو مجلد لنشره في .package للحصول على قائمة كاملة بالمدخلات المحتملة azure/webapps-deploy@v3 للإجراء، راجع action.yml.
توضح الأمثلة التالية جزء سير العمل الذي يحول تطبيق الويب برمجيًا، بلغات مختلفة مدعومة.
للنشر باستخدام OpenID Connect باستخدام الهوية المدارة التي قمت بتكوينها، استخدم azure/login@v2 الإجراء مع client-idالمفاتيح tenant-idو و subscription-id . الرجوع إلى أسرار GitHub التي قمت بإنشائها سابقا.
name: .NET Core
on: [push]
permissions:
id-token: write
contents: read
env:
AZURE_WEBAPP_NAME: my-app # Set this to your application's name
AZURE_WEBAPP_PACKAGE_PATH: '.' # Set this to the path to your web app project, defaults to the repository root
DOTNET_VERSION: '6.0.x' # Set this to the dot net version to use
jobs:
build:
runs-on: ubuntu-latest
steps:
# Check out the repo
- uses: actions/checkout@main
- uses: azure/login@v2
with:
client-id: ${{ secrets.AZURE_CLIENT_ID }}
tenant-id: ${{ secrets.AZURE_TENANT_ID }}
subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
# Setup .NET Core SDK
- name: Setup .NET Core
uses: actions/setup-dotnet@v3
with:
dotnet-version: ${{ env.DOTNET_VERSION }}
# Run dotnet build and publish
- name: dotnet build and publish
run: |
dotnet restore
dotnet build --configuration Release
dotnet publish -c Release --property:PublishDir='${{ env.AZURE_WEBAPP_PACKAGE_PATH }}/myapp'
# Deploy to Azure Web apps
- name: 'Run Azure webapp deploy action using publish profile credentials'
uses: azure/webapps-deploy@v3
with:
app-name: ${{ env.AZURE_WEBAPP_NAME }} # Replace with your app name
package: '${{ env.AZURE_WEBAPP_PACKAGE_PATH }}/myapp'
- name: logout
run: |
az logout
إنشاء ونشر تطبيق ASP.NET model-view-controller (MVC) إلى Azure باستخدام كيان خدمة Azure. يستخدم المثال البيانات السرية من GitHub للقيم client-id وtenant-idوsubscription-id. يمكنك أيضا تمرير هذه القيم مباشرة في إجراء تسجيل الدخول.
name: Deploy ASP.NET MVC App deploy to Azure Web App
on: [push]
permissions:
id-token: write
contents: read
env:
AZURE_WEBAPP_NAME: my-app # Set this to your application's name
AZURE_WEBAPP_PACKAGE_PATH: '.' # Set this to the path to your web app project, defaults to the repository root
NUGET_VERSION: '5.3.x' # Set this to the dot net version to use
jobs:
build-and-deploy:
runs-on: windows-latest
steps:
# Check out the repo
- uses: actions/checkout@main
- uses: azure/login@v2
with:
client-id: ${{ secrets.AZURE_CLIENT_ID }}
tenant-id: ${{ secrets.AZURE_TENANT_ID }}
subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
- name: Install Nuget
uses: nuget/setup-nuget@v1
with:
nuget-version: ${{ env.NUGET_VERSION}}
- name: NuGet to restore dependencies as well as project-specific tools that are specified in the project file
run: nuget restore
- name: Add msbuild to PATH
uses: microsoft/setup-msbuild@v1.0.2
- name: Run MSBuild
run: msbuild .\SampleWebApplication.sln
- name: 'Run Azure webapp deploy action using publish profile credentials'
uses: azure/webapps-deploy@v3
with:
app-name: ${{ env.AZURE_WEBAPP_NAME }} # Replace with your app name
package: '${{ env.AZURE_WEBAPP_PACKAGE_PATH }}/SampleWebApplication/'
# Azure logout
- name: logout
run: |
az logout
إنشاء تطبيق Java Spring Boot ونشره إلى Azure باستخدام كيان خدمة Azure. يستخدم المثال البيانات السرية من GitHub للقيم client-id وtenant-idوsubscription-id. يمكنك أيضا تمرير هذه القيم مباشرة في إجراء تسجيل الدخول.
name: Java CI with Maven
on: [push]
permissions:
id-token: write
contents: read
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: azure/login@v2
with:
client-id: ${{ secrets.AZURE_CLIENT_ID }}
tenant-id: ${{ secrets.AZURE_TENANT_ID }}
subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
- name: Set up JDK 1.8
uses: actions/setup-java@v3
with:
java-version: 1.8
- name: Build with Maven
run: mvn -B package --file pom.xml
working-directory: complete
- name: Azure WebApp
uses: Azure/webapps-deploy@v3
with:
app-name: my-app-name
package: my/target/*.jar
# Azure logout
- name: logout
run: |
az logout
name: Build and deploy WAR app to Azure Web App using OpenID Connect
env:
JAVA_VERSION: '11' # Set this to the Java version to use
DISTRIBUTION: microsoft # Set this to the Java distribution
AZURE_WEBAPP_NAME: sampleapp # Set this to the name of your web app
on: [push]
permissions:
id-token: write
contents: read
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Java version
uses: actions/setup-java@v3.0.0
with:
java-version: ${{ env.JAVA_VERSION }}
distribution: ${{ env.DISTRIBUTION }}
cache: 'maven'
- name: Build with Maven
run: mvn clean install
- name: Login to Azure
uses: azure/login@v2
with:
client-id: ${{ secrets.AZURE_CLIENT_ID }}
tenant-id: ${{ secrets.AZURE_TENANT_ID }}
subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
- name: Deploy to Azure Web App
id: deploy-to-webapp
uses: azure/webapps-deploy@v3
with:
app-name: ${{ env.AZURE_WEBAPP_NAME }}
package: '*.war'
فيما يلي مثال كامل يستخدم وظائف متعددة للبناء والنشر.
هام
إذا كنت تقوم بنشر تطبيق Node.js باستخدام TypeScript أو لغات مترجمة أخرى باستخدام azure/webapps-deploy@v3، قم ببناء تطبيقك أولا في GitHub Actions ثم نشر مجلد الإخراج المترجم (مثل dist/ أو build/). إذا أردت بدلا من ذلك استخدام أتمتة بناء خدمة التطبيقات، اضبط SCM_DO_BUILD_DURING_DEPLOYMENT إعداد التطبيق على true.
name: JavaScript CI
on: [push]
permissions:
id-token: write
contents: read
name: Node.js
env:
AZURE_WEBAPP_NAME: my-app # Set this to your application's name
AZURE_WEBAPP_PACKAGE_PATH: 'my-app-path' # Set this to the path to your web app project, defaults to the repository root
NODE_VERSION: '24.x' # Set this to the node version to use
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
# Check out the repo
- name: 'Checkout GitHub Action'
uses: actions/checkout@main
- uses: azure/login@v2
with:
client-id: ${{ secrets.AZURE_CLIENT_ID }}
tenant-id: ${{ secrets.AZURE_TENANT_ID }}
subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
- name: Setup Node ${{ env.NODE_VERSION }}
uses: actions/setup-node@v4
with:
node-version: ${{ env.NODE_VERSION }}
- name: 'npm install, build, and test'
run: |
npm install
npm run build --if-present
npm run test --if-present
working-directory: my-app-path
# Deploy web app by using Azure credentials
- uses: azure/webapps-deploy@v3
with:
app-name: ${{ env.AZURE_WEBAPP_NAME }}
package: ${{ env.AZURE_WEBAPP_PACKAGE_PATH }}
# Azure logout
- name: logout
run: |
az logout
name: Python application
on:
[push]
permissions:
id-token: write
contents: read
env:
AZURE_WEBAPP_NAME: my-app # Set this to your application's name
AZURE_WEBAPP_PACKAGE_PATH: '.' # Set this to the path to your web app project, defaults to the repository root
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: azure/login@v2
with:
client-id: ${{ secrets.AZURE_CLIENT_ID }}
tenant-id: ${{ secrets.AZURE_TENANT_ID }}
subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
- name: Set up Python 3.x
uses: actions/setup-python@v4
with:
python-version: 3.x
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt
- name: Deploy web App using GH Action azure/webapps-deploy
uses: azure/webapps-deploy@v3
with:
app-name: ${{ env.AZURE_WEBAPP_NAME }}
package: ${{ env.AZURE_WEBAPP_PACKAGE_PATH }}
- name: logout
run: |
az logout
publish-profile يجب أن يشير الإدخال إلى AZURE_WEBAPP_PUBLISH_PROFILE سر GitHub الذي قمت بإنشائه سابقا.
name: .NET Core CI
on: [push]
env:
AZURE_WEBAPP_NAME: my-app-name # Set this to your application's name
AZURE_WEBAPP_PACKAGE_PATH: '.' # Set this to the path to your web app project, defaults to the repository root
DOTNET_VERSION: '6.0.x' # Set this to the dot net version to use
jobs:
build:
runs-on: ubuntu-latest
steps:
# Check out the repo
- uses: actions/checkout@main
# Setup .NET Core SDK
- name: Setup .NET Core
uses: actions/setup-dotnet@v3
with:
dotnet-version: ${{ env.DOTNET_VERSION }}
# Run dotnet build and publish
- name: dotnet build and publish
run: |
dotnet restore
dotnet build --configuration Release
dotnet publish -c Release --property:PublishDir='${{ env.AZURE_WEBAPP_PACKAGE_PATH }}/myapp'
# Deploy to Azure Web apps
- name: 'Run Azure webapp deploy action using publish profile credentials'
uses: azure/webapps-deploy@v3
with:
app-name: ${{ env.AZURE_WEBAPP_NAME }} # Replace with your app name
publish-profile: ${{ secrets.AZURE_WEBAPP_PUBLISH_PROFILE }} # Define secret variable in repository settings as per action documentation
package: '${{ env.AZURE_WEBAPP_PACKAGE_PATH }}/myapp'
إنشاء ونشر تطبيق ASP.NET model-view-controller (MVC) يستخدم NuGet وللمصادقة publish-profile .
name: Deploy ASP.NET MVC App deploy to Azure Web App
on: [push]
env:
AZURE_WEBAPP_NAME: my-app # Set this to your application's name
AZURE_WEBAPP_PACKAGE_PATH: '.' # Set this to the path to your web app project, defaults to the repository root
NUGET_VERSION: '5.3.x' # Set this to the dot net version to use
jobs:
build-and-deploy:
runs-on: windows-latest
steps:
- uses: actions/checkout@main
- name: Install Nuget
uses: nuget/setup-nuget@v1
with:
nuget-version: ${{ env.NUGET_VERSION}}
- name: NuGet to restore dependencies as well as project-specific tools that are specified in the project file
run: nuget restore
- name: Add msbuild to PATH
uses: microsoft/setup-msbuild@v1.0.2
- name: Run MSBuild
run: msbuild .\SampleWebApplication.sln
- name: 'Run Azure webapp deploy action using publish profile credentials'
uses: azure/webapps-deploy@v3
with:
app-name: ${{ env.AZURE_WEBAPP_NAME }} # Replace with your app name
publish-profile: ${{ secrets.AZURE_WEBAPP_PUBLISH_PROFILE }} # Define secret variable in repository settings as per action documentation
package: '${{ env.AZURE_WEBAPP_PACKAGE_PATH }}/SampleWebApplication/'
إنشاء تطبيق Java Spring Boot ونشره إلى Azure باستخدام ملف تعريف نشر Azure. يشير الإدخال publish-profile إلى البيانات السرية AZURE_WEBAPP_PUBLISH_PROFILE التي أنشأتها سابقًا.
name: Java CI with Maven
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up JDK 1.8
uses: actions/setup-java@v3
with:
java-version: 1.8
- name: Build with Maven
run: mvn -B package --file pom.xml
working-directory: my-app-path
- name: Azure WebApp
uses: Azure/webapps-deploy@v3
with:
app-name: my-app-name
publish-profile: ${{ secrets.AZURE_WEBAPP_PUBLISH_PROFILE }}
package: my/target/*.jar
لتوزيع war بدلاً من jar، غير القيمة package.
- name: Azure WebApp
uses: Azure/webapps-deploy@v3
with:
app-name: my-app-name
publish-profile: ${{ secrets.AZURE_WEBAPP_PUBLISH_PROFILE }}
package: my/target/*.war
إنشاء تطبيق Tomcat ونشره إلى Azure باستخدام ملف تعريف نشر Azure. يشير الإدخال publish-profile إلى البيانات السرية AZURE_WEBAPP_PUBLISH_PROFILE التي أنشأتها سابقًا.
name: Build and deploy WAR app to Azure Web App using publish profile
env:
JAVA_VERSION: '11' # Set this to the Java version to use
DISTRIBUTION: microsoft # Set this to the Java distribution
AZURE_WEBAPP_NAME: sampleapp # Set this to the name of your web app
on: [push]
permissions:
id-token: write
contents: read
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Java version
uses: actions/setup-java@v3.0.0
with:
java-version: ${{ env.JAVA_VERSION }}
distribution: ${{ env.DISTRIBUTION }}
cache: 'maven'
- name: Build with Maven
run: mvn clean install
- name: Deploy to Azure Web App
id: deploy-to-webapp
uses: azure/webapps-deploy@v3
with:
app-name: ${{ env.AZURE_WEBAPP_NAME }}
publish-profile: ${{ secrets.AZURE_WEBAPP_PUBLISH_PROFILE }}
package: '*.war'
فيما يلي مثال كامل يستخدم وظائف متعددة للبناء والنشر.
هام
إذا كنت تقوم بنشر تطبيق Node.js باستخدام TypeScript أو لغات مترجمة أخرى باستخدام azure/webapps-deploy@v3، قم ببناء تطبيقك أولا في GitHub Actions ثم نشر مجلد الإخراج المترجم (مثل dist/ أو build/). إذا أردت بدلا من ذلك استخدام أتمتة بناء خدمة التطبيقات، اضبط SCM_DO_BUILD_DURING_DEPLOYMENT إعداد التطبيق على true.
إنشاء تطبيق Node.js ونشره في Azure باستخدام ملف تعريف النشر الخاص بالتطبيق. يشير الإدخال publish-profile إلى البيانات السرية AZURE_WEBAPP_PUBLISH_PROFILE التي أنشأتها سابقًا.
# File: .github/workflows/workflow.yml
name: JavaScript CI
on: [push]
env:
AZURE_WEBAPP_NAME: my-app-name # Set this to your application's name
AZURE_WEBAPP_PACKAGE_PATH: 'my-app-path' # Set this to the path to your web app project, defaults to the repository root
NODE_VERSION: '24.x' # Set this to the node version to use
jobs:
build-and-deploy:
name: Build and Deploy
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@main
- name: Use Node.js ${{ env.NODE_VERSION }}
uses: actions/setup-node@v4
with:
node-version: ${{ env.NODE_VERSION }}
- name: npm install, build, and test
run: |
# Build and test the project, then
# deploy to Azure Web App.
npm install
npm run build --if-present
npm run test --if-present
working-directory: my-app-path
- name: 'Deploy to Azure WebApp'
uses: azure/webapps-deploy@v3
with:
app-name: ${{ env.AZURE_WEBAPP_NAME }}
publish-profile: ${{ secrets.AZURE_WEBAPP_PUBLISH_PROFILE }}
package: ${{ env.AZURE_WEBAPP_PACKAGE_PATH }}
إنشاء تطبيق Python ونشره إلى Azure باستخدام ملف تعريف النشر الخاص بالتطبيق. لاحظ كيف يشير الإدخال publish-profile إلى البيانات السرية AZURE_WEBAPP_PUBLISH_PROFILE التي أنشأتها سابقًا.
name: Python CI
on:
[push]
env:
AZURE_WEBAPP_NAME: my-web-app # Set this to your application's name
AZURE_WEBAPP_PACKAGE_PATH: '.' # Set this to the path to your web app project, defaults to the repository root
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Python 3.x
uses: actions/setup-python@v4
with:
python-version: 3.x
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt
- name: Building web app
uses: azure/appservice-build@v2
- name: Deploy web App using GH Action azure/webapps-deploy
uses: azure/webapps-deploy@v3
with:
app-name: ${{ env.AZURE_WEBAPP_NAME }}
publish-profile: ${{ secrets.AZURE_WEBAPP_PUBLISH_PROFILE }}
package: ${{ env.AZURE_WEBAPP_PACKAGE_PATH }}
للنشر مع كيان الخدمة الذي قمت بتكوينه، استخدم azure/login@v2 الإجراء مع creds المفتاح والإشارة إلى AZURE_CREDENTIALS السر الذي قمت بإنشائه سابقا.
name: .NET Core
on: [push]
env:
AZURE_WEBAPP_NAME: my-app # Set this to your application's name
AZURE_WEBAPP_PACKAGE_PATH: '.' # Set this to the path to your web app project, defaults to the repository root
DOTNET_VERSION: '6.0.x' # Set this to the dot net version to use
jobs:
build:
runs-on: ubuntu-latest
steps:
# Check out the repo
- uses: actions/checkout@main
- uses: azure/login@v2
with:
creds: ${{ secrets.AZURE_CREDENTIALS }}
# Set up .NET Core SDK
- name: Setup .NET Core
uses: actions/setup-dotnet@v3
with:
dotnet-version: ${{ env.DOTNET_VERSION }}
# Run dotnet build and publish
- name: dotnet build and publish
run: |
dotnet restore
dotnet build --configuration Release
dotnet publish -c Release --property:PublishDir='${{ env.AZURE_WEBAPP_PACKAGE_PATH }}/myapp'
# Deploy to Azure Web apps
- name: 'Run Azure webapp deploy action using Azure Credentials'
uses: azure/webapps-deploy@v3
with:
app-name: ${{ env.AZURE_WEBAPP_NAME }} # Replace with your app name
package: '${{ env.AZURE_WEBAPP_PACKAGE_PATH }}/myapp'
- name: logout
run: |
az logout
إنشاء ونشر تطبيق ASP.NET model-view-controller (MVC) إلى Azure باستخدام كيان خدمة Azure. يشير الإدخال creds إلى البيانات السرية AZURE_CREDENTIALS التي أنشأتها سابقًا.
name: Deploy ASP.NET MVC App deploy to Azure Web App
on: [push]
env:
AZURE_WEBAPP_NAME: my-app # Set this to your application's name
AZURE_WEBAPP_PACKAGE_PATH: '.' # Set this to the path to your web app project, defaults to the repository root
NUGET_VERSION: '5.3.x' # Set this to the dot net version to use
jobs:
build-and-deploy:
runs-on: windows-latest
steps:
# Check out the repo
- uses: actions/checkout@main
- uses: azure/login@v2
with:
creds: ${{ secrets.AZURE_CREDENTIALS }}
- name: Install Nuget
uses: nuget/setup-nuget@v1
with:
nuget-version: ${{ env.NUGET_VERSION}}
- name: NuGet to restore dependencies as well as project-specific tools that are specified in the project file
run: nuget restore
- name: Add msbuild to PATH
uses: microsoft/setup-msbuild@v1.0.2
- name: Run MSBuild
run: msbuild .\SampleWebApplication.sln
- name: 'Run Azure webapp deploy action using Azure Credentials'
uses: azure/webapps-deploy@v3
with:
app-name: ${{ env.AZURE_WEBAPP_NAME }} # Replace with your app name
package: '${{ env.AZURE_WEBAPP_PACKAGE_PATH }}/SampleWebApplication/'
# Azure logout
- name: logout
run: |
az logout
إنشاء تطبيق Java Spring Boot ونشره إلى Azure باستخدام كيان خدمة Azure. يشير الإدخال creds إلى البيانات السرية AZURE_CREDENTIALS التي أنشأتها سابقًا.
name: Java CI with Maven
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: azure/login@v2
with:
creds: ${{ secrets.AZURE_CREDENTIALS }}
- name: Set up JDK 1.8
uses: actions/setup-java@v3
with:
java-version: 1.8
- name: Build with Maven
run: mvn -B package --file pom.xml
working-directory: complete
- name: Azure WebApp
uses: Azure/webapps-deploy@v3
with:
app-name: my-app-name
package: my/target/*.jar
# Azure logout
- name: logout
run: |
az logout
إنشاء تطبيق Tomcat ونشره إلى Azure باستخدام كيان خدمة Azure. يشير الإدخال creds إلى البيانات السرية AZURE_CREDENTIALS التي أنشأتها سابقًا.
name: Build and deploy WAR app to Azure Web App using Service Principal Connect
env:
JAVA_VERSION: '11' # Set this to the Java version to use
DISTRIBUTION: microsoft # Set this to the Java distribution
AZURE_WEBAPP_NAME: sampleapp # Set this to the name of your web app
on: [push]
permissions:
contents: read
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Java version
uses: actions/setup-java@v3.0.0
with:
java-version: ${{ env.JAVA_VERSION }}
distribution: ${{ env.DISTRIBUTION }}
cache: 'maven'
- name: Build with Maven
run: mvn clean install
- name: Login to Azure
uses: azure/login@v2
with:
creds: ${{ secrets.AZURE_CREDENTIALS }}
- name: Deploy to Azure Web App
id: deploy-to-webapp
uses: azure/webapps-deploy@v3
with:
app-name: ${{ env.AZURE_WEBAPP_NAME }}
package: '*.war'
فيما يلي مثال كامل يستخدم وظائف متعددة للبناء والنشر.
هام
إذا كنت تقوم بنشر تطبيق Node.js باستخدام TypeScript أو لغات مترجمة أخرى باستخدام azure/webapps-deploy@v3، قم ببناء تطبيقك أولا في GitHub Actions ثم نشر مجلد الإخراج المترجم (مثل dist/ أو build/). إذا أردت بدلا من ذلك استخدام أتمتة بناء خدمة التطبيقات، اضبط SCM_DO_BUILD_DURING_DEPLOYMENT إعداد التطبيق على true.
إنشاء تطبيق Node.js ونشره إلى Azure باستخدام كيان خدمة Azure. يشير الإدخال creds إلى البيانات السرية AZURE_CREDENTIALS التي أنشأتها سابقًا.
name: JavaScript CI
on: [push]
name: Node.js
env:
AZURE_WEBAPP_NAME: my-app # Set this to your application's name
AZURE_WEBAPP_PACKAGE_PATH: 'my-app-path' # Set this to the path to your web app project, defaults to the repository root
NODE_VERSION: '24.x' # Set this to the node version to use
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
# Check out the repo
- name: 'Checkout GitHub Action'
uses: actions/checkout@main
- uses: azure/login@v2
with:
creds: ${{ secrets.AZURE_CREDENTIALS }}
- name: Setup Node ${{ env.NODE_VERSION }}
uses: actions/setup-node@v4
with:
node-version: ${{ env.NODE_VERSION }}
- name: 'npm install, build, and test'
run: |
npm install
npm run build --if-present
npm run test --if-present
working-directory: my-app-path
# Deploy web app using Azure credentials
- uses: azure/webapps-deploy@v3
with:
app-name: ${{ env.AZURE_WEBAPP_NAME }}
package: ${{ env.AZURE_WEBAPP_PACKAGE_PATH }}
# Azure logout
- name: logout
run: |
az logout
إنشاء تطبيق Python ونشره إلى Azure باستخدام كيان خدمة Azure. يشير الإدخال creds إلى البيانات السرية AZURE_CREDENTIALS التي أنشأتها سابقًا.
name: Python application
on:
[push]
env:
AZURE_WEBAPP_NAME: my-app # Set this to your application's name
AZURE_WEBAPP_PACKAGE_PATH: '.' # Set this to the path to your web app project, defaults to the repository root
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: azure/login@v2
with:
creds: ${{ secrets.AZURE_CREDENTIALS }}
- name: Set up Python 3.x
uses: actions/setup-python@v4
with:
python-version: 3.x
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt
- name: Deploy web App using GH Action azure/webapps-deploy
uses: azure/webapps-deploy@v3
with:
app-name: ${{ env.AZURE_WEBAPP_NAME }}
package: ${{ env.AZURE_WEBAPP_PACKAGE_PATH }}
- name: logout
run: |
az logout
الأسئلة الشائعة
كيف يمكنني نشر ملف WAR من خلال المكون الإضافي Maven؟
إذا قمت بتكوين مشروع Java Tomcat الخاص بك باستخدام المكون الإضافي Maven، يمكنك أيضا النشر إلى Azure App Service من خلال هذا المكون الإضافي. إذا كنت تستخدم إجراء Azure CLI GitHub، فإنه يستخدم بيانات اعتماد Azure.
- name: Azure CLI script file
uses: azure/cli@v2
with:
inlineScript: |
mvn package azure-webapp:deploy
لمزيد من المعلومات حول كيفية استخدام المكون الإضافي Maven وتكوينه، راجع Maven plugin wiki ل Azure App Service.
كيف يمكنني نشر ملف WAR من خلال Azure CLI؟
إذا كنت تفضل استخدام Azure CLI للتوزيع إلى App Service، يمكنك استخدام إجراء GitHub ل Azure CLI.
- name: Azure CLI script
uses: azure/cli@v2
with:
inlineScript: |
az webapp deploy --src-path '${{ github.workspace }}/target/yourpackage.war' --name ${{ env.AZURE_WEBAPP_NAME }} --resource-group ${{ env.RESOURCE_GROUP }} --async true --type war
لمزيد من المعلومات حول كيفية استخدام وتكوين إجراء GitHub ل Azure CLI، راجع إجراء Azure CLI GitHub.
لمزيد من المعلومات حول الأمر، بما في az webapp deploy ذلك كيفية استخدامه وتفاصيل المعلمة، راجع az webapp deploy الوثائق.
كيف أعمل نشر ملف بدء تشغيل؟
استخدم إجراء GitHub ل Azure CLI. على سبيل المثال:
- name: Deploy startup script
uses: azure/cli@v2
with:
inlineScript: |
az webapp deploy --src-path ${{ github.workspace }}/src/main/azure/createPasswordlessDataSource.sh --name ${{ env.AZURE_WEBAPP_NAME }} --resource-group ${{ env.RESOURCE_GROUP }} --type startup --track-status false
كيف يمكنني النشر إلى حاوية؟
باستخدام إجراء Azure Web Deploy ، يمكنك أتمتة سير العمل الخاص بك لنشر حاويات مخصصة إلى App Service باستخدام GitHub Actions. لمزيد من المعلومات، راجع النشر إلى حاوية.
كيف أنشر في موعد النشر؟
يمكنك النشر في خانة نشر بدلا من فتحة الإنتاج باستخدام المعامل slot-name في الإجراء azure/webapps-deploy@v3 . للنشر في فتحة، أضف المعلمة slot-name إلى خطوة النشر في سير عملك:
- name: Deploy to Azure Web App
uses: azure/webapps-deploy@v3
with:
app-name: 'my-app-name'
slot-name: 'staging' # Deploy to the 'staging' slot instead of production
package: './output'
إشعار
عند استخدام OpenID Connect أو مصادقة الخدمة، تأكد من أن الهوية لها دور المساهم بالموقع على كل من التطبيق وفتحة النشر. للحصول على مصادقة ملف النشر الشخصي، قم بتنزيل ملف النشر الخاص بالخانة المحددة من بوابة Azure (فتحاتنشر>النشر> اختر الفتحة >تحميل ملف النشر).
كيف أعمل تحديث تكوين Tomcat بعد النشر؟
إذا كنت ترغب في تحديث أي من إعدادات تطبيقات الويب بعد النشر، يمكنك استخدام إجراء إعدادات App Service .
- uses: azure/appservice-settings@v1
with:
app-name: 'my-app'
slot-name: 'staging' # Optional and needed only if the settings have to be configured on the specific deployment slot
app-settings-json: '[{ "name": "CATALINA_OPTS", "value": "-Dfoo=bar" }]'
connection-strings-json: '${{ secrets.CONNECTION_STRINGS }}'
general-settings-json: '{"alwaysOn": "false", "webSocketsEnabled": "true"}' #'General configuration settings as Key Value pairs'
id: settings
لمزيد من المعلومات حول كيفية استخدام هذا الإجراء وتكوينه، راجع مستودع إعدادات App Service .
المحتوى ذو الصلة
تحقق من المراجع التالية على إجراءات Azure GitHub ومهام سير العمل: