Menyebarkan ke App Service menggunakan GitHub Actions

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

Prasyarat

Gambaran umum file alur kerja

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

File memiliki tiga bagian:

Bagian Tugas
Autentikasi 1. Tentukan prinsipal layanan atau profil penerbitan.
2. Buat rahasia GitHub.
Build 1. Siapkan lingkungan.
2. Bangun aplikasi web.
Sebarkan 1. Sebarkan aplikasi web.

Menggunakan Pusat Penyebaran

Anda dapat dengan cepat memulai GitHub Actions menggunakan Pusat Penyebaran App Service. Hal ini akan secara otomatis menghasilkan file alur kerja berdasarkan tumpukan aplikasi Anda dan menetapkannya ke repositori GitHub pada direktori yang benar.

  1. Buka webapp Anda pada portal Microsoft Azure
  2. Di sebelah kiri, klik Pusat Penyebaran
  3. Pada Penyebaran Berkelanjutan (CI/CD) , pilih GitHub
  4. Berikutnya, pilih GitHub Actions
  5. Gunakan dropdown untuk memilih repositori, cabang, dan tumpukan aplikasi GitHub Anda
    • Jika cabang yang dipilih dilindungi, Anda dapat melanjutkan untuk menambahkan file alur kerja. Pastikan untuk meninjau perlindungan cabang Anda sebelum melanjutkan.
  6. Pada layar akhir, Anda dapat meninjau pilihan Anda dan meninjau file alur kerja yang akan ditetapkan pada repositori. Jika pilihan sudah benar, klik Selesai

Ini akan menetapkan file alur kerja ke repositori. Alur kerja untuk membangun dan menyebarkan aplikasi akan segera dimulai.

Menyiapkan alur kerja secara manual

Anda juga dapat menyebarkan alur kerja tanpa menggunakan Pusat Penyebaran. Untuk melakukannya, pertama Anda perlu menghasilkan info masuk penyebaran.

Hasilkan kredensial penyebaran

Cara yang disarankan untuk mengautentikasi dengan Azure App Services untuk GitHub Actions adalah dengan profil penerbitan. Anda juga dapat mengautentikasi dengan perwakilan layanan atau Open ID Connect, tetapi prosesnya memerlukan lebih banyak langkah.

Simpan info masuk profil penerbitan atau perwakilan layanan Anda sebagai rahasia GitHub untuk mengautentikasi dengan Azure. Anda akan mengakses rahasia dalam alur kerja Anda.

Profil penerbitan adalah info masuk tingkat aplikasi. Siapkan profil penerbitan Anda sebagai rahasia GitHub.

  1. Buka layanan aplikasi Anda di portal Microsoft Azure.

  2. Pada halaman Ringkasan, pilih Dapatkan profil Penerbitan.

  3. Simpan file yang diunduh. Anda akan menggunakan isi file tersebut untuk membuat rahasia GitHub.

Catatan

Mulai Oktober 2020, aplikasi web Linux akan memerlukan pengaturan aplikasi WEBSITE_WEBDEPLOY_USE_SCM untuk diatur ke truesebelum mengunduh profil penerbitan. Persyaratan ini akan dihapus di masa mendatang.

Mengonfigurasi rahasia GitHub

Pada GitHub, telusuri repositori Anda, pilih Pengaturan > Rahasia > Tambahkan rahasia baru.

Untuk menggunakan info masuk tingkat aplikasi, tempelkan isi file profil penerbitan yang diunduh ke bidang nilai rahasia. Beri nama rahasia AZURE_WEBAPP_PUBLISH_PROFILE.

Ketika mengonfigurasi alur kerja GitHub, Anda menggunakan AZURE_WEBAPP_PUBLISH_PROFILE pada tindakan sebarkan Azure Web App. Contohnya:

- uses: azure/webapps-deploy@v2
  with:
    publish-profile: ${{ secrets.AZURE_WEBAPP_PUBLISH_PROFILE }}

Menyiapkan lingkungan

Menyiapkan lingkungan dapat dilakukan menggunakan salah satu tindakan penyiapan.

Bahasa Tindakan Penyiapan
.NET actions/setup-dotnet
ASP.NET actions/setup-dotnet
Java actions/setup-java
JavaScript actions/setup-node
Python actions/setup-python

Contoh berikut menunjukkan cara menyiapkan lingkungan untuk berbagai bahasa yang didukung:

.NET

    - name: Setup Dotnet 3.3.x
      uses: actions/setup-dotnet@v1
      with:
        dotnet-version: '3.3.x'

ASP.NET

    - name: Install Nuget
      uses: nuget/setup-nuget@v1
      with:
        nuget-version: ${{ env.NUGET_VERSION}}

Java

    - name: Setup Java 1.8.x
      uses: actions/setup-java@v1
      with:
        # If your pom.xml <maven.compiler.source> version is not in 1.8.x,
        # change the Java version to match the version in pom.xml <maven.compiler.source>
        java-version: '1.8.x'

JavaScript

env:
  NODE_VERSION: '14.x'                # set this to the node version to use

jobs:
  build-and-deploy:
    name: Build and Deploy
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@main
    - name: Use Node.js ${{ env.NODE_VERSION }}
      uses: actions/setup-node@v1
      with:
        node-version: ${{ env.NODE_VERSION }}

Python

    - name: Setup Python 3.x 
      uses: actions/setup-python@v1
      with:
        python-version: 3.x

Membangun aplikasi web

Proses membangun aplikasi web dan menyebarkan ke Azure App Service berubah tergantung pada bahasanya.

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

Untuk semua bahasa, Anda dapat mengatur direktori akar aplikasi web dengan working-directory.

.NET

Variabel lingkungan AZURE_WEBAPP_PACKAGE_PATH mengatur jalur ke proyek aplikasi web Anda.

- name: dotnet build and publish
  run: |
    dotnet restore
    dotnet build --configuration Release
    dotnet publish -c Release -o '${{ env.AZURE_WEBAPP_PACKAGE_PATH }}/myapp' 

ASP.NET

Anda dapat memulihkan dependensi NuGet dan menjalankan msbuild dengan run.

- name: NuGet to restore dependencies as well as project-specific tools that are specified in the project file
  run: nuget restore

- name: Add msbuild to PATH
  uses: microsoft/setup-msbuild@v1.0.2

- name: Run msbuild
  run: msbuild .\SampleWebApplication.sln

Java

- name: Build with Maven
  run: mvn package --file pom.xml

JavaScript

Untuk Node.js, Anda dapat mengatur working-directory atau mengubah direktori npm di pushd.

- name: npm install, build, and test
  run: |
    npm install
    npm run build --if-present
    npm run test --if-present
  working-directory: my-app-folder # set to the folder with your app if it is not the root directory

Python

- name: Install dependencies
  run: |
    python -m pip install --upgrade pip
    pip install -r requirements.txt

Menyebarkan ke App Service

Untuk menyebarkan kode Anda ke aplikasi App Service, gunakan tindakan azure/webapps-deploy@v2. Tindakan ini memiliki empat parameter:

Parameter Penjelasan
app-name (Wajib) Nama aplikasi App Service
publish-profile (Opsional) Isi file profil penerbitan dengan rahasia Web Deploy
package (Opsional) Jalur ke paket atau folder. Jalur ini dapat meliputi *.zip, *.war, *.jar, atau folder untuk disebarkan
slot-name (Opsional) Masukkan slot yang ada selain slot produksi

.NET Core

Bangun dan sebarkan aplikasi .NET Core ke Azure menggunakan profil penerbitan Azure. Input publish-profile mereferensikan rahasia AZURE_WEBAPP_PUBLISH_PROFILE yang Anda buat sebelumnya.

name: .NET Core CI

on: [push]

env:
  AZURE_WEBAPP_NAME: my-app-name    # 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: '3.1.x'           # set this to the dot net version to use

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      # Checkout the repo
      - uses: actions/checkout@main
      
      # Setup .NET Core SDK
      - name: Setup .NET Core
        uses: actions/setup-dotnet@v1
        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 -o '${{ 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@v2
        with: 
          app-name: ${{ env.AZURE_WEBAPP_NAME }} # Replace with your app name
          publish-profile: ${{ secrets.AZURE_WEBAPP_PUBLISH_PROFILE  }} # Define secret variable in repository settings as per action documentation
          package: '${{ env.AZURE_WEBAPP_PACKAGE_PATH }}/myapp'

ASP.NET

Bangun dan sebarkan aplikasi ASP.NET MVC yang menggunakan NuGet dan publish-profile untuk autentikasi.

name: Deploy ASP.NET MVC App deploy to Azure Web App

on: [push]

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
  NUGET_VERSION: '5.3.x'           # set this to the dot net version to use

