Bagikan melalui


Menyebarkan ke Azure App Service dengan menggunakan GitHub Actions

Gunakan GitHub Actions untuk mengotomatiskan alur kerja Anda dan menyebarkan ke Azure App Service dari GitHub.

Prasyarat

Menyiapkan penyebaran GitHub Actions saat membuat aplikasi

Penyebaran GitHub Actions diintegrasikan ke dalam proses Buat Aplikasi Web default. Atur Penyebaran berkelanjutan ke Aktifkan di tab Penyebaran, dan konfigurasikan organisasi, repositori, dan cabang yang Anda pilih.

Cuplikan layar yang memperlihatkan cara mengaktifkan penyebaran GitHub Actions di tab Penyebaran App Service.

Saat Anda mengaktifkan penyebaran berkelanjutan, proses Buat Aplikasi Web secara otomatis memilih metode autentikasi berdasarkan pilihan autentikasi dasar dan mengonfigurasi aplikasi Anda dan repositori GitHub Yang sesuai:

Pilihan autentikasi dasar Metode autentikasi
Nonaktifkan Identitas yang ditetapkan pengguna (OpenID Connect) (disarankan)
Aktifkan Autentikasi dasar

Catatan

Saat membuat aplikasi, Anda mungkin menerima kesalahan yang menyatakan bahwa akun Azure Anda tidak memiliki izin tertentu. Akun Anda mungkin memerlukan izin yang diperlukan untuk membuat dan mengonfigurasi identitas yang ditetapkan pengguna. Untuk alternatif, lihat bagian berikut.

Menyiapkan penyebaran GitHub Actions dari Pusat Penyebaran

Untuk aplikasi yang ada, Anda dapat dengan cepat memulai GitHub Actions dengan menggunakan Pusat Penyebaran di App Service. Metode turnkey ini menghasilkan file alur kerja GitHub Actions berdasarkan tumpukan aplikasi Anda dan menerapkannya ke repositori GitHub Anda.

Dengan menggunakan Pusat Penyebaran, Anda juga dapat dengan mudah mengonfigurasi autentikasi OpenID Connect yang lebih aman dengan identitas yang ditetapkan pengguna. Untuk informasi selengkapnya, lihat opsi identitas yang ditetapkan pengguna.

Jika akun Azure Anda memiliki izin yang diperlukan, Anda dapat membuat identitas yang ditetapkan pengguna. Sebagai alternatif, Anda dapat memilih identitas terkelola yang telah ada pada menu dropdown Identitas. Anda dapat bekerja dengan administrator Azure Anda untuk membuat identitas terkelola yang ditetapkan pengguna dengan peran Kontributor Situs Web.

Untuk informasi selengkapnya, lihat Penyebaran berkelanjutan ke Azure App Service.

Menyiapkan alur kerja GitHub Actions secara manual

Anda dapat menyebarkan alur kerja tanpa menggunakan Pusat Penyebaran. Lakukan tiga langkah berikut:

  1. Hasilkan kredensial penyebaran.
  2. Konfigurasikan rahasia GitHub.
  3. Tambahkan file alur kerja ke repositori GitHub Anda.

Menghasilkan kredensial penyebaran

Kami menyarankan agar Anda menggunakan OpenID Connect untuk mengautentikasi dengan Azure App Service for GitHub Actions. Metode autentikasi ini menggunakan token berumur pendek. Menyiapkan OpenID Connect dengan GitHub Actions lebih kompleks tetapi menawarkan keamanan yang diperkuat.

Anda juga dapat mengautentikasi dengan identitas terkelola yang ditetapkan pengguna, perwakilan layanan, atau profil penerbitan.

Prosedur berikut menjelaskan langkah-langkah untuk membuat aplikasi Microsoft Entra, perwakilan layanan, dan kredensial federasi menggunakan pernyataan Azure CLI. Untuk mempelajari cara membuat aplikasi Microsoft Entra, perwakilan layanan, dan kredensial federasi di portal Microsoft Azure, lihat Menyambungkan GitHub dan Azure.

  1. Jika Anda tidak memiliki aplikasi yang sudah ada, daftarkan aplikasi Microsoft Entra baru dan perwakilan layanan yang dapat mengakses sumber daya. Buat aplikasi Microsoft Entra.

    az ad app create --display-name myApp
    

    Perintah ini mengembalikan output JSON dengan appId yang merupakan client-id Anda. Simpan nilai untuk digunakan sebagai AZURE_CLIENT_ID GitHub rahasia di kemudian hari.

    Anda menggunakan objectId nilai saat membuat kredensial federasi dengan Graph API dan mereferensikannya sebagai APPLICATION-OBJECT-ID.

  2. Buat prinsipal layanan. $appID Ganti dengan appId dari output JSON Anda.

    Perintah ini menghasilkan output JSON dengan yang berbeda objectId untuk digunakan pada langkah berikutnya. objectId yang baru adalah assignee-object-id.

    Salin appOwnerTenantId untuk digunakan nanti sebagai rahasia GitHub untuk AZURE_TENANT_ID.

    az ad sp create --id $appId
    
  3. Membuat penetapan peran baru berdasarkan langganan dan objek. Secara default, penetapan peran terkait dengan langganan default Anda. Ganti $subscriptionId dengan ID langganan Anda, $resourceGroupName dengan nama grup sumber daya Anda, $webappName dengan nama aplikasi web Anda, dan $assigneeObjectId dengan yang dihasilkan id. Pelajari cara mengelola langganan Azure dengan Azure CLI.

    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. Jalankan perintah berikut untuk membuat kredensial identitas federasi baru untuk aplikasi Microsoft Entra Anda.

    • Ganti APPLICATION-OBJECT-ID dengan appId yang Anda buat selama pembuatan aplikasi untuk aplikasi Direktori Aktif Anda.

    • Tetapkan nilai untuk CREDENTIAL-NAME untuk referensi nanti.

    • Atur subject. GitHub mendefinisikan nilainya tergantung pada alur kerja Anda:

      • Untuk pekerjaan di lingkungan GitHub Actions Anda, gunakan: repo:< Organization/Repository >:environment:< Name >
      • Untuk pekerjaan yang tidak terkait dengan lingkungan, sertakan jalur ref untuk cabang/tag berdasarkan jalur ref yang digunakan untuk memicu alur kerja: repo:< Organization/Repository >:ref:< ref path>. Misalnya, repo:n-username/ node_express:ref:refs/heads/my-branch atau repo:n-username/ node_express:ref:refs/tags/my-tag.
      • Untuk alur kerja yang dipicu oleh peristiwa permintaan pull, gunakan: 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"
        ]
    }     
    

Mengonfigurasi rahasia GitHub

Anda perlu memberikan ID Klien, ID Penyewa, dan ID Langganan aplikasi Anda ke tindakan tersebut Azure/login . Nilai ini bisa disediakan secara langsung di alur kerja atau bisa disimpan di rahasia GitHub dan direferensikan dalam alur kerja Anda. Menyimpan nilai sebagai GitHub rahasia adalah opsi yang lebih aman.

  1. Buka repositori GitHub Anda dan buka Pengaturan>Keamanan>Rahasia dan variabel>Tindakan>Rahasia repositori baru.

  2. Membuat rahasia untuk AZURE_CLIENT_ID, AZURE_TENANT_ID, dan AZURE_SUBSCRIPTION_ID. Gunakan nilai-nilai ini dari aplikasi Active Directory Anda untuk rahasia GitHub Anda.

    Rahasia GitHub Aplikasi Direktori Aktif
    AZURE_CLIENT_ID Aplikasi (ID klien)
    AZURE_TENANT_ID ID direktori (penyewa)
    AZURE_SUBSCRIPTION_ID ID Langganan
  3. Pilih Tambahkan rahasia untuk menyimpan setiap rahasia.

Menambahkan file alur kerja ke repositori GitHub Anda

File YAML (.yml) pada jalur /.github/workflows/ di repositori GitHub Anda mendefinisikan alur kerja. Definisi ini berisi berbagai langkah dan parameter yang membentuk alur kerja.

Minimal, file alur kerja memiliki langkah-langkah berbeda berikut:

  1. Autentikasi dengan App Service dengan menggunakan rahasia GitHub yang Anda buat.
  2. Buat aplikasi web.
  3. Menyebarkan aplikasi web.

Untuk menyebarkan kode Anda ke aplikasi App Service, gunakan tindakan .azure/webapps-deploy@v3 Tindakan ini memerlukan nama aplikasi web Anda di app-name dan, tergantung pada stack bahasa Anda, jalur *.zip, *.war, *.jar, atau folder untuk disebarkan di package. Untuk daftar lengkap kemungkinan input untuk tindakan azure/webapps-deploy@v3, lihat action.yml.

Contoh berikut memperlihatkan bagian alur kerja yang membangun aplikasi web dalam berbagai dukungan bahasa.

Untuk menyebarkan dengan OpenID Connect menggunakan identitas terkelola yang Anda konfigurasikan, gunakan tindakan azure/login@v2 dengan kunci client-id, tenant-id, dan subscription-id. Referensikan rahasia GitHub yang Anda buat sebelumnya.

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

Tanya jawab umum

Bagaimana cara menyebarkan file WAR melalui plugin Maven?

Jika Anda mengonfigurasi proyek Java Tomcat dengan plugin Maven, Anda juga dapat menyebarkan ke Azure App Service melalui plugin ini. Jika Anda menggunakan tindakan GitHub Azure CLI, tindakan tersebut menggunakan kredensial Azure Anda.

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

Untuk informasi selengkapnya tentang cara menggunakan dan mengonfigurasi plugin Maven, lihat Wiki plugin Maven untuk Azure App Service.

Bagaimana cara menyebarkan file WAR melalui Azure CLI?

Jika Anda lebih suka menggunakan Azure CLI untuk disebarkan ke App Service, Anda dapat menggunakan GitHub Action untuk Azure CLI.

- 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

Untuk informasi selengkapnya tentang cara menggunakan dan mengonfigurasi tindakan GitHub untuk Azure CLI, lihat tindakan GitHub Azure CLI.

Untuk informasi selengkapnya tentang az webapp deploy perintah, termasuk cara menggunakannya dan detail parameter, lihat az webapp deploy dokumentasi.

Bagaimana cara mengimplementasikan file startup?

Gunakan GitHub Action untuk Azure CLI. Contohnya:

- 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

Bagaimana cara menyebarkan ke kontainer?

Dengan tindakan Azure Web Deploy , Anda dapat mengotomatiskan alur kerja anda untuk menyebarkan kontainer kustom ke App Service dengan menggunakan GitHub Actions. Untuk informasi selengkapnya, lihat Menyebarkan ke kontainer.

Bagaimana cara menyebarkan ke slot penyebaran?

Anda dapat menyebarkan ke slot penyebaran alih-alih slot produksi dengan parameter slot-name dalam aksi azure/webapps-deploy@v3. Untuk menyebarkan ke slot, tambahkan slot-name parameter ke langkah penyebaran di alur kerja Anda:

- 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'

Catatan

Saat Anda menggunakan OpenID Connect atau autentikasi prinsipal layanan, pastikan bahwa identitas memiliki peran Kontributor Situs Web baik pada aplikasi maupun slot penyebaran. Untuk autentikasi profil publikasi, unduh profil publikasi untuk slot tertentu dari portal Azure (Slot>Slot Penyebaran> pilih slot >unduh profil publikasi).

Bagaimana cara memperbarui konfigurasi Tomcat setelah penyebaran?

Jika Anda ingin memperbarui salah satu pengaturan aplikasi web setelah penyebaran, Anda dapat menggunakan tindakan pengaturan App Service .

    - 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

Untuk informasi selengkapnya tentang cara menggunakan dan mengonfigurasi tindakan ini, lihat repositori pengaturan App Service .

Lihat referensi berikut tentang Tindakan dan alur kerja Azure GitHub: