تمرين - إنشاء البنية الأساسية لبرنامج ربط العمليات التجارية للتوزيع
مع مخططات Helm التي تم إنشاؤها، لديك الآن جميع الأدوات التي تحتاجها لنشر التطبيق إلى AKS باستخدام GitHub Actions. في هذه الوحدة، يمكنك إنهاء البنية الأساسية لبرنامج ربط العمليات التجارية CI/CD عن طريق إكمال خطوات النشر النهائية.
تتضمن خطوات التوزيع ما يلي:
- إنشاء مهمة التوزيع.
- إعداد open ID الاتصال (OIDC).
- نشر التطبيق باستخدام Helm.
- تشغيل النشر على الإنتاج.
إضافة مهمة التوزيع
في GitHub، انتقل إلى نسخة المستودع.
قم بتوسيع دليل .github/workflows وافتح ملف build-staging.yml للتحرير.
أضف وظيفة جديدة
deploy
في نهاية الملف، بعدbuild_push_image
المهمة، كما يلي. تأكد من مطابقة المسافة البادئة.تحتوي الوظيفة على ثلاثة مفاتيح:
runs-on
وneeds
و.permissions
- بالنسبة
runs-on
إلى ، استخدمubuntu-20.04
لتكون متسقة مع الوظيفة الأخرى. - بالنسبة إلى
needs
، استخدم اسم المهمة الأولى،build_push_image
، لذلك يتم نشر التطبيق فقط بعد إنشاء الصورة - بالنسبة إلى
permissions
، أضف وسيطتين تسمىid-token
وcontents
. قم بتعيينid-token
إلىwrite
وإلىread
contents
، لمنح GitHub Actions حق الوصول لإرسال الطلبات وقراءة محتويات المستودع.
- بالنسبة
أضف
- uses: actions/checkout@v2
كخطوة أولى من المهمة.يجب أن تبدو المهمة المضافة
deploy
مثل التعليمات البرمجية التالية:deploy: runs-on: ubuntu-20.04 needs: build_push_image permissions: id-token: write contents: read steps: - uses: actions/checkout@v2
إضافة خطوة تثبيت Helm
استخدم إجراء GitHub لتنزيل وتثبيت إصدار v3.3.1
Helm .
في اللوحة اليمنى من صفحة التحرير، ابحث عن مثبت أداة helm. حدد النتيجة الأولى التي نشرها Azure.
حدد أيقونة النسخ لنسخ استخدام YAML.
انسخ والصق YAML أسفل
uses
المفتاح في build-staging.yml.أعد تسمية الخطوة من
Helm tool installer
إلىInstall Helm
، وقم بتثبيتversion
المفتاح إلىv3.3.1
.steps: - uses: actions/checkout@v2 - name: Install Helm uses: Azure/setup-helm@v1 with: version: v3.3.1
إضافة خطوة مصادقة تسجيل الدخول إلى Azure
استخدم OIDC لمصادقة GitHub Actions للوصول إلى AKS.
في اللوحة اليمنى، ابحث عن تسجيل الدخول إلى Azure، وحدد تسجيل الدخول إلى Azure المنشور بواسطة Azure.
حدد أيقونة النسخ لنسخ استخدام YAML، والصقه أسفل
Install Helm
الخطوة في build-staging.yml.غير اسم الخطوة من
Azure Login
إلىSign in to Azure with OIDC
.Azure Login
يتطلب ثلاث معلمات للمصادقة:client-id
وtenant-id
و.subscription-id
املأ هذه المعلمات بعناصر نائبة للبيانات السرية التي قمت بتعيينها لاحقا.- name: Sign in to Azure with OIDC uses: Azure/login@v1.5.1 with: client-id: ${{ secrets.AZURE_CLIENT_ID }} tenant-id: ${{ secrets.AZURE_TENANT_ID }} subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
في اللوحة اليمنى، ابحث عن سياق المجموعة، وحدد سياق مجموعة Azure Kubernetes المنشور بواسطة Azure.
حدد أيقونة النسخ لنسخ استخدام YAML، والصقه أسفل
Sign in to Azure with OIDC
الخطوة في build-staging.yml. املأresource-group
المعلمات وcluster-name
بعناصر نائبة للبيانات السرية التي قمت بتعيينها في وحدة سابقة.- name: Azure Kubernetes set context uses: Azure/aks-set-context@v3 with: resource-group: ${{ secrets.RESOURCE_GROUP }} cluster-name: ${{ secrets.CLUSTER_NAME }}
يجب أن يبدو ملف build-staging.yml مثل المثال التالي:
name: Build and push the latest build to staging on: push: branches: [ main ] jobs: build_push_image: runs-on: ubuntu-20.04 steps: - uses: actions/checkout@v2 - name: Set up Buildx uses: docker/setup-buildx-action@v3.0.0 - name: Docker Login uses: docker/login-action@v3.0.0 with: registry: ${{ secrets.ACR_NAME }} username: ${{ secrets.ACR_LOGIN }} password: ${{ secrets.ACR_PASSWORD }} - name: Build and push staging images uses: docker/build-push-action@v5.0.0 with: context: . push: true tags: ${{secrets.ACR_NAME}}/contoso-website:latest deploy: runs-on: ubuntu-20.04 needs: build_push_image # Will wait for the execution of the previous job permissions: id-token: write # This is required for requesting the JWT contents: read # This is required for actions/checkout steps: - uses: actions/checkout@v2 - name: Install Helm uses: Azure/setup-helm@v1 with: version: v3.3.1 - name: Sign in to Azure with OIDC uses: Azure/login@v1.5.1 with: client-id: ${{ secrets.AZURE_CLIENT_ID }} tenant-id: ${{ secrets.AZURE_TENANT_ID }} subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }} - name: Azure Kubernetes set context uses: Azure/aks-set-context@v3 with: resource-group: ${{ secrets.RESOURCE_GROUP }} cluster-name: ${{ secrets.CLUSTER_NAME }}
إعداد open ID الاتصال (OIDC)
قم بتعيين قيم إلى أسرارك عن طريق إنشاء كيان خدمة وشهادات لتسجيل الدخول باستخدام OIDC.
إنشاء كيان الخدمة
في Azure Cloud Shell، قم بتشغيل
az account show
، واحفظid
القيمة من الإخراج.إنشاء كيان خدمة عن طريق تشغيل الأمر التالي، واستبدال
id
القيمة من الأمر السابق ل$SUBSCRIPTION_ID
:az ad sp create-for-rbac --scopes /subscriptions/$SUBSCRIPTION_ID --role Contributor
انسخ إخراج JSON واحفظه للخطوة التالية.
تعيين بيانات سرية
في صفحة مستودع GitHub، حدد علامة التبويب الإعدادات، ثم حدد Secrets and variables>Actions من القائمة اليسرى. حدد الأسرار الثلاثة الجديدة التالية التي تستخدم الإخراج من الخطوات السابقة.
AZURE_CLIENT_ID
"appId"
: القيمة منaz ad sp create-for-rbac
الإخراجAZURE_TENANT_ID
"tenant"
: القيمة منaz ad sp create-for-rbac
الإخراجAZURE_SUBSCRIPTION_ID
id
: القيمة منaz account show
الإخراج
لكل سر:
- حدد سر مستودع جديد.
- بالنسبة إلى Name، أدخل الاسم السري.
- بالنسبة إلى البيانات السرية، أدخل القيمة.
- حدد Add secret.
إضافة بيانات اعتماد موحدة
إنشاء شهادات متحدة لتخويل إجراءات GitHub للوصول إلى التطبيق.
في مدخل Microsoft Azure، انتقل إلى تسجيلات التطبيقات.
ابحث عن التطبيق الذي يطابق القيمة التي
displayName
تم إرجاعها في الخطوة السابقةaz ad sp create-for-rbac
وحدده. بشكل افتراضي، يستخدم اسم التطبيق الطابع الزمني لإنشاء كيان الخدمة.تحقق من أن قيم appID (معرف العميل) ومعرف الكائن (معرف كائن التطبيق) ومعرف الدليل (معرف المستأجر) تتطابق مع إخراج JSON السابق.
في جزء التنقل الأيمن، حدد Certificates & secrets.
في شاشة Certificates and secrets ، حدد علامة التبويب Federated credentials .
حدد إضافة بيانات اعتماد.
لإضافة بيانات الاعتماد المرحلية، في شاشة إضافة بيانات اعتماد ، حدد المعلومات التالية أو أدخلها:
- سيناريو بيانات الاعتماد الموحدة: حدد GitHub Actions التي تنشر موارد Azure.
- المؤسسة: أدخل اسم مستخدم GitHub.
- المستودع: أدخل mslearn-aks-deployment-pipeline-github-actions.
- نوع الكيان: حدد Branch.
- اسم فرع GitHub: أدخل main.
- الاسم: أدخل staging-cred.
- الوصف أدخل الاختبار.
حدد إضافة.
لإضافة بيانات اعتماد الإنتاج، حدد إضافة بيانات اعتماد مرة أخرى، وفي شاشة إضافة بيانات اعتماد ، أدخل جميع القيم نفسها كما في بيانات الاعتماد السابقة باستثناء:
- نوع الكيان: حدد Tag.
- اسم علامة GitHub: أدخل الإصدار 2.0.0، لأنه في الخطوة التالية تقوم بنشر الإصدار 2.
- الاسم: أدخل prod-cred.
حدد إضافة.
نشر التطبيق باستخدام Helm
الآن بعد أن قمت بتكوين Helm ومنح حق الوصول إلى نظام المجموعة الخاص بك، فأنت جاهز لنشر التطبيق.
إضافة خطوة Run Helm Deploy
مرة أخرى في ملف build-staging.yml في GitHub، بعد الخطوة الأخيرة في
deploy
الوظيفة، قم بإنشاء خطوة جديدة باسمRun Helm Deploy
. أسفله، أضف مفتاحا آخر يسمىrun
.- name: Run Helm Deploy run:
يمكنك استخدام
run
المفتاح لتنفيذ أي أمر shell داخل الحاوية. يستخدمrun
هذا المسار المفتاح لتنفيذ أمر Helm التالي:helm upgrade --install --create-namespace --atomic --wait --namespace staging contoso-website \ ./kubernetes/contoso-website \ --set image.repository=${{ secrets.ACR_NAME }} \ --set dns.name=${{ secrets.DNS_NAME }}
فهم ما تفعله كل معلمة:
المعلمة الإجراء أو القيمة helm upgrade
ترقية إصدار مثبت. --install
إذا لم يكن الإصدار موجودا، فقم بتثبيته. --create-namespace
إذا لم تكن مساحة الاسم في العلامة --namespace
موجودة، فسينشئها.--atomic
إذا فشل الإصدار، يزيل كافة أحمال العمل التي تم تثبيتها. --wait
ينتظر حتى ينتهي الإصدار ويعيد OK
الحالة.--namespace staging contoso-website
contoso-website
نشر الإصدار إلىstaging
مساحة الاسم../kubernetes/contoso-website
موقع دليل المخططات. --set image.repository
التحديثات قيمة image.repository
في ملف values.yaml لهذا الإصدار فقط.--set dns.name
dns.name
التحديثات المفتاح في ملف values.yaml لهذا الإصدار فقط.أضف الأمر إلى الملف وقم بتعيينه للتشغيل، بدءا من
|
الحرف .Run Helm deploy
يجب أن تتطابق الخطوة مع هذا المثال:... - name: Run Helm Deploy run: | helm upgrade \ --install \ --create-namespace \ --atomic \ --wait \ --namespace staging \ contoso-website \ ./kubernetes/contoso-website \ --set image.repository=${{ secrets.ACR_NAME }} \ --set dns.name=${{ secrets.DNS_NAME }}
يجب أن يبدو ملف build-staging.yml المكتمل مثل المثال التالي:
name: Build and push the latest build to staging on: push: branches: [ main ] jobs: build_push_image: runs-on: ubuntu-20.04 steps: - uses: actions/checkout@v2 - name: Set up Buildx uses: docker/setup-buildx-action@v3.0.0 - name: Docker Login uses: docker/login-action@v3.0.0 with: registry: ${{ secrets.ACR_NAME }} username: ${{ secrets.ACR_LOGIN }} password: ${{ secrets.ACR_PASSWORD }} - name: Build and push staging images uses: docker/build-push-action@v5.0.0 with: context: . push: true tags: ${{secrets.ACR_NAME}}/contoso-website:latest deploy: runs-on: ubuntu-20.04 needs: build_push_image # Waits for the execution of the previous job permissions: id-token: write # Required for requesting the JWT contents: read # Required for actions/checkout steps: - uses: actions/checkout@v2 - name: Install Helm uses: Azure/setup-helm@v1 with: version: v3.3.1 - name: Sign in to Azure with OIDC uses: Azure/login@v1.5.1 with: client-id: ${{ secrets.AZURE_CLIENT_ID }} tenant-id: ${{ secrets.AZURE_TENANT_ID }} subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }} - name: Azure Kubernetes set context uses: Azure/aks-set-context@v3 with: resource-group: ${{ secrets.RESOURCE_GROUP }} cluster-name: ${{ secrets.CLUSTER_NAME }} - name: Run Helm Deploy run: | helm upgrade \ --install \ --create-namespace \ --atomic \ --wait \ --namespace staging \ contoso-website \ ./kubernetes/contoso-website \ --set image.repository=${{ secrets.ACR_NAME }} \ --set dns.name=${{ secrets.DNS_NAME }}
تعيين سر DNS_NAME
في علامة تبويب متصفح جديدة، انتقل إلى نسخة المستودع، وحدد علامة التبويب الإعدادات، ثم حدد Secrets and variables>Actions من القائمة اليسرى.
حدد سر مستودع جديد.
لـ الاسم، أدخل
DNS_NAME
.بالنسبة إلى البيانات السرية، أدخل قيمة اسم منطقة DNS AKS من إخراج البرنامج النصي الأصلي للإعداد.
إذا لم يكن لديك هذه القيمة، فقم بتشغيل الأمر التالي في Cloud Shell، واستبدال قيمك ب
<resource-group-name>
و<aks-cluster-name>
:az aks show -g <resource-group-name> -n <aks-cluster-name> -o tsv --query addonProfiles.httpApplicationRouting.config.HTTPApplicationRoutingZoneName
حدد Add secret.
تنفيذ التغييرات واختبار التوزيع المرحلي
لتثبيت التغييرات، حدد Commit changes. أدخل وصفا للتثبيت، ثم حدد Commit changes.
حدد علامة التبويب Actions لمشاهدة البنية قيد التشغيل.
بعد نجاح البناء، في المستعرض، انتقل إلى
contoso-staging.<aks-dns-zone-name>
لتأكيد ظهور موقع الويب.
تشغيل التوزيع على الإنتاج
الخطوة التالية هي إنشاء سير عمل الإنتاج.
في دليل .github/workflows في المستودع الخاص بك، افتح ملف build-production.yml للتحرير.
انسخ
deploy
المهمة من البنية الأساسية لبرنامج ربط العمليات التجارية المرحلي والصقها أسفل السطر الأخير في ملف build-production.yml .Run Helm Deploy
قم بتغيير الخطوة للنشر إلى مساحة اسم الإنتاج عن طريق تغيير العلامة--namespace
منstaging
إلىproduction
.في نهاية الأمر Helm، أضف معلمة جديدة،
--set image.tag=${GITHUB_REF##*/}
.هنا، يمكنك استخدام ميزة Bash تسمى توسيع المعلمة. يقوم التوسيع
${ENV##<wildcard><character>}
بإرجاع آخر تكرار للسلسلة بعدcharacter
.في هذه الحالة، تريد الحصول على اسم العلامة فقط، والذي يتم تمثيله كوقت تشغيل إجراءات GitHub،
GITHUB_REF
. الفروع هيrefs/heads/<branch>
، بينما العلامات هيrefs/tags/<tag>
.تريد إزالة
refs/tags/
للحصول على اسم العلامة فقط، لذلك يمكنك تمرير${GITHUB_REF##*/}
لإرجاع كل شيء بعد الأخير/
فيGITHUB_REF
متغير البيئة.يجب أن يبدو ملف build-production.yml النهائي مثل المثال التالي:
name: Build and push the tagged build to production permissions: id-token: write # This is required for requesting the JWT contents: read # This is required for actions/checkout on: push: tags: - 'v*' jobs: build_push_image: runs-on: ubuntu-20.04 steps: - uses: actions/checkout@v2 - name: Fetch latest version id: fetch_version run: echo ::set-output name=TAG::${GITHUB_REF#refs/tags/} - name: Set up Buildx uses: docker/setup-buildx-action@v3.0.0 - name: Docker Login uses: docker/login-action@v3.0.0 with: registry: ${{ secrets.ACR_NAME }} username: ${{ secrets.ACR_LOGIN }} password: ${{ secrets.ACR_PASSWORD }} - name: Build and push production images uses: docker/build-push-action@v2 with: context: . push: true tags: ${{secrets.ACR_NAME}}/contoso-website:latest,${{secrets.ACR_NAME}}/contoso-website:${{ steps.fetch_version.outputs.TAG }} deploy: runs-on: ubuntu-20.04 needs: build_push_image steps: - uses: actions/checkout@v2 - name: Install Helm uses: Azure/setup-helm@v1 with: version: v3.3.1 - name: Login to Azure with OIDC uses: azure/login@v1 with: client-id: ${{ secrets.AZURE_CLIENT_ID }} tenant-id: ${{ secrets.AZURE_TENANT_ID }} subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }} - name: Azure Kubernetes set context uses: Azure/aks-set-context@v3 with: resource-group: ${{ secrets.RESOURCE_GROUP }} cluster-name: ${{ secrets.CLUSTER_NAME }} - name: Run Helm Deploy run: | helm upgrade \ --install \ --create-namespace \ --atomic \ --wait \ --namespace production \ contoso-website \ ./kubernetes/contoso-website \ --set image.repository=${{ secrets.ACR_NAME }} \ --set dns.name=${{ secrets.DNS_NAME }} \ --set image.tag=${GITHUB_REF##*/}
لتثبيت التغييرات، حدد Commit changes. أدخل وصفا للتثبيت، ثم حدد Commit changes.
تغييرات الإنتاج
في كل مرة تقوم فيها بتشغيل سير عمل الإنتاج، تحتاج إلى تحديث الشهادة الموحدة بإصدار العلامة المقابل، كما يلي:
في مدخل Microsoft Azure، انتقل إلى صفحة التطبيق وحدد Certificates & secrets في التنقل الأيسر.
حدد علامة التبويب Federated credentials.
حدد بيانات الاعتماد prod-cred.
في شاشة تحرير بيانات اعتماد ، بجوار استنادا إلى التحديد، قم بزيادة رقم العلامة إلى v.x.x.x جديد مثل v.2.0.1.
حدد تحديث.
في Cloud Shell، قم بتشغيل
git pull
لجلب أحدث التغييرات. ثم قم بتشغيل الأمر التالي لوضع علامة على التغييرات ودفعها، واستبدال علامة الإصدار الجديد بالعناد النائب:git tag -a v<new version tag> -m 'Create new production deployment' && git push --tags
عند المطالبة، قم بتوفير PAT من التدريبات السابقة ككلمة مرور.
في GitHub، افتح علامة التبويب Actions وشاهد العملية قيد التشغيل.
بعد نجاح سير العمل، لاختبار توزيع الإنتاج، انتقل إلى
contoso-production.<aks-dns-zone-name>
في المستعرض وتأكد من ظهور موقع الويب.
تابع إلى الوحدة التالية لحذف مواردك حتى لا تستمر في تحمل الرسوم.