Bagikan melalui


Menyebarkan ke App Service menggunakan GitHub Actions

Mulai dengan GitHub Actions untuk mengotomatiskan alur kerja dan menyebarkan ke Azure App Service dari GitHub.

Prasyarat

Menyiapkan penyebaran GitHub Actions saat membuat aplikasi

Penyebaran GitHub Actions diintegrasikan ke dalam wizard pembuatan aplikasi default. Anda hanya perlu mengatur Penyebaran berkelanjutan ke Aktifkan di tab Penyebaran, dan mengonfigurasi organisasi, repositori, dan cabang yang Anda inginkan.

Cuplikan layar memperlihatkan cara mengaktifkan penyebaran GitHub Actions di wizard pembuatan App Service.

Saat Anda mengaktifkan penyebaran berkelanjutan, wizard pembuatan aplikasi 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

Jika Anda menerima kesalahan saat membuat aplikasi yang mengatakan bahwa akun Azure Anda tidak memiliki izin tertentu, mungkin tidak memiliki izin yang diperlukan untuk membuat dan mengonfigurasi identitas yang ditetapkan pengguna. Untuk alternatif, lihat Menyiapkan penyebaran GitHub Actions dari Pusat Penyebaran.

Menyiapkan penyebaran GitHub Actions dari Pusat Penyebaran

Untuk aplikasi yang sudah ada, Anda dapat memulai dengan cepat dengan GitHub Actions dengan menggunakan Pusat Penyebaran App Service. Metode turn-key ini secara otomatis menghasilkan file alur kerja GitHub Actions berdasarkan tumpukan aplikasi Anda dan menerapkannya ke repositori GitHub Anda.

Pusat Penyebaran juga memungkinkan Anda dengan mudah mengonfigurasi autentikasi OpenID Connect yang lebih aman dengan opsi identitas yang ditetapkan pengguna.

Jika akun Azure Anda memiliki izin yang diperlukan, Anda dapat memilih untuk membuat identitas yang ditetapkan pengguna. Jika tidak, Anda dapat memilih identitas terkelola yang ditetapkan pengguna yang ada di 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 juga dapat menyebarkan alur kerja tanpa menggunakan Pusat Penyebaran. Dalam hal ini Anda perlu melakukan 3 langkah:

  1. Hasilkan kredensial penyebaran
  2. Mengonfigurasi rahasia GitHub
  3. Menambahkan file alur kerja ke repositori GitHub Anda

1. Hasilkan kredensial penyebaran

Cara yang disarankan untuk mengautentikasi dengan Azure App Services untuk GitHub Actions adalah dengan OpenID Connect. Ini adalah metode autentikasi yang menggunakan token berumur pendek. Menyiapkan OpenID Connect dengan GitHub Actions lebih kompleks tetapi menawarkan keamanan yang diperkuat.

Atau, Anda dapat mengautentikasi dengan Identitas Terkelola yang ditetapkan pengguna, perwakilan layanan, atau profil penerbitan.

Di bawah ini menjalankan Anda melalui langkah-langkah untuk membuat aplikasi direktori aktif, perwakilan layanan, dan kredensial federasi menggunakan pernyataan Azure CLI. Untuk mempelajari cara membuat aplikasi direktori aktif, perwakilan layanan, dan kredensial federasi di portal Azure, lihat Menyambungkan GitHub dan Azure.

  1. Jika Anda belum memiliki aplikasi, daftarkan aplikasi Active Directory dan perwakilan layanan baru yang dapat mengakses sumber daya. Membuat aplikasi Active Directory Domain Services.

    az ad app create --display-name myApp
    

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

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

  2. Membuat perwakilan layanan. Ganti $appID dengan appId dari output JSON Anda.

    Perintah ini menghasilkan output JSON dengan objectId yang berbeda dan akan digunakan dalam langkah berikutnya. objectId yang baru adalah assignee-object-id.

    Salin appOwnerTenantId untuk digunakan sebagai GitHub rahasia untuk AZURE_TENANT_ID nanti.

     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 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 ini untuk membuat informasi masuk identitas gabungan baru untuk aplikasi direktori aktif Anda.

    • Ganti APPLICATION-OBJECT-ID dengan appId (dihasilkan saat membuat aplikasi) untuk aplikasi Direktori Aktif Anda.
    • Tetapkan nilai untuk CREDENTIAL-NAME untuk referensi nanti.
    • Set subject. Nilainya didefinisikan oleh GitHub tergantung pada alur kerja Anda:
      • Pekerjaan dalam lingkungan GitHub Actions Anda: repo:< Organization/Repository >:environment:< Name >
      • Untuk Pekerjaan yang tidak terikat dengan lingkungan, sertakan jalur referensi untuk cabang/tag berdasarkan jalur referensi 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 tarik: 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. Konfigurasikan rahasia GitHub

Anda perlu memberikan ID Klien, ID Penyewa, dan ID Langganan aplikasi Anda ke tindakan 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 Rahasia Keamanan > 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 Domain Services Anda untuk GitHub rahasia Anda:

    GitHub Rahasia Aplikasi Active Directory Domain Services
    AZURE_CLIENT_ID Aplikasi (ID klien)
    AZURE_TENANT_ID ID (tenant) direktori
    AZURE_SUBSCRIPTION_ID ID Langganan
  3. Simpan setiap rahasia dengan memilih Tambahkan rahasia.

3. Tambahkan file alur kerja ke repositori GitHub Anda

Alur kerja ditentukan oleh file YAML (.yml) di /.github/workflows/ jalur di repositori GitHub Anda. Definisi ini berisi berbagai langkah dan parameter yang membentuk alur kerja.

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

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

Untuk menyebarkan kode Anda ke aplikasi App Service, Anda menggunakan tindakan azure/webapps-deploy@v3 . Tindakan ini memerlukan nama aplikasi web Anda di app-name dan, tergantung pada tumpukan bahasa Anda, jalur *.zip, *.war, *.jar, atau folder untuk disebarkan di package. Untuk daftar lengkap kemungkinan input untuk tindakan, azure/webapps-deploy@v3 lihat definisi 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 dengan client-idkunci , , tenant-iddan subscription-id dan referensikan rahasia GitHub yang Anda buat sebelumnya.azure/login@v1

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

Pertanyaan Umum

Bagaimana cara menyebarkan file WAR melalui plugin Maven dan OpenID Connect

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 akan menggunakan kredensial masuk Azure Anda.

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

Informasi selengkapnya tentang plugin Maven dan cara menggunakan dan mengonfigurasinya dapat ditemukan di wiki plugin Maven untuk Azure App Service.

Bagaimana cara menyebarkan file WAR melalui Az CLI dan OpenID Connect

Jika Anda menggunakan lebih suka Azure CLI untuk disebarkan ke App Service, Anda dapat menggunakan GitHub Action untuk 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

Informasi selengkapnya tentang GitHub Action untuk CLI dan cara menggunakan dan mengonfigurasinya dapat ditemukan di tindakan GitHub Azure CLI. Informasi selengkapnya tentang perintah az webapp deploy, cara menggunakan dan detail parameter dapat ditemukan dalam dokumentasi penyebaran az webapp.

Bagaimana cara menyebarkan ke Kontainer

Dengan tindakan Azure Web Deploy, Anda dapat mengotomatiskan alur kerja Anda untuk menyebarkan kontainer kustom ke App Service menggunakan GitHub Actions. Informasi terperinci tentang langkah-langkah untuk menyebarkan menggunakan GitHub Actions, dapat ditemukan di Menyebarkan ke Kontainer.

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

Informasi selengkapnya tentang tindakan ini dan cara menggunakan dan mengonfigurasinya dapat ditemukan di repositori Pengaturan App Service.

Langkah berikutnya

Lihat referensi tentang Tindakan dan alur kerja Azure GitHub: