Azure Geliştirici CLI yayımlama iş akışları

komutu, azd publish kapsayıcı görüntülerini hemen bir Azure kaynağına dağıtmadan Azure Container Registry veya Docker Hub gibi bir kapsayıcı kayıt defterine oluşturmanıza ve göndermenize olanak tanır.

Derleme ve gönderme adımlarını dağıtım adımından ayırarak, "bir kez derle, her yere dağıt" deseni gibi daha gelişmiş dağıtım iş akışları uygulayabilirsiniz. Bu yaklaşım, Azure Container Apps'i veya AzureKubernetes Service'i (AKS) hedefleyen kapsayıcılı uygulamalar için kullanışlıdır.

Neden azd publish kullanmalı?

Standart azd bir iş akışında azd deploy , komut sırayla üç eylem gerçekleştirir:

  1. Oluştur: Uygulama kodunuzu bir kapsayıcı görüntüsüne oluşturur.
  2. Gönderme: Bu görüntüyü bir kayıt defterine gönderir.
  3. Dağıtma: Yeni görüntüyü çalıştırmak için Azure barındırma hizmetinizi (Container Apps gibi) güncelleştirir.

İç döngü geliştirme için uygun olsa da, bu yaklaşım her dağıtımın yeni bir derleme gerektirdiğini varsayar. Üretim senaryolarında genellikle şunları yapmak istersiniz:

  • Bir kez derleyin, her yere dağıtın: Tek bir yapıt (görüntü) oluşturun, geliştirme ortamında test edin ve ardından aynı yapıtı yeniden derlemeden üretime yükseltin.
  • Yapıtları merkezileştirme: Tüm ortamlarınızın görüntülerini depolamak için tek bir paylaşılan Azure Container Registry (ACR) kullanın.
  • Güvenliği geliştirme: Üretime yalnızca doğrulanmış ve test edilmiş görüntülerin dağıtıldığından emin olun.

azd publish yalnızca 1. ve 2. adımları (Derleme ve Gönderme) işleyerek bu senaryoları etkinleştirir. Ardından, azd deploy belirli bayraklarla kullanarak önceden yayımlanmış görüntü ile 3. adımı (Dağıt) işleyebilirsiniz.

Temel özellikler

  • Bağımsız Yayımlama: Dağıtımı tetiklemeden görüntüleri bir kayıt deposuna yayımlayın.
  • Özel Hedefler: Görüntünün tam olarak nereye gönderilmesi gerektiğini belirtmek için --to bayrağını kullanın, varsayılan adlandırma kurallarını geçersiz kılarak[registry/]repository[:tag].
  • Üçüncü Taraf Kayıt Defteri Desteği: Azure Container Registry'ye ek olarak dış kayıt defterlerine (Docker Hub gibi) gönderme.
  • Kanca Desteği: prepublish ve postpublish kancalarını özel otomasyon için destekler.
  • Hizmet Hedefleme: Şu anda Azure Container Apps ve AKS'de barındırılan hizmetleri desteklemektedir.

Usage

içinde azure.yamltanımlanan belirli bir hizmete ait görüntüyü derlemek ve yayımlamak için:

azd publish <service-name>

Tüm hizmetleri derlemek ve yayımlamak için:

azd publish --all

Parametreler

Flag Description
--all içinde azure.yamltanımlanan tüm hizmetleri yayımlar.
--from-package <image> Kaynaktan oluşturmak yerine mevcut bir yerel görüntüyü veya paketi kullanır.
--to <image-ref> Hedef görüntü başvurusunu belirtir (örneğin, <your-registry>.azurecr.io/my-app:v1). azure.yaml içinde varsayılan adlandırmayı geçersiz kılar.

Uyarı

services.<name>.docker.imagePassthrough: true ile yapılandırılan hizmetler için azd publish, bir görüntü oluşturmaz veya göndermez. Bunun yerine yapılandırılmış uzak imajı yeniden kullanır ve bu hizmet için --to ve --from-package bayraklarını reddeder.

Örnekler

Belirli bir hizmeti özel bir etikete yayımlama:

azd publish api-service --to <your-registry>.azurecr.io/api-service:v1.0.0

Yerel görüntüyü uzak kayıt defterine yayımlama:

Yerel olarak zaten bir görüntü derlediyseniz (örneğin: local-api:dev), kullanarak azdetiketleyebilir ve gönderebilirsiniz:

azd publish api-service --from-package local-api:dev --to <your-registry>.azurecr.io/api-service:v1.0.0

Senaryo: Bir kez oluşturun, her yere dağıtın

Yaygın bir üretim iş akışı, bir görüntüyü bir kez oluşturmayı ve Geliştirme -> Test -> Üretim gibi birden çok ortamda yükseltmeyi içerir. Bunu azd publish ve azd deploy kombinasyonunu kullanarak elde edin.

Bu senaryo, ile services.<name>.docker.imagePassthrough: trueyapılandırılan hizmetler için geçerli değildir çünkü azd publish bu hizmetler için bir görüntü oluşturmaz veya göndermez.

  1. Görüntüyü yayımlama:

    Kodu derleyin ve paylaşılan kayıt defterinize gönderin.

    azd publish api-service --to <your-registry>.azurecr.io/my-app:v1.0.0
    
  2. Geliştirme ortamına dağıt:

    Belirli görüntü sürümünü geliştirme ortamına dağıtın. --from-package bayrağı, azd deploy'e derleme/gönderme adımlarını atlayıp sadece hizmet yapılandırmasını güncelleştirmesini söyler.

    azd env select dev
    azd deploy api-service --from-package <your-registry>.azurecr.io/my-app:v1.0.0
    
  3. Üretime Yükselt:

    Geliştirme'de test ettikten sonra aynı görüntüyü üretim ortamına dağıtın.

    azd env select prod
    azd deploy api-service --from-package <your-registry>.azurecr.io/my-app:v1.0.0
    

Diğer komutlarla karşılaştırma

Command Gerçekleştirilen Eylemler En Uygun
azd publish Derleme -> Gönderme CI/CD boru hatları, artefakt oluşturma, "Bir kez oluştur" iş akışları.
azd publish --from-package Yalnızca gönder önceden oluşturulmuş artifaktleri ortamlara aktarır.
azd deploy Derleme -> Anında İletme -> Dağıtma Standart geliştirme yinelemesi (iç döngü).
azd deploy --from-package Sadece dağıt ortamlara önceden oluşturulmuş/önceden yayımlanmış yapıtları dağıtma.
azd up Sağlama -> Derleme -> Gönderme -> Dağıtma Başlarken, sıfırdan yeni ortamlar başlatmak.

Uyarı

varsayılan davranışı azd up değişmeden kalır. Uçtan uca sürecin tamamını düzenlemeye devam eder. Ancak, gerekirse iş akışlarınızı azure.yaml kullanmak için azd publish'de özelleştirebilirsiniz.

services.<name>.docker.imagePassthrough: true ile yapılandırılan hizmetler için azd publish ve azd publish --from-package geçerli değildir. azd yapılandırılmış uzak imajı oluşturup göndermek yerine yeniden kullanır.

Yapılandırma: azure.yaml

içindeki azure.yamlhizmetleriniz için varsayılan Docker ayarlarını yapılandırın. azd publish komutu gibi --tobayraklar tarafından geçersiz kılınmadığı sürece bu ayarlara saygı gösterir.

name: my-app
services:
  api:
    project: ./src/api
    host: containerapp
    docker:
      registry: 'docker.io/myusername' # Default registry
      image: 'my-api'                  # Default image name
      tag: 'latest'                    # Default tag

Bu yapılandırmayla, azd publish api işlemi, docker.io/myusername/my-api:latest konumuna gönderilir.

Bir uzak görüntüyü imagePassthrough yeniden kullanın

Hizmetinizin, azd oluşturmaması, göndermemesi veya başka bir şekilde yönetmemesi gereken yayımlanmış bir imajı zaten varsa, services.<name>.docker.imagePassthrough: true değerini ayarlayın. Bu seçeneği etkinleştirdiğinizde:

  • services.<name>.image öğesini, açıkça belirtilmiş bir kayıt da dahil olmak üzere, nihai ve tam nitelikli uzak imaj referansı olarak ayarlayın.
  • docker.remoteBuild ile docker.imagePassthrough birleştiremezsiniz.
  • azd publish, hizmet için bir imaj oluşturmaz veya push etmez ve bu hizmet için --to ve --from-package işaretlerini reddeder.
name: my-app
services:
  api:
    host: containerapp
    docker:
      imagePassthrough: true
    image: docker.io/myusername/my-api:v1.0.0

Sonraki Adımlar