ACR Görevleri'nde çok adımlı derleme, test ve düzeltme eki görevleri çalıştırma

Çok adımlı görevler, çok adımlı, çok kapsayıcı tabanlı iş akışlarıyla ACR Görevlerinin tek görüntü derleme ve gönderme özelliğini genişletir. Seri veya paralel olarak birkaç görüntü oluşturmak ve göndermek için çok adımlı görevleri kullanın. Ardından bu görüntüleri tek bir görev çalıştırması içinde komut olarak çalıştırın. Her adım bir kapsayıcı görüntüsü derleme veya gönderme işlemini tanımlar ve kapsayıcının yürütülmesini de tanımlayabilir. Çok adımlı bir görevdeki her adım, yürütme ortamı olarak bir kapsayıcı kullanır.

Önemli

Önizlemede daha önce az acr build-task komutuyla görev oluşturduysanız az acr task komutuyla bu görevleri yeniden oluşturmanız gerekebilir.

Örneğin, aşağıdaki mantığı otomatik hale getiren adımlarla bir görev çalıştırabilirsiniz:

  1. Web uygulaması görüntüsü oluşturma
  2. Web uygulaması kapsayıcısını çalıştırma
  3. Web uygulaması test görüntüsü oluşturma
  4. Çalışan uygulama kapsayıcısına karşı testler gerçekleştiren web uygulaması test kapsayıcısını çalıştırma
  5. Testler başarılı olursa Helm grafiği arşiv paketi oluşturun
  6. Yeni Helm grafiği arşiv paketini kullanarak bir helm upgrade gerçekleştirme

Tüm adımlar Azure'da gerçekleştirilir ve işin yükü Azure'ın işlem kaynaklarına devredilir ve altyapı yönetiminden kurtulabilirsiniz. Azure kapsayıcı kayıt defterinizin yanı sıra yalnızca kullandığınız kaynaklar için ödeme alırsınız. Fiyatlandırma hakkında bilgi için Azure Container Registry fiyatlandırma bölümündeki Kapsayıcı Derlemesi bölümüne bakın.

Yaygın görev senaryoları

Çok adımlı görevler aşağıdaki mantık gibi senaryoları etkinleştirir:

  • Seri veya paralel olarak bir veya daha fazla kapsayıcı görüntüsü oluşturun, etiketleyin ve gönderin.
  • Birim testi ve kod kapsamı sonuçlarını çalıştırın ve yakalayın.
  • İşlevsel testleri çalıştırın ve yakalayın. ACR Görevleri birden fazla kapsayıcı çalıştırmayı ve aralarında bir dizi istek yürütmeyi destekler.
  • Bir kapsayıcı görüntüsü derlemesinin ön/son adımları dahil olmak üzere görev tabanlı yürütme gerçekleştirin.
  • Sık kullandığınız dağıtım altyapısıyla bir veya daha fazla kapsayıcıyı hedef ortamınıza dağıtın.

Çok adımlı görev tanımı

ACR Görevleri'ndeki çok adımlı bir görev, YAML dosyası içindeki bir dizi adım olarak tanımlanır. Her adım, bir veya daha fazla önceki adımın başarıyla tamamlanmasıyla ilgili bağımlılıkları belirtebilir. Aşağıdaki görev adımı türleri kullanılabilir:

  • build: Seri veya paralel olarak bilindik docker build söz dizimini kullanarak bir veya daha fazla kapsayıcı görüntüsü oluşturun.
  • push: Yerleşik görüntüleri bir kapsayıcı kayıt defterine gönderin. genel Docker Hub olduğu gibi Azure Container Registry gibi özel kayıt defterleri de desteklenir.
  • cmd: Çalışan görev bağlamında işlev olarak çalışabilecek bir kapsayıcı çalıştırın. Parametreleri kapsayıcının [ENTRYPOINT]öğesine geçirebilir ve env, detach ve diğer tanıdık docker run parametreler gibi özellikleri belirtebilirsiniz. Adım cmd türü, eşzamanlı kapsayıcı yürütmesi ile birim ve işlevsel test olanağı sağlar.

Aşağıdaki kod parçacıklarında bu görev adımı türlerinin nasıl birleştirildiği gösterilir. Çok adımlı görevler, bir Dockerfile dosyasından tek bir görüntü oluşturmak ve kayıt defterinize göndermek kadar basit olabilir; yaml dosyası şuna benzer:

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

Derleme, test etme, helm paketi ve helm dağıtımı adımlarını içeren bu kurgusal çok adımlı tanım gibi daha karmaşık da olabilir (kapsayıcı kayıt defteri ve Helm deposu yapılandırması gösterilmez):

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

Çeşitli senaryolar için çok adımlı görev YAML dosyaları ve Dockerfile'lar için görev örneklerine bakın.

Örnek görev çalıştırma

Görevler hem "hızlı çalıştırma" adı verilen el ile yürütmeyi hem de Git işleme veya temel görüntü güncelleştirmesinde otomatik yürütmeyi destekler.

Bir görevi çalıştırmak için, önce görevin adımlarını bir YAML dosyasında tanımlarsınız, ardından az acr run Azure CLI komutunu yürütürsiniz.

Örnek görev YAML dosyası kullanarak görev çalıştıran örnek bir Azure CLI komutu aşağıda verilmiştir. Adımları bir görüntü oluşturur ve ardından iter. komutunu çalıştırmadan önce kendi Azure kapsayıcı kayıt defterinizin adıyla güncelleştirin \<acrName\> .

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

Görevi çalıştırdığınızda çıkış, YAML dosyasında tanımlanan her adımın ilerleme durumunu göstermelidir. Aşağıdaki çıkışta adımlar ve acb_step_1olarak acb_step_0 görünür.

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 işleme veya temel görüntü güncelleştirmesinde otomatik derlemeler hakkında daha fazla bilgi için Görüntü derlemelerini otomatikleştirme ve Temel görüntü güncelleştirmesi derlemeleri öğretici makalelerine bakın.

Sonraki adımlar

Çok adımlı görev başvurusu ve örneklerini burada bulabilirsiniz:

  • Görev başvurusu - Görev adımı türleri, özellikleri ve kullanımı.
  • Görev örnekleri - Basit ve karmaşık olan çeşitli senaryolar için örnek task.yaml ve Docker dosyaları.
  • Cmd deposu - ACR görevleri için komut olarak kapsayıcı koleksiyonu.