البرنامج التعليمي: يدير سير عمل حاوية متعدد الخطوات في السحابة عند الالتزام بشفرة المصدر

بالإضافة إلى ⁧⁩مهمة سريعة⁧⁩، تدعم مهام ACR سير العمل متعدد الخطوات ومتعدد الحاويات يمكن تشغيله تلقائيًا عند الالتزام بشفرة المصدر إلى مستودع Git.

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

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

  • تحديد مهمة متعددة الخطوات باستخدام ملف YAML
  • إنشاء مهمة
  • إضافة بيانات الاعتماد إلى المهمة لتمكين الوصول إلى سجل آخر اختياريًا
  • اختبار المهمة
  • عرض حالة المهمة
  • تشغيل المهمة مع الالتزام بالشفرة

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

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

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

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

سجل الحاوية

يجب أن يكون لديك سجل حاويات 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 في مستودع، أنشئ مهمة متعددة الخطوات تؤدي إلى إنشاء صورة حاوية، وتشغيلها ودفعها.

ملف YAML

حدِّد الخطوات اللازمة لمهمة متعددة الخطوات في ⁧⁩ملف YAML⁧⁩. يتم تحديد أول مثال على المهمة متعددة الخطوات لهذا البرنامج التعليمي في الملف ⁧taskmulti.yaml⁩، والموجود في جذر مستودع GitHub الذي نسخته:

version: v1.1.0
steps:
# Build target image
- build: -t {{.Run.Registry}}/hello-world:{{.Run.ID}} -f Dockerfile .
# Run image 
- cmd: -t {{.Run.Registry}}/hello-world:{{.Run.ID}}
  id: test
  detach: true
  ports: ["8080:80"]
- cmd: docker stop test
# Push image
- push:
  - {{.Run.Registry}}/hello-world:{{.Run.ID}}

تؤدي هذه المهمة متعددة الخطوات إلى ما يلي:

  1. تشغيل الخطوة ⁧build⁩ لإنشاء صورة من Dockerfile في دليل العمل. تستهدف الصورة ⁧Run.Registry⁩، والسجل الذي يتم تشغيل المهمة به، ويتم وضع علامة عليها باستخدام معرّف تشغيل مهام ACR مميز.
  2. تشغيل الخطوة ⁧cmd⁩ لتشغيل الصورة في حاوية مؤقتة. هذا المثال يبدأ حاوية طويلة مشغلة في الخلفية ويعيد معرِّف الحاوية، ثم يوقفها. في سيناريو واقعي، يمكنك تضمين خطوات لاختبار الحاوية قيد التشغيل للتأكد من تشغيلها بشكل صحيح.
  3. في الخطوة ⁧push⁩، يدفع الصورة التي تم إنشاؤها إلى سجل التشغيل.

أمر المهمة

أولًا، املأ متغيرات البيئة 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⁧⁩:

az acr task create \
    --registry $ACR_NAME \
    --name example1 \
    --context https://github.com/$GIT_USER/acr-build-helloworld-node.git#main \
    --file taskmulti.yaml \
    --git-access-token $GIT_PAT

تحدد هذه المهمة أن أي شفرة زمنية تلتزم بالفرع ⁧⁩الرئيسي⁧⁩ في المستودع المحدد من قبل ⁧--context⁩، ستشغل مهام ACR المهمة متعددة الخطوات من الشفرة الموجودة في ذلك الفرع. يُحدِّد الملف YAML المحدد من ⁧--file⁩ من جذر المستودع الخطوات.

الإخراج من أمر ⁧⁩إنشاء مهمة az acr⁧⁩ الناجح مشابه لما يلي:

{
  "agentConfiguration": {
    "cpu": 2
  },
  "creationDate": "2020-11-20T03:14:31.763887+00:00",
  "credentials": null,
  "id": "/subscriptions/<Subscription ID>/resourceGroups/myregistry/providers/Microsoft.ContainerRegistry/registries/myregistry/tasks/taskmulti",
  "location": "westus",
  "name": "example1",
  "platform": {
    "architecture": "amd64",
    "os": "linux",
    "variant": null
  },
  "provisioningState": "Succeeded",
  "resourceGroup": "myresourcegroup",
  "status": "Enabled",
  "step": {
    "baseImageDependencies": null,
    "contextAccessToken": null,
    "contextPath": "https://github.com/gituser/acr-build-helloworld-node.git#main",
    "taskFilePath": "taskmulti.yaml",
    "type": "FileTask",
    "values": [],
    "valuesFilePath": null
  },
  "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.git#main",
          "sourceControlAuthProperties": null,
          "sourceControlType": "Github"
        },
        "sourceTriggerEvents": [
          "commit"
        ],
        "status": "Enabled"
      }
    ]
  },
  "type": "Microsoft.ContainerRegistry/registries/tasks"
}

اختبار سير العمل متعدد الخطوات

لاختبار المهمة متعددة الخطوات، شغّلها يدويًا بتنفيذ الأمر ⁧⁩تشغيل المهمة az acr⁧⁩:

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

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

Queued a run with ID: cab
Waiting for an agent...
2020/11/20 00:03:31 Downloading source code...
2020/11/20 00:03:33 Finished downloading source code
2020/11/20 00:03:33 Using acb_vol_cfe6bd55-3076-4215-8091-6a81aec3d1b1 as the home volume
2020/11/20 00:03:33 Creating Docker network: acb_default_network, driver: 'bridge'
2020/11/20 00:03:34 Successfully set up Docker network: acb_default_network
2020/11/20 00:03:34 Setting up Docker configuration...
2020/11/20 00:03:34 Successfully set up Docker configuration
2020/11/20 00:03:34 Logging in to registry: myregistry.azurecr.io
2020/11/20 00:03:35 Successfully logged into myregistry.azurecr.io
2020/11/20 00:03:35 Executing step ID: acb_step_0. Working directory: '', Network: 'acb_default_network'
2020/11/20 00:03:35 Scanning for dependencies...
2020/11/20 00:03:36 Successfully scanned dependencies
2020/11/20 00:03:36 Launching container with name: acb_step_0
Sending build context to Docker daemon  24.06kB
[...]
Successfully built f669bfd170af
Successfully tagged myregistry.azurecr.io/hello-world:cf19
2020/11/20 00:03:43 Successfully executed container: acb_step_0
2020/11/20 00:03:43 Executing step ID: acb_step_1. Working directory: '', Network: 'acb_default_network'
2020/11/20 00:03:43 Launching container with name: acb_step_1
279b1cb6e092b64c8517c5506fcb45494cd5a0bd10a6beca3ba97f25c5d940cd
2020/11/20 00:03:44 Successfully executed container: acb_step_1
2020/11/20 00:03:44 Executing step ID: acb_step_2. Working directory: '', Network: 'acb_default_network'
2020/11/20 00:03:44 Pushing image: myregistry.azurecr.io/hello-world:cf19, attempt 1
[...]
2020/11/20 00:03:46 Successfully pushed image: myregistry.azurecr.io/hello-world:cf19
2020/11/20 00:03:46 Step ID: acb_step_0 marked as successful (elapsed time in seconds: 7.425169)
2020/11/20 00:03:46 Populating digests for step ID: acb_step_0...
2020/11/20 00:03:47 Successfully populated digests for step ID: acb_step_0
2020/11/20 00:03:47 Step ID: acb_step_1 marked as successful (elapsed time in seconds: 0.827129)
2020/11/20 00:03:47 Step ID: acb_step_2 marked as successful (elapsed time in seconds: 2.112113)
2020/11/20 00:03:47 The following dependencies were found:
2020/11/20 00:03:47
- image:
    registry: myregistry.azurecr.io
    repository: hello-world
    tag: cf19
    digest: sha256:6b981a8ca8596e840228c974c929db05c0727d8630465de536be74104693467a
  runtime-dependency:
    registry: registry.hub.docker.com
    repository: library/node
    tag: 15-alpine
    digest: sha256:8dafc0968fb4d62834d9b826d85a8feecc69bd72cd51723c62c7db67c6dec6fa
  git:
    git-head-revision: 1a3065388a0238e52865db1c8f3e97492a43444c

Run ID: cab was successful after 18s

تشغيل بناء يتميز بالالتزام

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

أولاً، تأكد من أنك في الدليل الذي يحتوي على نسخة محلية خاصة بك من ⁧⁩المستودع⁧⁩:

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: cad

[...]

Run ID: cad was successful after 37s

عمليات إنشاء القائمة

لمشاهدة قائمة المهمة المُشغلة التي أكملتها مهام 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
--------  --------------  ----------  ---------  ---------  --------------------  ----------
cad       example1        linux       Succeeded  Commit     2020-11-20T00:22:15Z  00:00:35
cac       taskhelloworld  linux       Succeeded  Commit     2020-11-20T00:22:15Z  00:00:22
cab       example1        linux       Succeeded  Manual     2020-11-20T00:18:36Z  00:00:47

إنشاء مهمة متعددة الخطوات ومتعددة السجلات

لدى مهام ACR بشكل افتراضي أذونات لدفع الصور أو سحبها من السجل حيث يتم تشغيل المهمة. ربما ترغب في تشغيل مهمة متعددة الخطوات تستهدف سجل واحد أو أكثر بالإضافة إلى سجل التشغيل. على سبيل المثال، ربما تحتاج إلى إنشاء صور في سجل واحد، وتخزين الصور بعلامات مختلفة في سجل ثانٍ يتم الوصول إليه بواسطة نظام إنتاج. يوضح هذا المثال كيفية إنشاء مثل هذه المهمة وتوفير بيانات اعتماد لتسجيل آخر.

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

لإنشاء المهمة، تحتاج إلى اسم خادم تسجيل الدخول إلى السجل الذي هو النموذج ⁧⁩mycontainerregistrydate.azurecr.io⁧⁩ (جميعها بحروف صغيرة). في هذا المثال، يمكنك استخدام السجل الثاني لتخزين الصور التي تحمل علامة حسب تاريخ الإنشاء.

ملف YAML

يتم تحديد المثال الثاني على المهمة متعددة الخطوات لهذا البرنامج التعليمي في الملف ⁧taskmulti-multiregistry.yaml⁩، والموجود في جذر مستودع GitHub الذي نسخته:

version: v1.1.0
steps:
# Build target images
- build: -t {{.Run.Registry}}/hello-world:{{.Run.ID}} -f Dockerfile .
- build: -t {{.Values.regDate}}/hello-world:{{.Run.Date}} -f Dockerfile .
# Run image 
- cmd: -t {{.Run.Registry}}/hello-world:{{.Run.ID}}
  id: test
  detach: true
  ports: ["8080:80"]
- cmd: docker stop test
# Push images
- push:
  - {{.Run.Registry}}/hello-world:{{.Run.ID}}
  - {{.Values.regDate}}/hello-world:{{.Run.Date}}

تؤدي هذه المهمة متعددة الخطوات إلى ما يلي:

  1. تشغيل الخطوتين ⁧build⁩ لإنشاء صورة من Dockerfile في دليل العمل:
    • تستهدف الصورة الأولى ⁧Run.Registry⁩، والسجل الذي يتم تشغيل المهمة به، ويتم وضع علامة عليها باستخدام معرّف تشغيل مهام ACR.
    • تستهدف الصورة الثانية السجل المعرّف بالقيمة ⁧regDate⁩، والذي قمت بتعيينه عند إنشاء المهمة (أو توفيره من خلال الملف الخارجي ⁧values.yaml⁩ الذي تم تمريره إلى ⁧az acr task create⁩). تم وضع علامة على هذه الصورة بتاريخ التشغيل.
  2. تشغل الخطوة ⁧cmd⁩ لتشغيل إحدى الحاويات المضمنة. هذا المثال يبدأ حاوية طويلة مشغلة في الخلفية ويعيد معرِّف الحاوية، ثم يوقفها. في سيناريو واقعي، قد تختبر حاوية قيد التشغيل للتأكد من تشغيلها بشكل صحيح.
  3. في الخطوة ⁧push⁩، تدفع الصور التي تم إنشاؤها، وهي الأولى لتشغيل السجل، والثانية للسجل المحدد بواسطة ⁧regDate⁩.

أمر المهمة

باستخدام متغيرات البيئة shell المعرّفة مسبقًا أنشئ المهمة بتنفيذ الأمر ⁧⁩إنشاء المهمة az acr⁧⁩ التالي. استبدال اسم السجل الخاص بك لـ ⁧⁩mycontainerregistrydate⁧⁩.

az acr task create \
    --registry $ACR_NAME \
    --name example2 \
    --context https://github.com/$GIT_USER/acr-build-helloworld-node.git#main \
    --file taskmulti-multiregistry.yaml \
    --git-access-token $GIT_PAT \
    --set regDate=mycontainerregistrydate.azurecr.io

إضافة بيانات اعتماد المهمة

لدفع الصور إلى السجل المحدد بالقيمة ⁧regDate⁩، استخدم الأمر ⁧⁩إضافة بيانات اعتماد المهمة az acr⁧⁩ لإضافة بيانات اعتماد تسجيل الدخول لهذا السجل إلى المهمة.

لهذا المثال، نوصي بإنشاء ⁧⁩أساس خدمة⁧⁩ يمكنه الوصول إلى السجل المحدد للدور ⁧⁩AcrPush⁧⁩، بحيث يكون لديه أذونات لدفع الصور. لإنشاء أساس الخدمة، استخدم البرنامج النصي التالي:

#!/bin/bash
# This script requires Azure CLI version 2.25.0 or later. Check version with `az --version`.

# Modify for your environment.
# ACR_NAME: The name of your Azure Container Registry
# SERVICE_PRINCIPAL_NAME: Must be unique within your AD tenant
ACR_NAME=$containerRegistry
SERVICE_PRINCIPAL_NAME=$servicePrincipal

# Obtain the full registry ID
ACR_REGISTRY_ID=$(az acr show --name $ACR_NAME --query "id" --output tsv)
# echo $registryId

# Create the service principal with rights scoped to the registry.
# Default permissions are for docker pull access. Modify the '--role'
# argument value as desired:
# acrpull:     pull only
# acrpush:     push and pull
# owner:       push, pull, and assign roles
PASSWORD=$(az ad sp create-for-rbac --name $SERVICE_PRINCIPAL_NAME --scopes $ACR_REGISTRY_ID --role acrpull --query "password" --output tsv)
USER_NAME=$(az ad sp list --display-name $SERVICE_PRINCIPAL_NAME --query "[].appId" --output tsv)

# Output the service principal's credentials; use these in your services and
# applications to authenticate to the container registry.
echo "Service principal ID: $USER_NAME"
echo "Service principal password: $PASSWORD"

مرّر معرّف التطبيق لأساس الخدمة وكلمة المرور في الأمر ⁧az acr task credential add⁩ التالي. تأكد من تحديث اسم خادم تسجيل الدخول ⁧⁩mycontainerregistrydate⁧⁩ مع اسم السجل الثاني الخاص بك:

az acr task credential add --name example2 \
    --registry $ACR_NAME \
    --login-server mycontainerregistrydate.azurecr.io \
    --username <service-principal-application-id> \
    --password <service-principal-password>

يُرجع CLI اسم خادم تسجيل الدخول إلى السجل الذي أضفته.

اختبار سير العمل متعدد الخطوات

كما هو الحال في المثال السابق، لاختبار المهمة متعددة الخطوات، شغّلها يدويًا بتنفيذ الأمر ⁧⁩تشغيل المهمة az acr⁧⁩. لتشغيل المهمة مع الالتزام بمستودع Git، راجع القسم ⁧⁩تشغيل بناء مع الالتزام⁧⁩.

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

بشكل افتراضي، يقوم الأمر ⁧az acr task run⁩ بدفق إخراج السجل إلى وحدة التحكم الخاصة بك عند تنفيذ الأمر. كما هو الحال سابقًا، يظهر الإخراج تقدّم تشغيل كل خطوة من خطوات المهمة. يتم تكثيف الإخراج لإظهار الخطوات الرئيسية.

المخرجات:

Queued a run with ID: cf1g
Waiting for an agent...
2020/11/20 04:33:39 Downloading source code...
2020/11/20 04:33:41 Finished downloading source code
2020/11/20 04:33:42 Using acb_vol_4569b017-29fe-42bd-83b2-25c45a8ac807 as the home volume
2020/11/20 04:33:42 Creating Docker network: acb_default_network, driver: 'bridge'
2020/11/20 04:33:43 Successfully set up Docker network: acb_default_network
2020/11/20 04:33:43 Setting up Docker configuration...
2020/11/20 04:33:44 Successfully set up Docker configuration
2020/11/20 04:33:44 Logging in to registry: mycontainerregistry.azurecr.io
2020/11/20 04:33:45 Successfully logged into mycontainerregistry.azurecr.io
2020/11/20 04:33:45 Logging in to registry: mycontainerregistrydate.azurecr.io
2020/11/20 04:33:47 Successfully logged into mycontainerregistrydate.azurecr.io
2020/11/20 04:33:47 Executing step ID: acb_step_0. Working directory: '', Network: 'acb_default_network'
2020/11/20 04:33:47 Scanning for dependencies...
2020/11/20 04:33:47 Successfully scanned dependencies
2020/11/20 04:33:47 Launching container with name: acb_step_0
Sending build context to Docker daemon  25.09kB
[...]
Successfully tagged mycontainerregistry.azurecr.io/hello-world:cf1g
2020/11/20 04:33:55 Successfully executed container: acb_step_0
2020/11/20 04:33:55 Executing step ID: acb_step_1. Working directory: '', Network: 'acb_default_network'
2020/11/20 04:33:55 Scanning for dependencies...
2020/11/20 04:33:56 Successfully scanned dependencies
2020/11/20 04:33:56 Launching container with name: acb_step_1
Sending build context to Docker daemon  25.09kB
[...]
Successfully tagged mycontainerregistrydate.azurecr.io/hello-world:20190503-043342z
2020/11/20 04:33:57 Successfully executed container: acb_step_1
2020/11/20 04:33:57 Executing step ID: acb_step_2. Working directory: '', Network: 'acb_default_network'
2020/11/20 04:33:57 Launching container with name: acb_step_2
721437ff674051b6be63cbcd2fa8eb085eacbf38d7d632f1a079320133182101
2020/11/20 04:33:58 Successfully executed container: acb_step_2
2020/11/20 04:33:58 Executing step ID: acb_step_3. Working directory: '', Network: 'acb_default_network'
2020/11/20 04:33:58 Launching container with name: acb_step_3
test
2020/11/20 04:34:09 Successfully executed container: acb_step_3
2020/11/20 04:34:09 Executing step ID: acb_step_4. Working directory: '', Network: 'acb_default_network'
2020/11/20 04:34:09 Pushing image: mycontainerregistry.azurecr.io/hello-world:cf1g, attempt 1
The push refers to repository [mycontainerregistry.azurecr.io/hello-world]
[...]
2020/11/20 04:34:12 Successfully pushed image: mycontainerregistry.azurecr.io/hello-world:cf1g
2020/11/20 04:34:12 Pushing image: mycontainerregistrydate.azurecr.io/hello-world:20190503-043342z, attempt 1
The push refers to repository [mycontainerregistrydate.azurecr.io/hello-world]
[...]
2020/11/20 04:34:19 Successfully pushed image: mycontainerregistrydate.azurecr.io/hello-world:20190503-043342z
2020/11/20 04:34:19 Step ID: acb_step_0 marked as successful (elapsed time in seconds: 8.125744)
2020/11/20 04:34:19 Populating digests for step ID: acb_step_0...
2020/11/20 04:34:21 Successfully populated digests for step ID: acb_step_0
2020/11/20 04:34:21 Step ID: acb_step_1 marked as successful (elapsed time in seconds: 2.009281)
2020/11/20 04:34:21 Populating digests for step ID: acb_step_1...
2020/11/20 04:34:23 Successfully populated digests for step ID: acb_step_1
2020/11/20 04:34:23 Step ID: acb_step_2 marked as successful (elapsed time in seconds: 0.795440)
2020/11/20 04:34:23 Step ID: acb_step_3 marked as successful (elapsed time in seconds: 11.446775)
2020/11/20 04:34:23 Step ID: acb_step_4 marked as successful (elapsed time in seconds: 9.734973)
2020/11/20 04:34:23 The following dependencies were found:
2020/11/20 04:34:23
- image:
    registry: mycontainerregistry.azurecr.io
    repository: hello-world
    tag: cf1g
    digest: sha256:75354e9edb995e8661438bad9913deed87a185fddd0193811f916d684b71a5d2
  runtime-dependency:
    registry: registry.hub.docker.com
    repository: library/node
    tag: 15-alpine
    digest: sha256:8dafc0968fb4d62834d9b826d85a8feecc69bd72cd51723c62c7db67c6dec6fa
  git:
    git-head-revision: 9d9023473c46a5e2c315681b11eb4552ef0faccc
- image:
    registry: mycontainerregistrydate.azurecr.io
    repository: hello-world
    tag: 20190503-043342z
    digest: sha256:75354e9edb995e8661438bad9913deed87a185fddd0193811f916d684b71a5d2
  runtime-dependency:
    registry: registry.hub.docker.com
    repository: library/node
    tag: 15-alpine
    digest: sha256:8dafc0968fb4d62834d9b826d85a8feecc69bd72cd51723c62c7db67c6dec6fa
  git:
    git-head-revision: 9d9023473c46a5e2c315681b11eb4552ef0faccc

Run ID: cf1g was successful after 46s

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

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