Aracılığıyla paylaş


GitHub Actions kullanarak Azure App Service'e dağıtma

GitHub Actions'ı kullanarak iş akışınızı otomatikleştirin ve GitHub'dan Azure App Service'e dağıtın.

Önkoşullar

Uygulama oluştururken GitHub Actions dağıtımını ayarlama

GitHub Actions dağıtımı, varsayılan Web Uygulaması Oluşturma işlemiyle tümleştirilir. Dağıtım sekmesinde Sürekli dağıtım'ıEtkinleştir olarak ayarlayın ve seçtiğiniz kuruluşu, depoyu ve dalı yapılandırın.

App Service Dağıtımı sekmesinde GitHub Actions dağıtımını etkinleştirmeyi gösteren ekran görüntüsü.

Sürekli dağıtımı etkinleştirdiğinizde , Web Uygulaması Oluştur işlemi temel kimlik doğrulama seçimine göre kimlik doğrulama yöntemini otomatik olarak seçer ve uygulamanızı ve GitHub deponuzu uygun şekilde yapılandırılır:

Temel kimlik doğrulaması seçimi Kimlik doğrulama yöntemi
Devre Dışı Bırak Kullanıcı tarafından atanan kimlik (OpenID Connect) (önerilen)
Etkinleştir Temel kimlik doğrulaması

Not

Bir uygulama oluşturduğunuzda, Azure hesabınızın belirli izinlere sahip olmadığını belirten bir hata alabilirsiniz. Hesabınız, kullanıcı tarafından atanan kimliği oluşturmak ve yapılandırmak için gerekli izinlere ihtiyaç duyabilir. Alternatif olarak aşağıdaki bölüme bakın.

Dağıtım Merkezi'nden GitHub Actions dağıtımını ayarlama

Mevcut bir uygulama için App Service'te Dağıtım Merkezi'ne tıklayarak GitHub Actions'ı kullanmaya hızlı bir şekilde başlayabilirsiniz. Bu anahtar teslim yöntemi, uygulama yığınınızı temel alan bir GitHub Actions iş akışı dosyası oluşturur ve bunu GitHub deponuza işler.

Dağıtım Merkezi'ni kullanarak, kullanıcı tarafından atanan bir kimlikle daha güvenli OpenID Connect kimlik doğrulamasını kolayca yapılandırabilirsiniz. Daha fazla bilgi için kullanıcı tarafından atanan kimlik seçeneğine bakın.

Azure hesabınız gerekli izinlere sahipse, kullanıcı tarafından atanan bir kimlik oluşturabilirsiniz. Aksi takdirde, Kimlik açılan menüsünde kullanıcı tarafından atanan mevcut bir yönetilen kimliği seçebilirsiniz. Web Sitesi Katılımcısı rolüyle kullanıcı tarafından atanan bir yönetilen kimlik oluşturmak için Azure yöneticinizle birlikte çalışabilirsiniz.

Daha fazla bilgi için bkz. Azure Uygulaması Hizmetine sürekli dağıtım.

GitHub Actions iş akışını el ile ayarlama

Dağıtım Merkezi'ne gerek kalmadan iş akışı dağıtabilirsiniz. Şu üç adımı gerçekleştirin:

  1. Dağıtım kimlik bilgileri oluşturun.
  2. GitHub gizli bilgisini yapılandırın.
  3. İş akışı dosyasını GitHub deponuza ekleyin.

Dağıtım kimlik bilgileri oluşturma

GitHub Actions için Azure App Service ile kimlik doğrulaması yapmak için OpenID Connect kullanmanızı öneririz. Bu kimlik doğrulama yöntemi kısa ömürlü belirteçler kullanır. GitHub Actions ile OpenID Connect'i ayarlamak daha karmaşıktır ancak sağlamlaştırılmış güvenlik sunar.

Ayrıca, kullanıcı tarafından atanan yönetilen kimlik, hizmet sorumlusu veya yayımlama profiliyle de kimlik doğrulaması yapabilirsiniz.

Aşağıdaki yordamda, Azure CLI deyimlerini kullanarak Microsoft Entra uygulaması, hizmet sorumlusu ve federasyon kimlik bilgileri oluşturma adımları açıklanmaktadır. Azure portalında Microsoft Entra uygulaması, hizmet sorumlusu ve federasyon kimlik bilgileri oluşturmayı öğrenmek için bkz. GitHub ve Azure'ı bağlama.

  1. Mevcut bir uygulamanız yoksa kaynaklara erişebilen yeni bir Microsoft Entra uygulaması ve hizmet sorumlusu kaydedin. Microsoft Entra uygulamasını oluşturun.

    az ad app create --display-name myApp
    

    Bu komut, size appId olarak bir client-id içeren bir JSON çıktısı döndürür. GitHub gizli dizisi olarak AZURE_CLIENT_ID kullanılacak değeri daha sonra kaydedin.

    Graph API ile federasyon kimlik bilgileri oluştururken objectId değerini kullanır ve APPLICATION-OBJECT-ID olarak buna başvurursunuz.

  2. Hizmet sorumlusu oluşturma. $appID öğesini JSON çıkışınızdaki appId öğesiyle değiştirin.

    Bu komut, bir sonraki adımda kullanmak üzere farklı objectId bir JSON çıkışı oluşturur. Yeni objectId , şeklindedir assignee-object-id.

    öğeyi appOwnerTenantId, daha sonra GitHub gizli anahtarı olarak kullanmak için AZURE_TENANT_ID kopyalayın.

    az ad sp create --id $appId
    
  3. Aboneliğe ve nesneye göre yeni bir rol ataması oluşturun. Varsayılan olarak, rol ataması varsayılan aboneliğinize bağlıdır. değerini abonelik kimliğiniz, $subscriptionId kaynak grubu adınız, $resourceGroupName web uygulamanızın adı ve $webappName oluşturulan $assigneeObjectIdile değiştirinid. Azure CLI ile Azure aboneliklerini yönetmeyi öğrenin.

    az role assignment create --role "Website Contributor" --subscription $subscriptionId --assignee-object-id  $assigneeObjectId --scope /subscriptions/$subscriptionId/resourceGroups/$resourceGroupName/providers/Microsoft.Web/sites/$webappName --assignee-principal-type ServicePrincipal
    
  4. Microsoft Entra uygulamanız için yeni bir federasyon kimliği kimlik bilgisi oluşturmak için aşağıdaki komutu çalıştırın.

    • APPLICATION-OBJECT-ID öğesini, Active Directory uygulamanızın oluşturulması sırasında oluşturduğunuz appId öğesiyle değiştirin.

    • Daha sonra başvurmak için için CREDENTIAL-NAME bir değer ayarlayın.

    • öğesini subjectayarlayın. GitHub, değerini iş akışınıza bağlı olarak tanımlar:

      • GitHub Actions ortamınızdaki işler için şunları kullanın: repo:< Organization/Repository >:environment:< Name >
      • Bir ortama bağlı olmayan işler için, iş akışını tetiklemek için kullanılan referans yoluna göre dal/etiket için referans yolunu ekleyin: repo:< Organization/Repository >:ref:< ref path>. Örneğin, repo:n-username/ node_express:ref:refs/heads/my-branch veya repo:n-username/ node_express:ref:refs/tags/my-tag.
      • Çekme isteği olayı tarafından tetiklenen iş akışları için şunu kullanın: repo:< Organization/Repository >:pull_request.
    az ad app federated-credential create --id <APPLICATION-OBJECT-ID> --parameters credential.json
    ("credential.json" contains the following content)
    {
        "name": "<CREDENTIAL-NAME>",
        "issuer": "https://token.actions.githubusercontent.com",
        "subject": "repo:organization/repository:ref:refs/heads/main",
        "description": "Testing",
        "audiences": [
            "api://AzureADTokenExchange"
        ]
    }     
    

GitHub gizli dizisini yapılandırma

Eyleme uygulamanızın İstemci Kimliğini, Kiracı Kimliğini ve Abonelik KimliğiniAzure/login sağlamanız gerekir. Bu değerler doğrudan iş akışında sağlanabilir veya GitHub gizli dizilerinde depolanabilir ve iş akışınızda başvurulabilir. Değerleri GitHub gizli dizileri olarak kaydetmek daha güvenli bir seçenektir.

  1. GitHub deponuzu açın ve Ayarlargidin.

  2. , AZURE_CLIENT_IDve AZURE_TENANT_IDiçin AZURE_SUBSCRIPTION_IDgizli diziler oluşturun. GitHub gizli dizileriniz için Active Directory uygulamanızdaki şu değerleri kullanın:

    GitHub gizli anahtarı Active Directory uygulaması
    AZURE_CLIENT_ID Uygulama (istemci) kimliği
    AZURE_TENANT_ID Dizin (kiracı) kimliği
    AZURE_SUBSCRIPTION_ID Abonelik Kimliği
  3. Her gizli bilgiyi kaydetmek için Gizli bilgi ekle'yi seçin.

İş akışı dosyasını GitHub deponuza ekleme

GitHub deponuzdaki yoldaki /.github/workflows/ bir YAML (.yml) dosyası bir iş akışı tanımlar. Bu tanım, iş akışını oluşturan çeşitli adımları ve parametreleri içerir.

İş akışı dosyasında en azından aşağıdaki ayrı adımlar bulunur:

  1. Oluşturduğunuz GitHub sırrını kullanarak App Service ile kimlik doğrulaması yapın.
  2. Web uygulamasını oluşturun.
  3. Web uygulamasını dağıtın.

Kodunuzu bir App Service uygulamasına dağıtmak için eylemi kullanın azure/webapps-deploy@v3 . Eylem, app-name içinde web uygulamanızın adını ve dil yığınınza bağlı olarak dağıtılacak *.zip, *.war, *.jar veya klasör yolunu gerektirir. Eylem için olası girişlerin tam listesi için azure/webapps-deploy@v3 bkz . action.yml.

Aşağıdaki örnekler, iş akışının web uygulamasını oluşturan bölümünü desteklenen farklı dillerde gösterir.

OpenID Connect ile, yapılandırdığınız yönetilen kimliği kullanarak dağıtım yapmak için azure/login@v2 eylemi ile client-id, tenant-id, ve subscription-id anahtarlarını kullanın. Daha önce oluşturduğunuz GitHub gizli dizilerine başvurun.

name: .NET Core

on: [push]

permissions:
      id-token: write
      contents: read

env:
  AZURE_WEBAPP_NAME: my-app    # Set this to your application's name
  AZURE_WEBAPP_PACKAGE_PATH: '.'      # Set this to the path to your web app project, defaults to the repository root
  DOTNET_VERSION: '6.0.x'           # Set this to the dot net version to use

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      # Check out the repo
      - uses: actions/checkout@main
      - uses: azure/login@v2
        with:
          client-id: ${{ secrets.AZURE_CLIENT_ID }}
          tenant-id: ${{ secrets.AZURE_TENANT_ID }}
          subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}

      
      # Setup .NET Core SDK
      - name: Setup .NET Core
        uses: actions/setup-dotnet@v3
        with:
          dotnet-version: ${{ env.DOTNET_VERSION }} 
      
      # Run dotnet build and publish
      - name: dotnet build and publish
        run: |
          dotnet restore
          dotnet build --configuration Release
          dotnet publish -c Release --property:PublishDir='${{ env.AZURE_WEBAPP_PACKAGE_PATH }}/myapp' 
          
      # Deploy to Azure Web apps
      - name: 'Run Azure webapp deploy action using publish profile credentials'
        uses: azure/webapps-deploy@v3
        with: 
          app-name: ${{ env.AZURE_WEBAPP_NAME }} # Replace with your app name
          package: '${{ env.AZURE_WEBAPP_PACKAGE_PATH }}/myapp'
      
      - name: logout
        run: |
          az logout

Sıkça sorulan sorular

Maven eklentisi aracılığıyla bir WAR dosyasını nasıl dağıtacağım?

Java Tomcat projenizi Maven eklentisiyle yapılandırdıysanız, bu eklenti aracılığıyla Azure App Service'e de dağıtabilirsiniz. Azure CLI GitHub eylemini kullanırsanız Azure kimlik bilgilerinizi kullanır.

    - name: Azure CLI script file
      uses: azure/cli@v2
      with:
        inlineScript: |
          mvn package azure-webapp:deploy

Maven eklentisini kullanma ve yapılandırma hakkında daha fazla bilgi için bkz. Azure App Service için Maven eklentisi wiki'si.

Azure CLI aracılığıyla bir WAR dosyasını nasıl dağıtacağım?

App Service'e dağıtmak için Azure CLI kullanmayı tercih ediyorsanız, Azure CLI için GitHub Eylemi'ni kullanabilirsiniz.

- name: Azure CLI script
  uses: azure/cli@v2
  with:
    inlineScript: |
      az webapp deploy --src-path '${{ github.workspace }}/target/yourpackage.war' --name ${{ env.AZURE_WEBAPP_NAME }} --resource-group ${{ env.RESOURCE_GROUP }}  --async true --type war

Azure CLI için GitHub eylemini kullanma ve yapılandırma hakkında daha fazla bilgi için bkz. Azure CLI GitHub eylemi.

Komutun az webapp deploy nasıl kullanılacağı ve parametre ayrıntıları da dahil olmak üzere komut hakkında daha fazla bilgi için belgelere bakınaz webapp deploy.

Başlangıç dosyası Nasıl yaparım? dağıtılır?

Azure CLI için GitHub Eylemi'ni kullanın. Örneğin:

- name: Deploy startup script
  uses: azure/cli@v2
  with:
    inlineScript: |
      az webapp deploy --src-path ${{ github.workspace }}/src/main/azure/createPasswordlessDataSource.sh --name ${{ env.AZURE_WEBAPP_NAME }} --resource-group ${{ env.RESOURCE_GROUP }} --type startup --track-status false

Bir kapsayıcıya nasıl yükleme yapabilirim?

Azure Web Dağıtımı eylemiyle GitHub Actions'ı kullanarak app service'e özel kapsayıcılar dağıtmak için iş akışınızı otomatikleştirebilirsiniz. Daha fazla bilgi için bkz. Kapsayıcıya dağıtma.

Dağıtım yuvasına nasıl dağıtım yapabilirim?

slot-name azure/webapps-deploy@v3 eylemindeki parametreyi kullanarak üretim yuvası yerine bir dağıtım yuvasına dağıtabilirsiniz. Slot'a dağıtım yapmak için, iş akışınızın dağıtım adımına slot-name parametresini ekleyin.

- name: Deploy to Azure Web App
  uses: azure/webapps-deploy@v3
  with:
    app-name: 'my-app-name'
    slot-name: 'staging'  # Deploy to the 'staging' slot instead of production
    package: './output'

Not

OpenID Connect veya hizmet sorumlusu kimlik doğrulamasını kullandığınızda, kimliğin hem uygulamada hem de dağıtım yuvasında Web Sitesi Katılımcısı rolüne sahip olduğundan emin olun. Yayımlama profili kimlik doğrulaması için Azure portalından belirli bir yuva için yayımlama profilini indirin (Dağıtım>Dağıtım yuvaları> yuvayı seçin >Yayımlama profilini indir).

Dağıtımdan sonra Tomcat yapılandırmasını Nasıl yaparım? güncelleştirin?

Dağıtımdan sonra web uygulaması ayarlarınızı güncelleştirmek istiyorsanız App Service ayarları eylemini kullanabilirsiniz.

    - uses: azure/appservice-settings@v1
      with:
        app-name: 'my-app'
        slot-name: 'staging'  # Optional and needed only if the settings have to be configured on the specific deployment slot
        app-settings-json: '[{ "name": "CATALINA_OPTS", "value": "-Dfoo=bar" }]' 
        connection-strings-json: '${{ secrets.CONNECTION_STRINGS }}'
        general-settings-json: '{"alwaysOn": "false", "webSocketsEnabled": "true"}' #'General configuration settings as Key Value pairs'
      id: settings

Bu eylemi kullanma ve yapılandırma hakkında daha fazla bilgi için bkz. App Service ayarları deposu.

Azure GitHub İşlemleri ve iş akışları ile ilgili aşağıdaki kaynaklara göz atın: