Bagikan melalui


Menyebarkan kontainer kustom ke App Service menggunakan GitHub Actions

GitHub Actions memberi Anda fleksibilitas untuk membangun alur kerja pengembangan perangkat lunak otomatis. Dengan tindakan Azure Web Deploy, Anda dapat mengotomatiskan alur kerja Anda untuk menyebarkan kontainer kustom ke App Service menggunakan GitHub Actions.

Sebuah alur kerja ditentukan oleh file YAML (.yml) pada jalur /.github/workflows/ di dalam repositori Anda. Definisi ini berisi beragam langkah dan parameter yang ada di alur kerja.

Pada alur kerja kontainer Azure App Service, filenya memiliki tiga bagian:

Bagian Tugas
Autentikasi 1. Ambil kembali perwakilan layanan atau profil penerbitan.
2. Buat rahasia GitHub.
Build 1. Buat lingkungan.
2. Buat citra kontainer.
Sebarkan 1. Sebarkan gambar kontainer.

Prasyarat

Membuat info masuk 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.

    Catatan

    Mulai Oktober 2020, aplikasi web Linux akan memerlukan pengaturan aplikasi WEBSITE_WEBDEPLOY_USE_SCM untuk diatur ke true sebelum mengunduh file. Persyaratan ini akan dihapus di masa mendatang. Lihat Mengonfigurasi aplikasi App Service di portal Microsoft Azure, untuk mempelajari cara mengonfigurasi pengaturan aplikasi web umum.

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

Mengonfigurasi rahasia GitHub untuk autentikasi

Di GitHub, telusuri repositori Anda. Pilih Pengaturan > Rahasia Keamanan > dan variabel > Tindakan > Rahasia repositori 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 }}

Mengonfigurasi rahasia GitHub untuk registri Anda

Tetapkan rahasia untuk digunakan dengan tindakan Docker Login. Contoh dalam dokumen ini menggunakan Azure Container Registry untuk registri kontainer.

  1. Buka kontainer Anda di portal Microsoft Azure atau Docker dan salin nama pengguna dan kata sandi. Anda dapat menemukan nama pengguna dan kata sandi Azure Container Registry di portal Microsoft Azure pada Pengaturan>Kunci akses untuk registri Anda.

  2. Tentukan rahasia baru untuk nama pengguna registri bernama REGISTRY_USERNAME.

  3. Tentukan rahasia baru untuk kata sandi registri bernama REGISTRY_PASSWORD.

Bangun citra Kontainer

Contoh berikut menunjukkan bagian dari alur kerja yang menyusun Node.JS Docker. Gunakan Docker Login untuk masuk ke registri kontainer pribadi. Contoh ini menggunakan Azure Container Registry tetapi tindakan yang sama berfungsi untuk registri lain.

name: Linux Container Node Workflow

on: [push]

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v2
    - uses: azure/docker-login@v1
      with:
        login-server: mycontainer.azurecr.io
        username: ${{ secrets.REGISTRY_USERNAME }}
        password: ${{ secrets.REGISTRY_PASSWORD }}
    - run: |
        docker build . -t mycontainer.azurecr.io/myapp:${{ github.sha }}
        docker push mycontainer.azurecr.io/myapp:${{ github.sha }}     

Anda juga dapat menggunakan masuk Docker untuk masuk ke beberapa registri kontainer secara bersamaan. Contoh ini mencakup dua rahasia GitHub baru untuk autentikasi dengan docker.io. Contoh mengasumsikan bahwa ada Dockerfile di tingkat akar registri.

name: Linux Container Node Workflow

on: [push]

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v2
    - uses: azure/docker-login@v1
      with:
        login-server: mycontainer.azurecr.io
        username: ${{ secrets.REGISTRY_USERNAME }}
        password: ${{ secrets.REGISTRY_PASSWORD }}
    - uses: azure/docker-login@v1
      with:
        login-server: index.docker.io
        username: ${{ secrets.DOCKERIO_USERNAME }}
        password: ${{ secrets.DOCKERIO_PASSWORD }}
    - run: |
        docker build . -t mycontainer.azurecr.io/myapp:${{ github.sha }}
        docker push mycontainer.azurecr.io/myapp:${{ github.sha }}     

Sebarkan ke kontainer App Service

Untuk menyebarkan gambar Anda ke kontainer kustom di App Service, gunakan tindakan azure/webapps-deploy@v2. Tindakan ini memiliki tujuh parameter:

Parameter Penjelasan
app-name (Wajib) Nama aplikasi App Service
publish-profile (Opsional) Berlaku untuk Web Apps (Windows dan Linux) dan Web App Containers(linux). Skenario multi kontainer tidak didukung. Menerbitkan konten file profil (*.publishsettings) dengan rahasia Web Deploy
slot-name (Opsional) Masukkan Slot yang ada selain slot Produksi
package (Opsional) Hanya berlaku untuk Web App: Jalur ke paket atau folder. *.zip, *.war, *.jar atau folder untuk disebarkan
gambar (Diperlukan) Berlaku hanya untuk Kontainer Web App: Tentukan nama gambar kontainer yang sepenuhnya memenuhi syarat. Contohnya, 'myregistry.azurecr.io/nginx:latest' atau 'python:3.7.2-alpine/'. Untuk aplikasi multi-kontainer, beberapa nama gambar kontainer dapat disediakan (dipisahkan multi-baris)
configuration-file (Opsional) Berlaku hanya untuk Kontainer Web App: Jalur file Docker-Compose. Harus menjadi jalur yang sepenuhnya memenuhi syarat atau relatif terhadap direktori kerja default. Diperlukan untuk aplikasi multi-kontainer.
startup-command (Opsional) Masukkan perintah start-up. Misalnya dotnet run atau dotnet filename.dll
name: Linux Container Node Workflow

on: [push]

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v2

    - uses: azure/docker-login@v1
      with:
        login-server: mycontainer.azurecr.io
        username: ${{ secrets.REGISTRY_USERNAME }}
        password: ${{ secrets.REGISTRY_PASSWORD }}

    - run: |
        docker build . -t mycontainer.azurecr.io/myapp:${{ github.sha }}
        docker push mycontainer.azurecr.io/myapp:${{ github.sha }}     

    - uses: azure/webapps-deploy@v2
      with:
        app-name: 'myapp'
        publish-profile: ${{ secrets.AZURE_WEBAPP_PUBLISH_PROFILE }}
        images: 'mycontainer.azurecr.io/myapp:${{ github.sha }}'

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.