ACR Görevlerinde ç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 çeşitli görüntüler 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 bir 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ştirilerek işi Azure'ın işlem kaynaklarına devrederek 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ırmasının 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:

  • Bir veya daha fazla kapsayıcı görüntüsünü seri veya paralel olarak derleyin, 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, aralarında bir dizi istek yürüterek birden fazla kapsayıcı çalıştırmayı destekler.
  • 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çinde bir dizi adım olarak tanımlanır. Her adım, önceki bir veya daha fazla 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 tanıdık 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. Azure Container Registry gibi özel kayıt defterleri, genel Docker Hub'ı gibi desteklenir.
  • cmd: Çalışan görev bağlamında işlev olarak çalışabilecek şekilde 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ütme ile birim ve işlevsel test sağlar.

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

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

Derleme, test, 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" olarak adlandırılan 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ürsunuz.

Örnek görev YAML dosyası kullanarak görev çalıştıran örnek bir Azure CLI komutu aşağıda verilmiştir. Adımları oluşturulur ve ardından bir görüntü gönderebilirsiniz. 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ışta YAML dosyasında tanımlanan her adımın ilerleme durumu gösterilmelidir. 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ştirme derlemeleri öğretici makalelerine bakın.

Sonraki adımlar

Çok adımlı görev başvurusu ve örnekleri 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.