الدرس: أتمتة بناء صور الحاوية في السحابة عند التزام الشيفرة المصدرية

بالإضافة إلى مهمة سريعة، يدعم ACR Tasks بناء صور حاويات Docker التلقائية في السحابة عند التزام الشيفرة المصدرية في مستودع Git. تشمل سياقات Git المدعومة لمهام ACR GitHub أو Azure Repos العامة أو الخاصة.

‏‫ملاحظة

حاليا، لا يدعم ACR Tasks محفزات الالتزام أو سحب الطلبات في مستودعات GitHub Enterprise.

في هذا الدرس، تقوم مهمة ACR الخاصة بك ببناء ودفع صورة حاوية واحدة محددة في ملف Docker عند التزام كود المصدر في مستودع Git. لإنشاء مهمة متعددة الخطوات تستخدم ملف YAML لتحديد خطوات لبناء ودفع واختبار عدة حاويات على التزام الكود، راجع التعليم: تشغيل سير عمل حاويات متعدد الخطوات في السحابة عند التزام الشيفرة المصدرية. للحصول على نظرة عامة على مهام ACR، راجع أتمتة نظام التشغيل وتصحيح الإطار مع مهام ACR

في هذا البرنامج التعليمي:

  • إنشَاء مهمة
  • اختبر المهمة
  • عرض حالة المهمة
  • تفعيل المهمة من خلال التزام كود

يفترض هذا الدرس أنك قد أنهيت بالفعل الخطوات في الدرس السابق. إذا لم تفعل ذلك بعد، أكمل الخطوات في قسم المتطلبات المسبقة في الدرس السابق قبل المتابعة.

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

الحصول على نموذج التعليمات البرمجية

يفترض هذا الدرس أنك قد أنهيت بالفعل الخطوات في الدرس السابق، وقمت بتفرع ونسخ مستودع العينات. إذا لم تفعل ذلك بعد، أكمل الخطوات في قسم المتطلبات المسبقة في الدرس السابق قبل المتابعة.

سجل الحاوية

يجب أن يكون لديك سجل حاويات Azure ضمن اشتراكك في Azure لإكمال هذا الدرس. إذا كنت بحاجة إلى سجل (ريجلي)، راجع الدرس السابق، أو Quickstart: إنشاء سجل حاوية باستخدام Azure CLI.

إنشاء رمز وصول شخصي ل GitHub

لتفعيل مهمة على التزام في مستودع Git، تحتاج مهام ACR إلى رمز وصول شخصي (PAT) للوصول إلى المستودع. إذا لم يكن لديك PAT بالفعل، اتبع هذه الخطوات لإنشاء نموذج في GitHub:

  1. اذهب إلى صفحة إنشاء رموز الوصول الشخصي على GitHub.

  2. أدخل وصفا قصيرا للرمز، على سبيل المثال: "عرض مهام ACR"

  3. اختر نطاقات ACR للوصول إلى المستودع. للوصول إلى مستودع عام كما في هذا الدرس، تحت الريبو، قم بتمكين repo:status و public_repo

    لقطة شاشة لصفحة توليد رموز الوصول الشخصي في GitHub

    ‏‫ملاحظة

    لإنشاء PAT للوصول إلى مستودع خاص ، اختر النطاق للتحكم الكامل في المستودعات .

  4. اختر زر توليد الرمز (قد يطلب منك تأكيد كلمة المرور الخاصة بك)

  5. انسخ وحفظ الرمز الذي تم إنشاؤه في مكان آمن (تستخدم هذا الرمز عند تحديد مهمة في القسم التالي)

    لقطة شاشة لرمز الوصول الشخصي الذي تم إنشاؤه في GitHub

إعداد البيئة الخاصة بك لـ Azure CLI

أنشئ مهمة البناء

الآن بعد أن أكملت الخطوات المطلوبة لتمكين مهام ACR لقراءة حالة الالتزام وإنشاء webhooks في المستودع، يمكنك إنشاء مهمة تفعل بناء صورة الحاوية على الالتزامات في المستودع.

أولا، قم بتعبئة هذه المتغيرات البيئية الهيكلية بقيم مناسبة لبيئتك. هذه الخطوة ليست مطلوبة بالضرورة، لكنها تجعل تنفيذ أوامر واجهة Azure متعددة الأسطر في هذا الدرس أسهل قليلا. إذا لم تملأ هذه المتغيرات البيئية، يجب عليك استبدال كل قيمة يدويا أينما ظهرت في أوامر المثال.

ACR_NAME=<registry-name>        # The name of your Azure container registry
GIT_USER=<github-username>      # Your GitHub user account name
GIT_PAT=<personal-access-token> # The PAT you generated in the previous section

الآن، أنشئ المهمة بتنفيذ أمر إنشاء مهمة az acr التالية.

‏‫ملاحظة

يعتمد ملف Docker المستخدَم في المثال التالي على صورة حاوية قاعدة عامة من Docker Hub. لتحسين الموثوقية عند استخدام المحتوى العام، قم باستيراد الصورة وإدارتها في سجل حاوية Azure خاص، وتحديث Dockerfile الخاص بك لاستخدام الصورة الأساسية المُدارة بشكل خاص. تعرف على المزيد حول العمل مع الصور العامة.

az acr task create \
    --registry $ACR_NAME \
    --name taskhelloworld \
    --image helloworld:{{.Run.ID}} \
    --context https://github.com/$GIT_USER/acr-build-helloworld-node.git#master \
    --file Dockerfile \
    --git-access-token $GIT_PAT

تحدد هذه المهمة أن أي كود زمني يلتزم بالفرع الرئيسي في المستودع المحدد بواسطة --context، ستبني مهام ACR صورة الحاوية من الكود في ذلك الفرع. يتم استخدام ملف Dockerfile المحدد بواسطة --file من جذر المستودع لبناء الصورة. تحدد الوسيطة --image قيمة معلمية ل {{.Run.ID}} لجزء الإصدار من وسم الصورة، مما يضمن أن الصورة المبنية ترتبط ببناء محدد، ويتم وسمها بشكل فريد.

الناتج عن أمر إنشاء مهمة az acr الناجح مشابه للأوامر التالية:

{
  "agentConfiguration": {
    "cpu": 2
  },
  "creationDate": "2010-11-19T22:42:32.972298+00:00",
  "id": "/subscriptions/<Subscription ID>/resourceGroups/myregistry/providers/Microsoft.ContainerRegistry/registries/myregistry/tasks/taskhelloworld",
  "location": "westcentralus",
  "name": "taskhelloworld",
  "platform": {
    "architecture": "amd64",
    "os": "Linux",
    "variant": null
  },
  "provisioningState": "Succeeded",
  "resourceGroup": "myregistry",
  "status": "Enabled",
  "step": {
    "arguments": [],
    "baseImageDependencies": null,
    "contextPath": "https://github.com/gituser/acr-build-helloworld-node#main",
    "dockerFilePath": "Dockerfile",
    "imageNames": [
      "helloworld:{{.Run.ID}}"
    ],
    "isPushEnabled": true,
    "noCache": false,
    "type": "Docker"
  },
  "tags": null,
  "timeout": 3600,
  "trigger": {
    "baseImageTrigger": {
      "baseImageTriggerType": "Runtime",
      "name": "defaultBaseimageTriggerName",
      "status": "Enabled"
    },
    "sourceTriggers": [
      {
        "name": "defaultSourceTriggerName",
        "sourceRepository": {
          "branch": "main",
          "repositoryUrl": "https://github.com/gituser/acr-build-helloworld-node#main",
          "sourceControlAuthProperties": null,
          "sourceControlType": "GitHub"
        },
        "sourceTriggerEvents": [
          "commit"
        ],
        "status": "Enabled"
      }
    ]
  },
  "type": "Microsoft.ContainerRegistry/registries/tasks"
}

اختبار مهمة البناء

الآن لديك مهمة تحدد بناء البناء. لاختبار خط أنابيب البناء، قم بتشغيل بناء يدويا عن طريق تنفيذ أمر تشغيل مهمة az acr :

az acr task run --registry $ACR_NAME --name taskhelloworld

افتراضيا، يقوم الأمر az acr task run ببث مخرجات السجل إلى جهازك عند تنفيذ الأمر. يتم اختصار المخرج لعرض الخطوات الرئيسية.

2023/11/19 22:51:00 Using acb_vol_9ee1f28c-4fd4-43c8-a651-f0ed027bbf0e as the home volume
2023/11/19 22:51:00 Setting up Docker configuration...
2023/11/19 22:51:02 Successfully set up Docker configuration
2023/11/19 22:51:02 Logging in to registry: myregistry.azurecr.io
2023/11/19 22:51:03 Successfully logged in
2023/11/19 22:51:03 Executing step: build
2023/11/19 22:51:03 Obtaining source code and scanning for dependencies...
2023/11/19 22:51:05 Successfully obtained source code and scanned for dependencies
Sending build context to Docker daemon  23.04kB
Step 1/5 : FROM node:15-alpine
[...]
Step 5/5 : CMD ["node", "/src/server.js"]
 ---> Running in 7382eea2a56a
Removing intermediate container 7382eea2a56a
 ---> e33cd684027b
Successfully built e33cd684027b
Successfully tagged myregistry.azurecr.io/helloworld:da2
2023/11/19 22:51:11 Executing step: push
2023/11/19 22:51:11 Pushing image: myregistry.azurecr.io/helloworld:da2, attempt 1
The push refers to repository [myregistry.azurecr.io/helloworld]
4a853682c993: Preparing
[...]
4a853682c993: Pushed
[...]
da2: digest: sha256:c24e62fd848544a5a87f06ea60109dbef9624d03b1124bfe03e1d2c11fd62419 size: 1366
2023/11/19 22:51:21 Successfully pushed image: myregistry.azurecr.io/helloworld:da2
2023/11/19 22:51:21 Step id: build marked as successful (elapsed time in seconds: 7.198937)
2023/11/19 22:51:21 Populating digests for step id: build...
2023/11/19 22:51:22 Successfully populated digests for step id: build
2023/11/19 22:51:22 Step id: push marked as successful (elapsed time in seconds: 10.180456)
The following dependencies were found:
- image:
    registry: myregistry.azurecr.io
    repository: helloworld
    tag: da2
    digest: sha256:c24e62fd848544a5a87f06ea60109dbef9624d03b1124bfe03e1d2c11fd62419
  runtime-dependency:
    registry: registry.hub.docker.com
    repository: library/node
    tag: 9-alpine
    digest: sha256:8dafc0968fb4d62834d9b826d85a8feecc69bd72cd51723c62c7db67c6dec6fa
  git:
    git-head-revision: 68cdf2a37cdae0873b8e2f1c4d80ca60541029bf


Run ID: ca6 was successful after 27s

تفعيل بناء مع التزام

الآن بعد أن اختبرت المهمة بتشغيلها يدويا، قم بتفعيلها تلقائيا عند تغيير شفرة المصدر.

أولا، تأكد من وجودك في الدليل الذي يحتوي على نسختك المحلية من المستودع:

cd acr-build-helloworld-node

بعد ذلك، نفذ الأوامر التالية لإنشاء والتزام ودفع ملف جديد إلى فرع المستودع على GitHub:

echo "Hello World!" > hello.txt
git add hello.txt
git commit -m "Testing ACR Tasks"
git push origin main

قد يطلب منك تقديم بيانات اعتماد GitHub الخاصة بك عند تنفيذ الأمر git push . أدخل اسم المستخدم الخاص بك على GitHub، وأدخل رمز الوصول الشخصي (PAT) الذي أنشأته سابقا لكلمة المرور.

Username for 'https://github.com': <github-username>
Password for 'https://githubuser@github.com': <personal-access-token>

بمجرد أن تدفع التزاما إلى مستودعك، يقوم الرابط الذي أنشأه ACR Tasks بتشغيل ويبدأ بناء في Azure Container Registry. عرض السجلات الخاصة بالمهمة الجارية حاليا للتحقق من تقدم البناء ومراقبته:

az acr task logs --registry $ACR_NAME

الإخراج مشابه للمهمة التالية، حيث تظهر المهمة المنفذة حاليا (أو آخر مهمة تم تنفيذها):

Showing logs of the last created run.
Run ID: ca7

[...]

Run ID: ca7 was successful after 38s

بناءات القوائم

لرؤية قائمة بالمهام التي أكملها ACR Tasks لسجل السجل الخاص بك، قم بتشغيل أمر az acr task list-run :

az acr task list-runs --registry $ACR_NAME --output table

يجب أن يظهر الناتج من الأمر مشابها لما يلي. يتم عرض التشغيلات التي نفذها ACR Tasks، ويظهر "Git Commit" في عمود TRIGGER لأحدث مهمة:

RUN ID    TASK            PLATFORM    STATUS     TRIGGER    STARTED               DURATION
--------  --------------  ----------  ---------  ---------  --------------------  ----------
ca7       taskhelloworld  linux       Succeeded  Commit     2023-11-19T22:54:34Z  00:00:29
ca6       taskhelloworld  linux       Succeeded  Manual     2023-11-19T22:51:47Z  00:00:24
ca5                       linux       Succeeded  Manual     2023-11-19T22:23:42Z  00:00:23

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

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