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

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

ملاحظة

حالياً، لا تدعم مهام ACR تنفيذ أو سحب مشغلات الطلب في مستودعات GitHub Enterprise.

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

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

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

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

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

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

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

سجل الحاوية

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

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

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

  1. انتقل إلى صفحة إنشاء PAT على GitHub في https://github.com/settings/tokens/new

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

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

    لقطة شاشة لصفحة إنشاء رمز الوصول الشخصي في GitHub

    ملاحظة

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

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

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

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

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

إنشاء مهمة البناء

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

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

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 Tasks صورة الحاوية من الشفرة في هذا الفرع. يتم استخدام 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⁩ دفق إخراج السجل إلى وحدة التحكم عند تنفيذ الأمر. يتم تكثيف الإخراج لإظهار الخطوات الرئيسية.

2020/11/19 22:51:00 Using acb_vol_9ee1f28c-4fd4-43c8-a651-f0ed027bbf0e as the home volume
2020/11/19 22:51:00 Setting up Docker configuration...
2020/11/19 22:51:02 Successfully set up Docker configuration
2020/11/19 22:51:02 Logging in to registry: myregistry.azurecr.io
2020/11/19 22:51:03 Successfully logged in
2020/11/19 22:51:03 Executing step: build
2020/11/19 22:51:03 Obtaining source code and scanning for dependencies...
2020/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
2020/11/19 22:51:11 Executing step: push
2020/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
2020/11/19 22:51:21 Successfully pushed image: myregistry.azurecr.io/helloworld:da2
2020/11/19 22:51:21 Step id: build marked as successful (elapsed time in seconds: 7.198937)
2020/11/19 22:51:21 Populating digests for step id: build...
2020/11/19 22:51:22 Successfully populated digests for step id: build
2020/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>

بمجرد دفع الالتزام بالمستودع الخاص بك، يطلق webhook الذي أنشأته مهام ACR، ويبني المهمة في 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 للسجل الخاص بك، شغّل الأمر ⁧⁩قائمة تشغيل مهام az acr⁧⁩:

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

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

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

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

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