jobs:
  build-and-deploy:
    runs-on: windows-latest
    steps:

    - uses: actions/checkout@main  
    
    - name: Install Nuget
      uses: nuget/setup-nuget@v1
      with:
        nuget-version: ${{ env.NUGET_VERSION}}
    - name: NuGet to restore dependencies as well as project-specific tools that are specified in the project file
      run: nuget restore
  
    - name: Add msbuild to PATH
      uses: microsoft/setup-msbuild@v1.0.2

    - name: Run MSBuild
      run: msbuild .\SampleWebApplication.sln
       
    - name: 'Run Azure webapp deploy action using publish profile credentials'
      uses: azure/webapps-deploy@v2
      with: 
        app-name: ${{ env.AZURE_WEBAPP_NAME }} # Replace with your app name
        publish-profile: ${{ secrets.AZURE_WEBAPP_PUBLISH_PROFILE  }} # Define secret variable in repository settings as per action documentation
        package: '${{ env.AZURE_WEBAPP_PACKAGE_PATH }}/SampleWebApplication/'

Java

Bangun dan sebarkan aplikasi Java Spring ke Azure menggunakan profil penerbitan Azure. Input publish-profile mereferensikan rahasia AZURE_WEBAPP_PUBLISH_PROFILE yang Anda buat sebelumnya.

name: Java CI with Maven

on: [push]

jobs:
  build:

    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v2
    - name: Set up JDK 1.8
      uses: actions/setup-java@v1
      with:
        java-version: 1.8
    - name: Build with Maven
      run: mvn -B package --file pom.xml
      working-directory: my-app-path
    - name: Azure WebApp
      uses: Azure/webapps-deploy@v2
      with:
        app-name: my-app-name
        publish-profile: ${{ secrets.AZURE_WEBAPP_PUBLISH_PROFILE }}
        package: my/target/*.jar

Untuk menyebarkan war alih-alih jar, ubah nilai package.

    - name: Azure WebApp
      uses: Azure/webapps-deploy@v2
      with:
        app-name: my-app-name
        publish-profile: ${{ secrets.AZURE_WEBAPP_PUBLISH_PROFILE }}
        package: my/target/*.war

JavaScript

Bangun dan sebarkan aplikasi Node.js ke Azure menggunakan profil penerbitan aplikasi. Input publish-profile mereferensikan rahasia AZURE_WEBAPP_PUBLISH_PROFILE yang Anda buat sebelumnya.

# File: .github/workflows/workflow.yml
name: JavaScript CI

on: [push]

env:
  AZURE_WEBAPP_NAME: my-app-name   # set this to your application's name
  AZURE_WEBAPP_PACKAGE_PATH: 'my-app-path'      # set this to the path to your web app project, defaults to the repository root
  NODE_VERSION: '14.x'                # set this to the node version to use

jobs:
  build-and-deploy:
    name: Build and Deploy
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@main
    - name: Use Node.js ${{ env.NODE_VERSION }}
      uses: actions/setup-node@v1
      with:
        node-version: ${{ env.NODE_VERSION }}
    - name: npm install, build, and test
      run: |
        # Build and test the project, then
        # deploy to Azure Web App.
        npm install
        npm run build --if-present
        npm run test --if-present
      working-directory: my-app-path
    - name: 'Deploy to Azure WebApp'
      uses: azure/webapps-deploy@v2
      with: 
        app-name: ${{ env.AZURE_WEBAPP_NAME }}
        publish-profile: ${{ secrets.AZURE_WEBAPP_PUBLISH_PROFILE }}
        package: ${{ env.AZURE_WEBAPP_PACKAGE_PATH }}

Python

Bangun dan sebarkan aplikasi Python ke Azure menggunakan profil penerbitan aplikasi. Perhatikan bagaimana input publish-profile mereferensikan rahasia AZURE_WEBAPP_PUBLISH_PROFILE yang Anda buat sebelumnya.

name: Python CI

on:
  [push]

env:
  AZURE_WEBAPP_NAME: my-web-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

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2
    - name: Set up Python 3.x
      uses: actions/setup-python@v2
      with:
        python-version: 3.x
    - name: Install dependencies
      run: |
        python -m pip install --upgrade pip
        pip install -r requirements.txt
    - name: Building web app
      uses: azure/appservice-build@v2
    - name: Deploy web App using GH Action azure/webapps-deploy
      uses: azure/webapps-deploy@v2
      with:
        app-name: ${{ env.AZURE_WEBAPP_NAME }}
        publish-profile: ${{ secrets.AZURE_WEBAPP_PUBLISH_PROFILE }}
        package: ${{ env.AZURE_WEBAPP_PACKAGE_PATH }}

Langkah berikutnya

Anda dapat menemukan set Tindakan yang dikelompokkan ke berbagai repositori pada GitHub, masing-masing berisi dokumentasi dan contoh untuk membantu Anda menggunakan GitHub untuk CI/CD dan menyebarkan aplikasi ke Azure.