Aracılığıyla paylaş


GitHub Actions kullanarak App Service'e dağıtma

İş akışınızı otomatikleştirmek ve GitHub'dan Azure Uygulaması Hizmeti'ne dağıtmak için GitHub Actions'ı kullanmaya başlayın.

Önkoşullar

Uygulamayı 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 istediğiniz kuruluşu, depoyu ve dalı yapılandırın.

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

Sürekli dağıtımı etkinleştirdiğinizde, uygulama oluşturma işlemi temel kimlik doğrulama seçimine göre otomatik olarak kimlik doğrulama yöntemini seçer ve uygulamanızı ve GitHub deponuzu buna göre 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

Uygulamayı oluştururken 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 bkz . Dağıtım Merkezi'nden GitHub Actions dağıtımını ayarlama.

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

Mevcut bir uygulama için App Service Dağıtım Merkezi'ni kullanarak GitHub Actions ile hızlı bir şekilde çalışmaya 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, kullanıcı tarafından atanan bir kimlikle daha güvenli OpenID Connect kimlik doğrulamasını kolayca yapılandırmanıza da olanak tanır. 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'ni kullanmadan bir iş akışı dağıtabilirsiniz. Bu durumda üç adım gerçekleştirmeniz gerekir:

  1. Dağıtım kimlik bilgileri oluşturma
  2. GitHub gizli dizisini yapılandırma
  3. İş akışı dosyasını GitHub deponuza ekleme

Dağıtım kimlik bilgileri oluşturma

GitHub Actions için Azure Uygulaması Services ile kimlik doğrulaması yapmak için önerilen yol OpenID Connect'tir. Bu yaklaşım, kısa süreli belirteçler kullanan bir kimlik doğrulama yöntemidir. GitHub Actions ile OpenID Connect'i ayarlamak daha karmaşıktır ancak sağlamlaştırılmış güvenlik sunar.

Alternatif olarak, Kullanıcı Tarafından Atanan Yönetilen Kimlik, hizmet sorumlusu veya yayımlama profili ile kimlik doğrulaması yapabilirsiniz.

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

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

    az ad app create --display-name myApp
    

    Bu komut, ile sizin client-idolan bir appId JSON döndürür. GitHub gizli dizisi olarak AZURE_CLIENT_ID kullanılacak değeri daha sonra kaydedin.

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

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

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

    appOwnerTenantId daha sonra kullanmak üzere öğesini GitHub gizli dizisi AZURE_TENANT_ID olarak 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, $resourceGroupName kaynak grubu adınız, $webappName web uygulamanızın adı ve $assigneeObjectId oluşturulan idile değiştirin$subscriptionId. Azure CLI ile Azure aboneliklerini yönetmeyi öğrenin.

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

    • değerini Active Directory uygulamanız için appId (uygulama oluşturulurken oluşturulur) ile değiştirinAPPLICATION-OBJECT-ID.

    • 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: repo:< Organization/Repository >:environment:< Name >
      • Bir ortama bağlı olmayan işler için, iş akışını tetiklerken kullanılan başvuru yolunu temel alan dal/etiket için başvuru 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: 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

Azure/oturum açma eylemine uygulamanızın İstemci Kimliğini, Kiracı Kimliğini ve Abonelik Kimliğinisağ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 Ayarlar>Güvenlik>Gizli Dizileri ve değişkenler>Eylemler>Yeni depo gizli dizisi'ne gidin.

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

    GitHub Gizli Dizisi Active Directory Uygulaması
    AZURE_CLIENT_ID Uygulama (istemci) kimliği
    AZURE_TENANT_ID Dizin (kiracı) kimliği
    AZURE_SUBSCRIPTION_ID Subscription ID
  3. Gizli dizi ekle'yi seçerek her gizli diziyi kaydedin.

İş 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 gizli dizisini 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 azure/webapps-deploy@v3 eylemini kullanın. Eylem, içindeki app-name web uygulamanızın adını ve dil yığınınıza bağlı olarak içinde dağıtılacak package*.zip, *.war, *.jar veya klasörün 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.

Yapılandırdığınız yönetilen kimliği kullanarak OpenID Connect ile dağıtmak için , ve anahtarlarıyla client-ideylemi kullanınazure/login@v1.subscription-idtenant-id 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:
      # Checkout the repo
      - uses: actions/checkout@main
      - uses: azure/login@v1
        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 Sorulan Sorular

Maven eklentisi aracılığıyla bir WAR dosyası dağıtmak Nasıl yaparım??

Java Tomcat projenizi Maven eklentisiyle yapılandırmış olmanız durumunda, bu eklenti aracılığıyla Azure Uygulaması Hizmeti'ne 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 eklentisi ve bu eklentiyi kullanma ve yapılandırma hakkında daha fazla bilgi için Azure Uygulaması Hizmeti için Maven eklentisi wiki'sine bakın.

Az CLI aracılığıyla bir WAR dosyası dağıtmak Nasıl yaparım??

App Service'e dağıtmak için Azure CLI'yı 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

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

az webapp deploy komutu, bunun nasıl kullanılacağı ve parametre ayrıntıları hakkında daha fazla bilgi için az webapp deploy belgelerine bakın.

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

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

Kapsayıcıya dağıtım Nasıl yaparım??

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. GitHub Actions kullanarak dağıtma adımları hakkında daha fazla bilgi için bkz . Kapsayıcıya dağıtma.

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 isterseniz 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 eylem ve bunu kullanma ve yapılandırma hakkında daha fazla bilgi için bkz . App Service Ayarları deposu.

Azure GitHub Actions ve iş akışlarıyla ilgili başvurulara göz atın: