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

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

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

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

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

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

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

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

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

سجل الحاوية

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

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

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

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

  2. أدخل وصفا مختصرا للرمز المميز، على سبيل المثال، "ACR Tasks Demo"

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

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

    إشعار

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

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

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

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

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

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

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

ملف 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 task create :

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": "2023-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 task run :

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

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

Queued a run with ID: cab
Waiting for an agent...
2023/11/20 00:03:31 Downloading source code...
2023/11/20 00:03:33 Finished downloading source code
2023/11/20 00:03:33 Using acb_vol_cfe6bd55-3076-4215-8091-6a81aec3d1b1 as the home volume
2023/11/20 00:03:33 Creating Docker network: acb_default_network, driver: 'bridge'
2023/11/20 00:03:34 Successfully set up Docker network: acb_default_network
2023/11/20 00:03:34 Setting up Docker configuration...
2023/11/20 00:03:34 Successfully set up Docker configuration
2023/11/20 00:03:34 Logging in to registry: myregistry.azurecr.io
2023/11/20 00:03:35 Successfully logged into myregistry.azurecr.io
2023/11/20 00:03:35 Executing step ID: acb_step_0. Working directory: '', Network: 'acb_default_network'
2023/11/20 00:03:35 Scanning for dependencies...
2023/11/20 00:03:36 Successfully scanned dependencies
2023/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
2023/11/20 00:03:43 Successfully executed container: acb_step_0
2023/11/20 00:03:43 Executing step ID: acb_step_1. Working directory: '', Network: 'acb_default_network'
2023/11/20 00:03:43 Launching container with name: acb_step_1
279b1cb6e092b64c8517c5506fcb45494cd5a0bd10a6beca3ba97f25c5d940cd
2023/11/20 00:03:44 Successfully executed container: acb_step_1
2023/11/20 00:03:44 Executing step ID: acb_step_2. Working directory: '', Network: 'acb_default_network'
2023/11/20 00:03:44 Pushing image: myregistry.azurecr.io/hello-world:cf19, attempt 1
[...]
2023/11/20 00:03:46 Successfully pushed image: myregistry.azurecr.io/hello-world:cf19
2023/11/20 00:03:46 Step ID: acb_step_0 marked as successful (elapsed time in seconds: 7.425169)
2023/11/20 00:03:46 Populating digests for step ID: acb_step_0...
2023/11/20 00:03:47 Successfully populated digests for step ID: acb_step_0
2023/11/20 00:03:47 Step ID: acb_step_1 marked as successful (elapsed time in seconds: 0.827129)
2023/11/20 00:03:47 Step ID: acb_step_2 marked as successful (elapsed time in seconds: 2.112113)
2023/11/20 00:03:47 The following dependencies were found:
2023/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>

بمجرد دفع التثبيت إلى المستودع الخاص بك، ينطلق خطاف الويب الذي أنشأته مهام 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 task list-runs :

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     2023-11-20T00:22:15Z  00:00:35
cac       taskhelloworld  linux       Succeeded  Commit     2023-11-20T00:22:15Z  00:00:22
cab       example1        linux       Succeeded  Manual     2023-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 task create . استبدل اسم السجل الخاص بك ب 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 task credential add لإضافة بيانات اعتماد تسجيل الدخول لهذا السجل إلى المهمة.

على سبيل المثال، نوصي بإنشاء كيان خدمة بأذونات لدفع الصور إلى السجل. لمنح أذونات الدفع، قم بتعيين Container Registry Repository Writer دور السجلات الممكنة للتحكم في الوصول المستند إلى سمة Microsoft Entra (ABAC) لإدارة أذونات المستودع المستندة إلى Microsoft Entra. بخلاف ذلك، بالنسبة لسجلات غير ABAC، قم بتعيين 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 task run . لتشغيل المهمة مع الالتزام بمستودع Git، راجع القسم تشغيل بنية مع تثبيت.

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

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

إخراج:

