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 uygulama oluşturma sihirbazıyla tümleşiktir. Yalnızca Dağıtım sekmesinde Sürekli dağıtımı Etkinleştir olarak ayarlamanız ve istediğiniz kuruluşu, depoyu ve dalı yapılandırmanız yeterlidir.

App Service oluşturma sihirbazında 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 sihirbazı temel kimlik doğrulama seçimine göre kimlik doğrulama yöntemini otomatik olarak 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

Uygulamanızı oluştururken Azure hesabınızın belirli izinlere sahip olmadığını belirten bir hata alırsanız, kullanıcı tarafından atanan kimliği oluşturmak ve yapılandırmak için gerekli izinlere sahip olmayabilir. 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ını otomatik olarak oluşturur ve GitHub deponuza işler.

Dağıtım Merkezi, kullanıcı tarafından atanan kimlik seçeneğiyle daha güvenli OpenID Connect kimlik doğrulamasını kolayca yapılandırmanıza da olanak tanır.

Azure hesabınız gerekli izinlere sahipse, kullanıcı tarafından atanan bir kimlik oluşturmayı seçebilirsiniz. Aksi takdirde, Kimlik açılan listesinden 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 da iş akışı dağıtabilirsiniz. Bu durumda 3 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

1. 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, 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ğıda, Azure CLI deyimlerini kullanarak active directory uygulaması, hizmet sorumlusu ve federasyon kimlik bilgileri oluşturma adımları boyunca size yol gösterilir. 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, sizin olan bir appId JSON çıkışı oluşturur client-id. GitHub gizli dizisi olarak AZURE_CLIENT_ID kullanılacak değeri daha sonra kaydedin.

    Graph API ile federasyon kimlik bilgileri oluştururken değerini kullanacaksınız objectId ve buna olarak APPLICATION-OBJECT-IDbaşvuracaksınız.

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

    Bu komut farklı objectId bir JSON çıkışı oluşturur ve sonraki adımda kullanılacaktır. 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. Değeri, iş akışınıza bağlı olarak GitHub tarafından tanımlanır:
      • GitHub Actions ortamınızdaki işler: 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"
        ]
    }     
    

2. GitHub gizli dizisini yapılandırma

Azure/oturum açma eylemine uygulamanızın İstemci Kimliğini, Kiracı Kimliğini ve Abonelik Kimliğini 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 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.

3. İş akışı dosyasını GitHub deponuza ekleyin

İş akışı, GitHub deponuzdaki yoldaki /.github/workflows/ bir YAML (.yml) dosyası tarafından tanımlanır. 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ırsınız. 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 action.yml tanımına bakın.

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ın azure/login@v1 ve subscription-id daha önce oluşturduğunuz GitHub gizli dizilerine başvurun. tenant-id

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 oturum açma kimlik bilgilerinizi kullanır.

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

Maven eklentisi ve nasıl kullanılacağı ve yapılandırılacağı hakkında daha fazla bilgi için Azure Uygulaması Hizmeti için Maven eklenti wiki'sinde bulunabilir.

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 nasıl kullanılacağı ve yapılandırılacağı hakkında daha fazla bilgi için Azure CLI GitHub eyleminde bulunabilir. az webapp deploy komutu, nasıl kullanılacağı ve parametre ayrıntıları hakkında daha fazla bilgi az webapp deploy belgelerinde bulunabilir.

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ıyla ilgili ayrıntılı bilgileri Kapsayıcıya Dağıtma bölümünde bulabilirsiniz.

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 nasıl kullanılacağı ve yapılandırılacağı hakkında daha fazla bilgi App Service Ayarları deposunda bulunabilir.

Sonraki adımlar

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