Azure Uygulaması Hizmeti'nde özel kapsayıcılarla sürekli dağıtım

Bu öğreticide, yönetilen Azure Container Registry depolarından veya Docker Hub'dan özel bir kapsayıcı görüntüsü için sürekli dağıtımı yapılandıracaksınız.

1. Dağıtım Merkezi'ne gidin

Azure portalında App Service uygulamanızın yönetim sayfasına gidin.

Sol menüde Dağıtım Merkezi>Ayarları'na tıklayın.

2. Dağıtım kaynağını seçin

Dağıtım kaynağını seçin , senaryonuza bağlıdır:

  • Kapsayıcı kayıt defteri, kapsayıcı kayıt defterinizle App Service arasında CI/CD ayarlar.
  • GitHub'da kapsayıcı görüntünüzün kaynak kodunu tutarsanız GitHub Actions seçeneği size yöneliktir. GitHub deponuza yönelik yeni işlemeler tarafından tetiklenen dağıtım eylemi çalıştırılabilir docker build ve docker push doğrudan kapsayıcı kayıt defterinize çalıştırılabilir, ardından App Service uygulamanızı yeni görüntüyü çalıştıracak şekilde güncelleştirebilir. Daha fazla bilgi için bkz . CI/CD GitHub Actions ile nasıl çalışır?
  • Azure Pipelines ile CI/CD ayarlamak için bkz. Azure Pipelines'tan Azure Web App Kapsayıcısı dağıtma.

Not

Docker Compose uygulaması için Container Registry'yi seçin.

GitHub Actions'ı seçerseniz Yetkile'ye tıklayın ve yetkilendirme istemlerini izleyin. GitHub'ı daha önce yetkilendirdiyseniz, Hesabı Değiştir'e tıklayarak farklı bir kullanıcının deposundan dağıtım yapabilirsiniz.

Azure hesabınızı GitHub ile yetkilendirildikten sonra, dağıtım için Kuruluş, Depo ve Dal'ı seçin.

2. Kayıt defteri ayarlarını yapılandırma

3. Kayıt defteri ayarlarını yapılandırma

Not

Sepet kapsayıcıları (önizleme), App Service'te çok kapsayıcılı (Docker Compose) uygulamaları başarılı olur. Başlamak için bkz. Öğretici: Azure Uygulaması Hizmetinde özel kapsayıcı için sepet kapsayıcısı yapılandırma (önizleme).

Çok kapsayıcılı (Docker Compose) bir uygulama dağıtmak için Kapsayıcı Türünde Docker Compose'u seçin.

Kapsayıcı Türü açılan listesini görmüyorsanız, geri kaydırarak Kaynak'a gelin ve Container Registry'yi seçin.

Kayıt defteri kaynağı'nda kapsayıcı kayıt defterinizin nerede olduğunu seçin. Azure Container Registry veya Docker Hub değilse Özel Kayıt Defteri'ni seçin.

Not

Çok kapsayıcılı (Docker Compose) uygulamanız birden fazla özel görüntü kullanıyorsa, özel görüntülerin aynı özel kayıt defterinde olduğundan ve aynı kullanıcı kimlik bilgileriyle erişilebilir olduğundan emin olun. Çok kapsayıcılı uygulamanız yalnızca genel görüntüler kullanıyorsa, bazı görüntüler Docker Hub'da olmasa bile Docker Hub'ı seçin.

Seçiminizle eşleşen sekmeyi seçerek sonraki adımları izleyin.

Kayıt Defteri açılan listesinde kayıt defterleri uygulamanızla aynı abonelikte görüntülenir. İstediğiniz kayıt defterini seçin .

Not

Dağıtılacak Görüntü ve Etiket'i seçin. İstersensiniz Başlangıç Dosyası'na start up komutunu yazın.

Kapsayıcı Türüne bağlı olarak sonraki adımı izleyin:

  • Docker Compose için özel görüntülerinizin kayıt defterini seçin. Docker Compose dosyanızı karşıya yüklemek için Dosya seç'e tıklayın veya Docker Compose dosyanızın içeriğini yapılandırmaya yapıştırın.
  • Tek Kapsayıcı için dağıtılacak Görüntü ve Etiket'i seçin. İstersensiniz Başlangıç Dosyası'na start up komutunu yazın.

App Service, kapsayıcınızı başlatırken Başlangıç Dosyası'ndaki dizeyi komutun [COMMAND] [ARG...] docker run sonuna (kesim olarak) ekler.

3. CI/CD'yi etkinleştirme

4. CI/CD'yi etkinleştirme

App Service, Azure Container Registry ve Docker Hub ile CI/CD tümleştirmesini destekler. Etkinleştirmek için Sürekli dağıtım'da Açık'ı seçin.

Not

Kaynakta GitHub Actions'ı seçerseniz, CI/CD doğrudan GitHub Actions tarafından işlendiğinden bu seçeneği alamazsınız. Bunun yerine, iş akışı dosyasını incelemek için Önizleme dosyasına tıklayabileceğiniz bir İş Akışı Yapılandırması bölümü görürsünüz. Azure, derleme ve dağıtım görevlerini işlemek için bu dosyayı seçili GitHub kaynak deponuza işler. Daha fazla bilgi için bkz . CI/CD GitHub Actions ile nasıl çalışır?

Bu seçeneği etkinleştirdiğinizde App Service, Azure Container Registry veya Docker Hub'daki deponuza bir web kancası ekler. Seçtiğiniz görüntü ile docker pushher güncelleştirildiğinde deponuz bu web kancasına postalar. Web kancası, güncelleştirilmiş görüntüyü almak için App Service uygulamanızın yeniden başlatılmasına ve çalıştırılmasına docker pull neden olur.

Not

Web kancasının düzgün çalıştığından emin olmak için, Web Uygulamanızda Temel Kimlik Doğrulama Yayımlama Kimlik Bilgileri seçeneğini etkinleştirmeniz önemlidir. Bunun yapılmaması, web kancası için 401 yetkisiz hatasına neden olabilir. Temel Kimlik Doğrulama Yayımlama Kimlik Bilgilerinin etkinleştirilip etkinleştirilmediğini doğrulamak için şu adımları izleyin:

  • Web Uygulamanızın Yapılandırma > Genel Ayarları'na gidin.
  • Temel Kimlik Doğrulama Yayımlama Kimlik Bilgileri seçeneğini bulabileceğiniz Platform Ayarı bölümünü arayın.

Diğer özel kayıt defterleri için, web kancasına el ile veya CI/CD işlem hattında bir adım olarak gönderebilirsiniz. Web kancası URL'sini almak için Web Kancası URL'sinde Kopyala düğmesine tıklayın.

Not

Çok kapsayıcılı (Docker Compose) uygulamalar için destek sınırlıdır:

  • Azure Container Registry için App Service, seçilen kayıt defterinde kapsam olarak kayıt defteriyle bir web kancası oluşturur. docker push Kayıt defterindeki herhangi bir depoya A (Docker Compose dosyanız tarafından başvurulmayanlar dahil) uygulama yeniden başlatmayı tetikler. Web kancasını daha dar bir kapsama değiştirmek isteyebilirsiniz.
  • Docker Hub, kayıt defteri düzeyinde web kancalarını desteklemez. Web kancalarını Docker Compose dosyanızda belirtilen görüntülere el ile eklemeniz gerekir.

4. Ayarlarınızı kaydedin

5. Ayarlarınızı kaydedin

Kaydet'e tıklayın.

CI/CD GitHub Actions ile nasıl çalışır?

Kaynakta GitHub Actions'ı seçerseniz (bkz. Dağıtım kaynağını seçme), App Service CI/CD'yi aşağıdaki yollarla ayarlar:

  • Derleme ve App Service'e dağıtma görevlerini işlemek için GitHub Actions iş akışı dosyasını GitHub deponuza aktarır.
  • Özel kayıt defterinizin kimlik bilgilerini GitHub gizli dizileri olarak ekler. Oluşturulan iş akışı dosyası, özel kayıt defterinizle oturum açmak için Azure/docker-login eylemini çalıştırır ve ardından bu dosyaya dağıtmak için çalıştırırdocker push.
  • Uygulamanızın yayımlama profilini GitHub gizli dizisi olarak ekler. Oluşturulan iş akışı dosyası, App Service ile kimlik doğrulaması yapmak için bu gizli diziyi kullanır, ardından güncelleştirilmiş görüntüyü yapılandırmak için Azure/webapps-deploy eylemini çalıştırır ve güncelleştirilmiş görüntüyü çekmek için bir uygulama yeniden başlatma tetikler.
  • İş akışı çalıştırma günlüklerindeki bilgileri yakalar ve uygulamanızın Dağıtım Merkezi'ndeki Günlükler sekmesinde görüntüler.

GitHub Actions derleme sağlayıcısını aşağıdaki yollarla özelleştirebilirsiniz:

  • github deponuzda oluşturulduktan sonra iş akışı dosyasını özelleştirin. Daha fazla bilgi için bkz . GitHub Actions için iş akışı söz dizimi. Uygulama yeniden başlatmayı tetikleme amacıyla iş akışının Azure/webapps-deploy eylemiyle sona erdiğinden emin olun.
  • Seçili dal korunuyorsa, yapılandırmayı kaydetmeden iş akışı dosyasının önizlemesini görmeye devam edebilir, ardından bunu ve gerekli GitHub gizli dizilerini deponuza el ile ekleyebilirsiniz. Bu yöntem, Azure portalıyla günlük tümleştirmesi sunmaz.
  • Yayımlama profili yerine, Microsoft Entra ID'de hizmet sorumlusu kullanarak dağıtın.

Hizmet sorumlusuyla kimlik doğrulaması

Bu isteğe bağlı yapılandırma, varsayılan kimlik doğrulamasını oluşturulan iş akışı dosyasındaki yayımlama profilleriyle değiştirir.

Azure CLI'da az ad sp create-for-rbac komutuyla bir hizmet sorumlusu oluşturun. Aşağıdaki örnekte subscription-id>, <group-name ve< app-name>> değerlerini kendi değerlerinizle değiştirin.< En üst düzey {}de dahil olmak üzere sonraki adım için tüm JSON çıkışını kaydedin.

az ad sp create-for-rbac --name "myAppDeployAuth" --role contributor \
                            --scopes /subscriptions/<subscription-id>/resourceGroups/<group-name>/providers/Microsoft.Web/sites/<app-name> \
                            --json-auth

Önemli

Güvenlik için hizmet sorumlusuna gereken en düşük erişimi verin. Önceki örnekteki kapsam, kaynak grubunun tamamıyla değil, belirli App Service uygulamasıyla sınırlıdır.

GitHub'da deponuza göz atın, ardından Ayarlar Gizli Diziler > > Yeni gizli dizi ekle'yi seçin. Azure CLI komutundaki JSON çıkışının tamamını gizli dizinin değer alanına yapıştırın . Gizli diziye gibi AZURE_CREDENTIALSbir ad verin.

Dağıtım Merkezi tarafından oluşturulan iş akışı dosyasında aşağıdaki örnekte olduğu gibi kodu kullanarak adımı düzeltinazure/webapps-deploy:

- name: Sign in to Azure 
# Use the GitHub secret you added
- uses: azure/login@v1
    with:
    creds: ${{ secrets.AZURE_CREDENTIALS }}
- name: Deploy to Azure Web App
# Remove publish-profile
- uses: azure/webapps-deploy@v2
    with:
    app-name: '<app-name>'
    slot-name: 'production'
    images: '<registry-server>/${{ secrets.AzureAppService_ContainerUsername_... }}/<image>:${{ github.sha }}'
    - name: Sign out of Azure
    run: |
    az logout

CLI ile otomatikleştirme

Kapsayıcı kayıt defterini ve Docker görüntüsünü yapılandırmak için az webapp config container set komutunu çalıştırın.

az webapp config container set --name <app-name> --resource-group <group-name> --docker-custom-image-name '<image>:<tag>' --docker-registry-server-url 'https://<registry-name>.azurecr.io' --docker-registry-server-user '<username>' --docker-registry-server-password '<password>'

Çok kapsayıcılı (Docker Compose) bir uygulama yapılandırmak için yerel olarak bir Docker Compose dosyası hazırlayın, ardından az webapp config container set komutunu --multicontainer-config-file parametresiyle çalıştırın. Docker Compose dosyanız özel görüntüler içeriyorsa, önceki örnekte gösterildiği gibi parametreleri ekleyin--docker-registry-server-*.

az webapp config container set --resource-group <group-name> --name <app-name> --multicontainer-config-file <docker-compose-file>

Kapsayıcı kayıt defterinden uygulamanıza CI/CD yapılandırmak için az webapp deployment container config komutunu --enable-cd parametresiyle çalıştırın. Komut web kancası URL'sini verir, ancak kayıt defterinizde web kancasını ayrı bir adımda el ile oluşturmanız gerekir. Aşağıdaki örnek, uygulamanızda CI/CD'yi etkinleştirir, ardından çıktıdaki web kancası URL'sini kullanarak Azure Container Registry'de web kancasını oluşturur.

ci_cd_url=$(az webapp deployment container config --name <app-name> --resource-group <group-name> --enable-cd true --query CI_CD_URL --output tsv)

az acr webhook create --name <webhook-name> --registry <registry-name> --resource-group <group-name> --actions push --uri $ci_cd_url --scope '<image>:<tag>'

Diğer kaynaklar