Queued a run with ID: cf1g
Waiting for an agent...
2023/11/20 04:33:39 Downloading source code...
2023/11/20 04:33:41 Finished downloading source code
2023/11/20 04:33:42 Using acb_vol_4569b017-29fe-42bd-83b2-25c45a8ac807 as the home volume
2023/11/20 04:33:42 Creating Docker network: acb_default_network, driver: 'bridge'
2023/11/20 04:33:43 Successfully set up Docker network: acb_default_network
2023/11/20 04:33:43 Setting up Docker configuration...
2023/11/20 04:33:44 Successfully set up Docker configuration
2023/11/20 04:33:44 Logging in to registry: mycontainerregistry.azurecr.io
2023/11/20 04:33:45 Successfully logged into mycontainerregistry.azurecr.io
2023/11/20 04:33:45 Logging in to registry: mycontainerregistrydate.azurecr.io
2023/11/20 04:33:47 Successfully logged into mycontainerregistrydate.azurecr.io
2023/11/20 04:33:47 Executing step ID: acb_step_0. Working directory: '', Network: 'acb_default_network'
2023/11/20 04:33:47 Scanning for dependencies...
2023/11/20 04:33:47 Successfully scanned dependencies
2023/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
2023/11/20 04:33:55 Successfully executed container: acb_step_0
2023/11/20 04:33:55 Executing step ID: acb_step_1. Working directory: '', Network: 'acb_default_network'
2023/11/20 04:33:55 Scanning for dependencies...
2023/11/20 04:33:56 Successfully scanned dependencies
2023/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:20230503-043342z
2023/11/20 04:33:57 Successfully executed container: acb_step_1
2023/11/20 04:33:57 Executing step ID: acb_step_2. Working directory: '', Network: 'acb_default_network'
2023/11/20 04:33:57 Launching container with name: acb_step_2
721437ff674051b6be63cbcd2fa8eb085eacbf38d7d632f1a079320133182101
2023/11/20 04:33:58 Successfully executed container: acb_step_2
2023/11/20 04:33:58 Executing step ID: acb_step_3. Working directory: '', Network: 'acb_default_network'
2023/11/20 04:33:58 Launching container with name: acb_step_3
test
2023/11/20 04:34:09 Successfully executed container: acb_step_3
2023/11/20 04:34:09 Executing step ID: acb_step_4. Working directory: '', Network: 'acb_default_network'
2023/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]
[...]
2023/11/20 04:34:12 Successfully pushed image: mycontainerregistry.azurecr.io/hello-world:cf1g
2023/11/20 04:34:12 Pushing image: mycontainerregistrydate.azurecr.io/hello-world:20230503-043342z, attempt 1
The push refers to repository [mycontainerregistrydate.azurecr.io/hello-world]
[...]
2023/11/20 04:34:19 Successfully pushed image: mycontainerregistrydate.azurecr.io/hello-world:20230503-043342z
2023/11/20 04:34:19 Step ID: acb_step_0 marked as successful (elapsed time in seconds: 8.125744)
2023/11/20 04:34:19 Populating digests for step ID: acb_step_0...
2023/11/20 04:34:21 Successfully populated digests for step ID: acb_step_0
2023/11/20 04:34:21 Step ID: acb_step_1 marked as successful (elapsed time in seconds: 2.009281)
2023/11/20 04:34:21 Populating digests for step ID: acb_step_1...
2023/11/20 04:34:23 Successfully populated digests for step ID: acb_step_1
2023/11/20 04:34:23 Step ID: acb_step_2 marked as successful (elapsed time in seconds: 0.795440)
2023/11/20 04:34:23 Step ID: acb_step_3 marked as successful (elapsed time in seconds: 11.446775)
2023/11/20 04:34:23 Step ID: acb_step_4 marked as successful (elapsed time in seconds: 9.734973)
2023/11/20 04:34:23 The following dependencies were found:
2023/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: 20230503-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. للحصول على ميزات متقدمة للمهام متعددة الخطوات، بما في ذلك تنفيذ الخطوة المتوازية والتبعية، راجع مرجع ACR Tasks YAML. انتقل إلى البرنامج التعليمي التالي لمعرفة كيفية إنشاء المهام التي تؤدي إلى إنشاء عند تحديث الصورة الأساسية لصورة الحاوية.