كيف يمكنني استخدام GitHub Actions للنشر إلى Azure؟
تناقش هذه الوحدة كيفية استخدام إجراءات GitHub لنشر تطبيق ويب يستند إلى حاوية إلى Microsoft Azure Web Apps. وهو يغطي بعض الخيارات لتشغيل سير عمل. بعد ذلك، ستتعلم كيفية العمل مع الشروط في سير العمل. وأخيرا، ستتعرف على كيفية إنشاء موارد Azure وحذفها باستخدام GitHub Actions.
خيارات لتشغيل سير عمل التسليم المستمر (CD)
هناك العديد من الخيارات لبدء سير عمل التسليم المستمر (CD). في الوحدة النمطية السابقة على التكامل المستمر (CI) مع GitHub Actions، تعلمت كيفية تشغيل سير العمل من دفعة إلى مستودع GitHub. ومع ذلك، بالنسبة للقرص المضغوط، قد تحتاج إلى تشغيل سير عمل توزيع على حدث آخر.
أحد الخيارات هو تشغيل سير العمل مع ChatOps. يستخدم ChatOps عملاء الدردشة روبوتات الدردشة وأدوات الاتصال في الوقت الحقيقي لتشغيل المهام. على سبيل المثال، قد تترك تعليقًا محددًا في طلب سحب يمكن أن يبدأ تشغيل روبوت. قد يقوم هذا الروبوت بالتعليق مع بعض الإحصائيات أو تشغيل سير عمل.
هناك خيار آخر، وهو الخيار الذي نستخدمه في مثالنا، وهو استخدام التسميات في طلب السحب الخاص بك. يمكن أن تبدأ التسميات المختلفة مهام سير عمل مختلفة. على سبيل المثال، أضف تسمية مرحلة لبدء سير عمل توزيع إلى بيئة التشغيل المرحلي، أو أضف بيئة تدور تسمية لتشغيل سير العمل الذي ينشئ موارد Microsoft Azure للنشر إليها. لاستخدام التسميات، يبدو سير العمل كما يلي:
on:
pull_request:
types: [labeled]
تنفيذ التحكم مع مهمة شرطية
في كثير من الأحيان، لا تريد تشغيل سير عمل إلا إذا كان شرط معين صحيحا.
توفر if مهام سير عمل GitHub الشرطي لهذا السيناريو. يستخدم الشرطي تعبير يتم تقييمه في وقت التشغيل. على سبيل المثال، تريد تشغيل سير العمل هذا إذا تمت إضافة تسمية مرحلة إلى طلب السحب.
if: contains(github.event.pull_request.labels.*.name, 'stage')
تخزين بيانات الاعتماد باستخدام GitHub Secrets
لا تريد أبدا عرض معلومات حساسة في ملف سير العمل. تعد GitHub Secrets مكانا آمنا لتخزين المعلومات الحساسة التي يحتاجها سير العمل. فيما يلي مثال:
لكي يتم النشر إلى مورد Azure، يجب أن يكون لدى GitHub Action إذن للوصول إلى المورد. لا تريد تخزين بيانات اعتماد Azure الخاصة بك على مرأى من الجميع في ملف سير العمل. بدلاً من ذلك، يمكنك تخزين معلومات تسجيل الدخول الخاصة بك في GitHub Secrets.
لتخزين المعلومات في GitHub Secrets، قم بإنشاء سر على المدخل.
بعد ذلك، استخدم اسم السر الذي أنشأته في سير العمل الخاص بك أينما كنت بحاجة إلى هذه المعلومات. على سبيل المثال، استخدم بيانات اعتماد Azure التي تم تخزينها في GitHub Secrets في creds: سمة إجراء Azure login .
steps:
- name: "Login via Azure CLI"
uses: azure/login@v1
with:
creds: ${{ secrets.AZURE_CREDENTIALS }}
النشر إلى Microsoft Azure باستخدام GitHub Actions
يحتوي GitHub Marketplace على العديد من الإجراءات التي تساعدك على التشغيل التلقائي للمهام المتعلقة بـ Azure.
يمكنك أيضًا البحث عن GitHub Actions وتصفحها مباشرةً في محرر سير عمل المستودع. من الشريط الجانبي، يمكنك البحث عن إجراء معين، وعرض الإجراءات المميزة، واستعراض الفئات المميزة.
للبحث عن إجراء:
- في المستودع، استعرض للوصول إلى ملف سير العمل الذي تريد تحريره.
- حدد أيقونة Edit في الزاوية العلوية اليسرى من طريقة عرض الملف.
- استخدم الشريط الجانبي لـ GitHub Marketplace على يمين المحرر لاستعراض الإجراءات.
لنفترض أنك تريد نشر تطبيق ويب يستند إلى حاوية إلى تطبيقات ويب Azure. إذا قمت بالبحث في GitHub Marketplace، فستجد هذه الإجراءات:
- azure/webapps-deploy@v1
- azure/login@v1 الذي رأيناه سابقاً
- azure/docker-login@v1
إذا أضفت هذه الإجراءات إلى المهمة Deploy-to-Azure، فإن سير العمل الخاص بك يبدو كما يلي:
Deploy-to-Azure:
runs-on: ubuntu-latest
needs: Build-Docker-Image
name: Deploy app container to Azure
steps:
- name: "Login via Azure CLI"
uses: azure/login@v1
with:
creds: ${{ secrets.AZURE_CREDENTIALS }}
- uses: azure/docker-login@v1
with:
login-server: ${{env.IMAGE_REGISTRY_URL}}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Deploy web app container
uses: azure/webapps-deploy@v1
with:
app-name: ${{env.AZURE_WEBAPP_NAME}}
images: ${{env.IMAGE_REGISTRY_URL}}/${{ github.repository }}/${{env.DOCKER_IMAGE_NAME}}:${{ github.sha }}
- name: Azure logout
run: |
az logout
لاحظ أن هذه المهمة تعتمد على مهمة سابقة، Build-Docker-Image. تُنشئ المهمة السابقة الأداة التي يتم نشرها.
يحتاج الإجراء azure/login@v1 إلى بيانات اعتماد لتسجيل الدخول إلى حساب Azure الخاص بك حتى يتمكن من الوصول إلى موارد Azure التي تريد التوزيع إليها. هنا، استخدم بيانات الاعتماد التي قمنا بتخزينها في GitHub Secrets.
وينطبق الشيء نفسه على الإجراء azure/docker-login@v1. نظرا لأنك تقوم بنشر صورة حاوية، تحتاج إلى تسجيل الدخول إلى سجل الحاوية الخاص بك.
يقوم إجراء azure/webapps-deploy@v1 بتنفيذ النشر. وذلك يعتمد على الإجراءين السابقين.
إنشاء موارد Azure وحذفها باستخدام GitHub Actions
نظرا لأن القرص المضغوط عبارة عن عملية تلقائية، فقد قررت بالفعل استخدام البنية الأساسية كتعلم برمجي لإنشاء البيئات التي تقوم بالنشر فيها وإيقافها. يمكن أن تقوم GitHub Actions بالتنفيذ التلقائي لهذه المهام على Azure، ويمكنك تضمين هذه الإجراءات في سير عملك.
إشعار
تذكر أنه من المهم التخلص من الموارد التي لم تعد تستخدمها في أسرع وقت ممكن لتجنب الرسوم غير الضرورية.
أحد الخيارات هو إنشاء سير عمل جديد مع مهمتين، واحدة تقوم بإنشاء الموارد والأخرى تحذفها. ثم استخدم شرطًا لتشغيل المهمة التي تريدها فقط. في هذا المثال، الشرط يبحث عن تسمية في طلب السحب ثم تشغيل المهمة set-up-azure-resources إذا كانت التسمية إنشاء بيئة والمهمة destroy-azure-resources إذا كانت التسمية إتلاف البيئة.
jobs:
set-up-azure-resources:
runs-on: ubuntu-latest
if: contains(github.event.pull_request.labels.*.name, 'spin up environment')
...
destroy-azure-resources:
runs-on: ubuntu-latest
if: contains(github.event.pull_request.labels.*.name, 'destroy environment')
...
تستخدم المهام Azure CLI لإنشاء موارد Azure وإتلافها. لمزيد من المعلومات حول Azure CLI، راجع نظرة عامة على Azure CLI.
فيما يلي مثال على الخطوات في المهمة set-up-azure-resources:
steps:
- name: Checkout repository
uses: actions/checkout@v2
- name: Azure login
uses: azure/login@v1
with:
creds: ${{ secrets.AZURE_CREDENTIALS }}
- name: Create Azure resource group
if: success()
run: |
az group create --location ${{env.AZURE_LOCATION}} --name ${{env.AZURE_RESOURCE_GROUP}} --subscription ${{secrets.AZURE_SUBSCRIPTION_ID}}
- name: Create Azure app service plan
if: success()
run: |
az appservice plan create --resource-group ${{env.AZURE_RESOURCE_GROUP}} --name ${{env.AZURE_APP_PLAN}} --is-linux --sku F1 --subscription ${{secrets.AZURE_SUBSCRIPTION_ID}}
- name: Create webapp resource
if: success()
run: |
az webapp create --resource-group ${{ env.AZURE_RESOURCE_GROUP }} --plan ${{ env.AZURE_APP_PLAN }} --name ${{ env.AZURE_WEBAPP_NAME }} --deployment-container-image-name nginx --subscription ${{secrets.AZURE_SUBSCRIPTION_ID}}
- name: Configure webapp to use GitHub Packages
if: success()
run: |
az webapp config container set --docker-custom-image-name nginx --docker-registry-server-password ${{secrets.GITHUB_TOKEN}} --docker-registry-server-url https://docker.pkg.github.com --docker-registry-server-user ${{github.actor}} --name ${{ env.AZURE_WEBAPP_NAME }} --resource-group ${{ env.AZURE_RESOURCE_GROUP }} --subscription ${{secrets.AZURE_SUBSCRIPTION_ID}}
لاحظ أنك تستخدم إجراءات GitHub للتحقق من المستودع وتسجيل الدخول إلى Azure. بعد ذلك، يمكنك إنشاء الموارد التي تحتاج إليها ونشر الحاوية باستخدام CLI Azure.