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 proses Buat Aplikasi Web default. Atur Penyebaran berkelanjutan ke Aktifkan di tab Penyebaran, dan konfigurasikan organisasi, repositori, dan cabang yang Anda inginkan.

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

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

Anda mungkin menerima kesalahan saat membuat aplikasi yang tidak memiliki izin tertentu oleh akun Azure Anda. Akun Anda mungkin memerlukan 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 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 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. 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 dapat menyebarkan alur kerja tanpa menggunakan Pusat Penyebaran. Dalam hal ini Anda perlu melakukan tiga langkah:

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

Membuat info masuk penyebaran

Cara yang disarankan untuk mengautentikasi dengan Azure App Services untuk GitHub Actions adalah dengan OpenID Connect. Pendekatan 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.

Prosedur berikut menjelaskan 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 mengembalikan JSON dengan appId yang merupakan .client-id 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. Membuat perwakilan layanan. Ganti $appID 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 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. GitHub mendefinisikan nilainya tergantung pada alur kerja Anda:

      • Untuk pekerjaan di 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"
        ]
    }     
    

Mengonfigurasi 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.

Menambahkan file alur kerja ke repositori GitHub Anda

File YAML (.yml) di /.github/workflows/ jalur di repositori GitHub Anda menentukan alur kerja. 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, gunakan 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 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 azure/login@v1 tindakan dengan client-idkunci , , tenant-iddan 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:
      # 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?

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 plugin Maven dan cara menggunakan dan mengonfigurasinya, lihat Wiki plugin Maven untuk Azure App Service.

Bagaimana cara menyebarkan file WAR melalui Az CLI?

Jika Anda menggunakan lebih suka 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 GitHub Action untuk CLI dan cara menggunakan dan mengonfigurasinya, lihat tindakan GitHub Azure CLI.

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

Bagaimana cara menyebarkan file startup?

Gunakan GitHub Action untuk 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 menggunakan GitHub Actions. Untuk informasi selengkapnya tentang langkah-langkah penyebaran menggunakan GitHub Actions, lihat 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

Untuk informasi selengkapnya tentang tindakan ini dan cara menggunakan dan mengonfigurasinya, lihat repositori Pengaturan App Service.

Lihat referensi tentang Tindakan dan alur kerja Azure GitHub: