En İyi Dağıtım Yöntemleri

Her geliştirme ekibinin, herhangi bir bulut hizmetinde verimli bir dağıtım işlem hattı uygulamayı zorlaştırabilecek benzersiz gereksinimleri vardır. Bu makalede App Service'e dağıtmanın üç ana bileşeni tanıtılır: dağıtım kaynakları, derleme işlem hatları ve dağıtım mekanizmaları. Bu makale ayrıca belirli dil yığınları için bazı en iyi yöntemleri ve ipuçlarını da kapsar.

Dağıtım Bileşenleri

Dağıtım Kaynağı

Dağıtım kaynağı, uygulama kodunuzun konumudur. Üretim uygulamaları için dağıtım kaynağı genellikle GitHub, BitBucket veya Azure Repos gibi sürüm denetimi yazılımları tarafından barındırılan bir depodur. Geliştirme ve test senaryoları için dağıtım kaynağı yerel makinenizdeki bir proje olabilir.

Derleme İşlem Hattı

Bir dağıtım kaynağına karar verdikten sonra, sonraki adımınız bir derleme işlem hattı seçmektir. Derleme işlem hattı, dağıtım kaynağından kaynak kodunuzu okur ve uygulamayı çalıştırılabilir duruma getirmek için bir dizi adım (kod derleme, HTML ve JavaScript'i küçültme, testleri çalıştırma ve paketleme bileşenleri gibi) yürütür. Derleme işlem hattı tarafından yürütülen belirli komutlar dil yığınınıza bağlıdır. Bu işlemler Azure Pipelines gibi bir derleme sunucusunda yürütülebilir veya yerel olarak yürütülebilir.

Dağıtım Mekanizması

Dağıtım mekanizması, yerleşik uygulamanızı web uygulamanızın /home/site/wwwroot dizinine yerleştirmek için kullanılan eylemdir. /wwwroot dizini, web uygulamanızın tüm örnekleri tarafından paylaşılan bağlı bir depolama konumudur. Dağıtım mekanizması uygulamanızı bu dizine yerleştirdiğinde, örnekleriniz yeni dosyaları eşitlemek için bir bildirim alır. App Service aşağıdaki dağıtım mekanizmalarını destekler:

  • Kudu uç noktaları: Kudu , Windows App Service'te ayrı bir işlem olarak ve Linux App Service'te ikinci bir kapsayıcı olarak çalışan açık kaynak geliştirici üretkenlik aracıdır. Kudu sürekli dağıtımları işler ve zipdeploy/ gibi dağıtım için HTTP uç noktaları sağlar.
  • FTP ve WebDeploy: Sitenizi veya kullanıcı kimlik bilgilerinizi kullanarak FTP veya WebDeploy aracılığıyla dosyaları karşıya yükleyebilirsiniz. Bu mekanizmalar Kudu'ya gitmez.

Azure Pipelines, Jenkins ve düzenleyici eklentileri gibi dağıtım araçları bu dağıtım mekanizmalarından birini kullanır.

Dağıtım yuvalarını kullanma

Mümkün olduğunda, yeni bir üretim derlemesi dağıtırken dağıtım yuvalarını kullanın. Standart App Service Planı katmanını veya daha iyisini kullanırken uygulamanızı hazırlama ortamına dağıtabilir, değişikliklerinizi doğrulayabilir ve duman testleri yapabilirsiniz. Hazır olduğunuzda hazırlama ve üretim yuvalarınızı değiştirebilirsiniz. Değiştirme işlemi, üretim ölçeğinizle eşleşmesi için gerekli çalışan örneklerini ısıtır ve böylece kapalı kalma süresini ortadan kaldırır.

Kodu sürekli dağıtma

Projenizde test, Soru-Cevap ve hazırlama için belirlenmiş dallar varsa, bu dalların her biri sürekli olarak bir hazırlama yuvasına dağıtılmalıdır. (Bu, Gitflow tasarımı.) Bu sayede paydaşlarınız dağıtılan dalı kolayca değerlendirebilir ve test eder.

Üretim yuvanız için sürekli dağıtım hiçbir zaman etkinleştirilmemelidir. Bunun yerine, üretim dalınız (genellikle ana) üretim dışı bir yuvaya dağıtılmalıdır. Temel dalı serbest bırakmaya hazır olduğunuzda, bunu üretim yuvasına değiştirin. Üretime dağıtmak yerine üretime geçiş yapmak kapalı kalma süresini önler ve değişiklikleri yeniden değiştirerek geri almanızı sağlar.

Diagram that shows the flow between the Dev, Staging, and Main branches and the slots they are deployed to.

Kapsayıcıları sürekli dağıtma

Docker veya diğer kapsayıcı kayıt defterlerinden özel kapsayıcılar için, kapalı kalma süresini önlemek için görüntüyü bir hazırlama yuvasına dağıtın ve üretime geçin. Görüntüyü bir kapsayıcı kayıt defterine göndermeniz ve web uygulamasında görüntü etiketini güncelleştirmeniz gerektiğinden otomasyon kod dağıtımından daha karmaşıktır.

Yuvaya dağıtmak istediğiniz her dal için, dala yönelik her işlemede aşağıdakileri yapmak üzere otomasyon ayarlayın.

  1. Görüntüyü derleyin ve etiketleyin. Derleme işlem hattının bir parçası olarak, görüntüyü git işleme kimliği, zaman damgası veya diğer tanımlanabilir bilgilerle etiketleyin. Varsayılan "en son" etiketini kullanmamak en iyisidir. Aksi takdirde, şu anda dağıtılan kodu izlemek zordur ve bu da hata ayıklamayı çok daha zor hale getirir.
  2. Etiketli görüntüyü gönderme. Görüntü derlenip etiketlendikten sonra işlem hattı görüntüyü kapsayıcı kayıt defterimize gönderir. Sonraki adımda dağıtım yuvası, kapsayıcı kayıt defterinden etiketli görüntüyü çeker.
  3. Dağıtım yuvasını yeni görüntü etiketiyle güncelleştirin. Bu özellik güncelleştirildiğinde, site otomatik olarak yeniden başlatılır ve yeni kapsayıcı görüntüsünü çeker.

Slot usage visual

Yaygın otomasyon çerçeveleri için aşağıda örnekler verilmiştir.

Azure DevOps kullanma

App Service, Dağıtım Merkezi aracılığıyla kapsayıcılar için yerleşik sürekli teslime sahiptir. Azure portalında uygulamanıza gidin ve Dağıtım'ın altında Dağıtım Merkezi'niseçin. Deponuzu ve dalınızı seçmek için yönergeleri izleyin. Bu işlem, seçilen dalınıza yeni işlemeler gönderildiğinde kapsayıcınızı otomatik olarak derleyecek, etiketleyecek ve dağıtacak bir DevOps derleme ve yayın işlem hattı yapılandırır.

GitHub Actions'i kullanma

GitHub Actions ile kapsayıcı dağıtımınızı da otomatikleştirebilirsiniz. Aşağıdaki iş akışı dosyası kapsayıcıyı oluşturma ve işleme kimliğiyle etiketleme, kapsayıcı kayıt defterine gönderme ve belirtilen web uygulamasını yeni görüntü etiketiyle güncelleştirme.

on:
  push:
    branches:
    - <your-branch-name>

name: Linux_Container_Node_Workflow

jobs:
  build-and-deploy:
    runs-on: ubuntu-latest
    steps:
    # checkout the repo
    - name: 'Checkout GitHub Action'
      uses: actions/checkout@main

    - uses: azure/docker-login@v1
      with:
        login-server: contoso.azurecr.io
        username: ${{ secrets.REGISTRY_USERNAME }}
        password: ${{ secrets.REGISTRY_PASSWORD }}

    - run: |
        docker build . -t contoso.azurecr.io/nodejssampleapp:${{ github.sha }}
        docker push contoso.azurecr.io/nodejssampleapp:${{ github.sha }} 

    - uses: azure/webapps-deploy@v2
      with:
        app-name: 'node-rnc'
        publish-profile: ${{ secrets.azureWebAppPublishProfile }}
        images: 'contoso.azurecr.io/nodejssampleapp:${{ github.sha }}'

Diğer otomasyon sağlayıcılarını kullanma

Daha önce listelenen adımlar CircleCI veya Travis CI gibi diğer otomasyon yardımcı programları için geçerlidir. Ancak son adımda dağıtım yuvalarını yeni görüntü etiketleriyle güncelleştirmek için Azure CLI'yi kullanmanız gerekir. Otomasyon betiğinizde Azure CLI'yı kullanmak için aşağıdaki komutu kullanarak bir Hizmet Sorumlusu oluşturun.

az ad sp create-for-rbac --name "myServicePrincipal" --role contributor \
   --scopes /subscriptions/{subscription}/resourceGroups/{resource-group} \
   --sdk-auth

Betiğinizde, sorumlusunun bilgilerini sağlayarak kullanarak az login --service-principaloturum açın. Daha sonra kapsayıcı adını, etiketini, kayıt defteri URL'sini ve kayıt defteri parolasını ayarlamak için kullanabilirsiniz az webapp config container set . Kapsayıcı CI işleminizi oluşturmanıza yardımcı olacak bazı bağlantılar aşağıdadır.

Dile Özgü Dikkat Edilmesi Gerekenler

Java

JAR uygulamalarını dağıtmak için Kudu zipdeploy/ API'sini ve WAR uygulamaları için wardeploy/ kullanın. Jenkins kullanıyorsanız bu API'leri doğrudan dağıtım aşamanızda kullanabilirsiniz. Daha fazla bilgi için bu makaleye bakın.

Düğüm

Varsayılan olarak, Kudu Node uygulamanız (npm install) için derleme adımlarını yürütür. Azure DevOps gibi bir derleme hizmeti kullanıyorsanız Kudu derlemesi gereksizdir. Kudu derlemesini devre dışı bırakmak için değerini SCM_DO_BUILD_DURING_DEPLOYMENTiçeren bir falseuygulama ayarı oluşturun.

.NET

Kudu varsayılan olarak .NET uygulamanız (dotnet build) için derleme adımlarını yürütür. Azure DevOps gibi bir derleme hizmeti kullanıyorsanız Kudu derlemesi gereksizdir. Kudu derlemesini devre dışı bırakmak için değerini SCM_DO_BUILD_DURING_DEPLOYMENTiçeren bir falseuygulama ayarı oluşturun.

Diğer Dağıtım Konuları

Yerel Önbellek

Azure Uygulaması Hizmeti içeriği Azure Depolama'de depolanır ve içerik paylaşımı olarak dayanıklı bir şekilde ortaya çıkar. Ancak bazı uygulamaların yalnızca yüksek kullanılabilirlikle çalıştırabilecekleri yüksek performanslı, salt okunur bir içerik deposuna ihtiyacı vardır. Bu uygulamalar yerel önbelleğin kullanılmasından yararlanabilir. WordPress gibi içerik yönetimi siteleri için yerel önbellek önerilmez.

Kapalı kalma süresini önlemek için her zaman dağıtım yuvalarıyla birlikte yerel önbelleği kullanın. Bu özellikleri birlikte kullanma hakkında bilgi için bu bölüme bakın.

Yüksek CPU veya Bellek Kullanımı

App Service Planınız kullanılabilir CPU veya belleğin %90'ını kullanıyorsa, temel alınan sanal makine dağıtımınızı işlerken sorun yaşayabilir. Bu durumda, dağıtımı gerçekleştirmek için örnek sayınızın ölçeğini geçici olarak artırın. Dağıtım tamamlandıktan sonra örnek sayısını önceki değerine döndürebilirsiniz.

En iyi yöntemler hakkında daha fazla bilgi için, kaynağınıza özgü eyleme dönüştürülebilir en iyi yöntemleri bulmak için App Service Tanılama'yı ziyaret edin.

  • Azure portalında Web Uygulamanıza gidin.
  • App Service Tanılama'yı açan sol gezinti bölmesinde Sorunları tanılama ve çözme'yi seçin.
  • En İyi Yöntemler giriş sayfası kutucuğunu seçin.
  • Bu en iyi yöntemlerle ilgili olarak uygulamanızın geçerli durumunu görüntülemek için Kullanılabilirlik ve Performans için En İyi Yöntemler veya En İyi Yapılandırma için En İyi Yöntemler'i seçin.

Kaynağınız için App Service Tanılama'yı doğrudan açmak için de bu bağlantıyı kullanabilirsiniz: https://portal.azure.com/?websitesextension_ext=asd.featurePath%3Ddetectors%2FParentAvailabilityAndPerformance#@microsoft.onmicrosoft.com/resource/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Web/sites/{siteName}/troubleshoot.

Diğer kaynaklar

Ortam değişkenleri ve uygulama ayarları başvurusu