قم بتشغيل مهام الإنشاء والاختبار والتصحيح متعددة الخطوات في مهام ACR

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

هام

إذا قمت مسبقاً بإنشاء مهام أثناء المعاينة باستخدام الأمر az acr build-task فسيجب إعادة إنشاء هذه المهام باستخدام الأمر az acr task.

على سبيل المثال، يمكنك تشغيل مهمة بخطوات تعمل على أتمتة المنطق التالي:

  1. بناء صورة لتطبيق الويب
  2. قم تشغيل حاوية تطبيق ويب
  3. بناء صورة اختبار تطبيق الويب
  4. قم بتشغيل حاوية اختبار تطبيق الويب التي تجري اختبارات مقابل حاوية التطبيق قيد التشغيل
  5. إذا نجحت الاختبارات، فأنشئ حزمة أرشيف مخطط Helm
  6. قم بإجراء helm upgrade باستخدام حزمة أرشيف مخطط Helm الجديد

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

سيناريوهات المهام الشائعة

تتيح المهام متعددة الخطوات سيناريوهات مثل المنطق التالي:

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

تعريف مهمة متعددة الخطوات

يتم تعريف مهمة متعددة الخطوات في مهام ACR على أنها سلسلة من الخطوات داخل ملف YAML. يمكن لكل خطوة تحديد التبعيات على الإكمال الناجح لواحدة أو أكثر من الخطوات السابقة. تتوفر أنواع خطوات المهام التالية:

  • build: أنشئ صورة حاوية واحدة أو أكثر باستخدام بنية docker build مألوفة، متسلسلة أو متوازية.
  • push: دفع الصور المنشأة إلى سجل حاوية. يتم دعم السجلات الخاصة مثل Azure Container Registry، كما هو الحال مع Docker Hub العام.
  • cmd: قم بتشغيل حاوية، بحيث يمكن أن تعمل كوظيفة في سياق المهمة قيد التشغيل. يمكنك تمرير المعلمات إلى الحاوية [ENTRYPOINT]، وتحديد خصائص مثل env، وdetach، ومعلمات docker run مألوفة أخرى. يمكّن نوع الخطوة cmd اختبار الوحدة والوظيفة، مع تنفيذ متزامن للحاوية.

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

version: v1.1.0
steps:
  - build: -t $Registry/hello-world:$ID .
  - push: ["$Registry/hello-world:$ID"]

أو أكثر تعقيداً، مثل هذا التعريف الوهمي متعدد الخطوات الذي يتضمن خطوات الإنشاء والاختبار وحزمة الدفة ونشر الدفة (لم يتم عرض سجل الحاوية وتكوين مستودع Helm):

version: v1.1.0
steps:
  - id: build-web
    build: -t $Registry/hello-world:$ID .
    when: ["-"]
  - id: build-tests
    build: -t $Registry/hello-world-tests ./funcTests
    when: ["-"]
  - id: push
    push: ["$Registry/helloworld:$ID"]
    when: ["build-web", "build-tests"]
  - id: hello-world-web
    cmd: $Registry/helloworld:$ID
  - id: funcTests
    cmd: $Registry/helloworld:$ID
    env: ["host=helloworld:80"]
  - cmd: $Registry/functions/helm package --app-version $ID -d ./helm ./helm/helloworld/
  - cmd: $Registry/functions/helm upgrade helloworld ./helm/helloworld/ --reuse-values --set helloworld.image=$Registry/helloworld:$ID

راجع أمثلة المهام لملفات YAML متعددة الخطوات وملفات Dockerfiles للعديد من السيناريوهات.

قم بتشغيل مهمة نموذجية

تدعم المهام كلّاً من التنفيذ اليدوي، الذي يُطلق عليه "بداية سريعة"، والتنفيذ التلقائي على Git الالتزام أو تحديث الصورة الأساسي.

لتشغيل مهمة، عليك أولاً تحديد خطوات المهمة في ملف YAML، ثم تنفيذ أمر Azure CLI az acr run.

فيما يلي مثال على أمر Azure CLI يقوم بتشغيل مهمة باستخدام ملف YAML للمهمة عينة. خطواته تبني صورة ثم تدفعها. قم بتحديث \<acrName\> باسم سجل حاوية Azure الخاص بك قبل تشغيل الأمر.

az acr run --registry <acrName> -f build-push-hello-world.yaml https://github.com/Azure-Samples/acr-tasks.git

عند تشغيل المهمة، يجب أن يُظهر الإخراج تقدم كل خطوة محددة في ملف YAML. في الإخراج التالي، تظهر الخطوات بالشكل acb_step_0 وacb_step_1.

az acr run --registry myregistry -f build-push-hello-world.yaml https://github.com/Azure-Samples/acr-tasks.git
Sending context to registry: myregistry...
Queued a run with ID: yd14
Waiting for an agent...
2018/09/12 20:08:44 Using acb_vol_0467fe58-f6ab-4dbd-a022-1bb487366941 as the home volume
2018/09/12 20:08:44 Creating Docker network: acb_default_network
2018/09/12 20:08:44 Successfully set up Docker network: acb_default_network
2018/09/12 20:08:44 Setting up Docker configuration...
2018/09/12 20:08:45 Successfully set up Docker configuration
2018/09/12 20:08:45 Logging in to registry: myregistry.azurecr-test.io
2018/09/12 20:08:46 Successfully logged in
2018/09/12 20:08:46 Executing step: acb_step_0
2018/09/12 20:08:46 Obtaining source code and scanning for dependencies...
2018/09/12 20:08:47 Successfully obtained source code and scanned for dependencies
Sending build context to Docker daemon  109.6kB
Step 1/1 : FROM hello-world
 ---> 4ab4c602aa5e
Successfully built 4ab4c602aa5e
Successfully tagged myregistry.azurecr-test.io/hello-world:yd14
2018/09/12 20:08:48 Executing step: acb_step_1
2018/09/12 20:08:48 Pushing image: myregistry.azurecr-test.io/hello-world:yd14, attempt 1
The push refers to repository [myregistry.azurecr-test.io/hello-world]
428c97da766c: Preparing
428c97da766c: Layer already exists
yd14: digest: sha256:1a6fd470b9ce10849be79e99529a88371dff60c60aab424c077007f6979b4812 size: 524
2018/09/12 20:08:55 Successfully pushed image: myregistry.azurecr-test.io/hello-world:yd14
2018/09/12 20:08:55 Step id: acb_step_0 marked as successful (elapsed time in seconds: 2.035049)
2018/09/12 20:08:55 Populating digests for step id: acb_step_0...
2018/09/12 20:08:57 Successfully populated digests for step id: acb_step_0
2018/09/12 20:08:57 Step id: acb_step_1 marked as successful (elapsed time in seconds: 6.832391)
The following dependencies were found:
- image:
    registry: myregistry.azurecr-test.io
    repository: hello-world
    tag: yd14
    digest: sha256:1a6fd470b9ce10849be79e99529a88371dff60c60aab424c077007f6979b4812
  runtime-dependency:
    registry: registry.hub.docker.com
    repository: library/hello-world
    tag: latest
    digest: sha256:0add3ace90ecb4adbf7777e9aacf18357296e799f81cabc9fde470971e499788
  git: {}


Run ID: yd14 was successful after 19s

لمزيد من المعلومات حول الإنشاءات المؤتمتة على Git الالتزام أو تحديث الصورة الأساسي، راجع المقالات التعليمية إنشاءات الصور تلقائياً وإصدارات تحديث الصورة الأساسية.

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

يمكنك العثور على مرجع وأمثلة مهمة متعددة الخطوات هنا: