Bagikan melalui


Menyebarkan kontainer kustom ke App Service dengan menggunakan GitHub Actions

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

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.

Untuk alur kerja kontainer App Service, file 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

Kami merekomendasikan agar Anda melakukan autentikasi dengan Azure App Services menggunakan OpenID Connect untuk GitHub Actions. Anda juga dapat mengautentikasi dengan perwakilan layanan atau profil penerbitan.

Untuk mengautentikasi dengan Azure, simpan kredensial profil publikasi atau perwakilan layanan Anda sebagai rahasia GitHub. Anda mengakses rahasia dalam alur kerja Anda.

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

  1. Buka App Service di portal Microsoft Azure.

  2. Pada panel Gambaran Umum, pilih Dapatkan profil Publikasi.

    Catatan

    Mulai Oktober 2020, pengguna harus mengatur pengaturan aplikasi untuk aplikasi WEBSITE_WEBDEPLOY_USE_SCM web Linux sebelum truemereka mengunduh file. Untuk mempelajari cara mengonfigurasi pengaturan aplikasi web umum, buka Mengonfigurasi aplikasi App Service di portal Microsoft Azure.

  3. Simpan file yang diunduh. Anda menggunakan konten file untuk membuat rahasia GitHub.

Mengonfigurasi rahasia GitHub untuk autentikasi

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

Saat Anda mengonfigurasi alur kerja GitHub, gunakan rahasia AZURE_WEBAPP_PUBLISH_PROFILE dalam aksi penyebaran 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 artikel 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.

Buat citra kontainer

Contoh berikut menunjukkan bagian dari alur kerja yang membangun gambar Docker Node.js. Gunakan Docker Login untuk masuk ke registri kontainer privat. 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 }}     

Contoh berikut menunjukkan bagian dari alur kerja yang membangun gambar Windows Docker. Gunakan Docker Login untuk masuk ke registri kontainer privat. Contoh ini menggunakan Azure Container Registry tetapi tindakan yang sama berfungsi untuk registri lain.

name: Windows Container Workflow
on: [push]
jobs:
  build:
    runs-on: windows-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: Windows Container Workflow
on: [push]
jobs:
  build:
    runs-on: windows-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 (Diperlukan) Nama aplikasi App Service.
publish-profile (Opsional) Digunakan dengan aplikasi web (Windows dan Linux) dan kontainer aplikasi web (Linux). Skenario multi-kontainer tidak didukung. Terbitkan konten file profil \*.publishsettings dengan rahasia Web Deploy.
slot-name (Opsional) Masukkan slot yang sudah ada, kecuali slot produksi.
package (Opsional) Hanya digunakan dengan aplikasi web: Jalur ke paket atau folder. \*.zip, \*.war, \*.jar, atau folder yang akan disebarkan.
images (Diperlukan) Digunakan hanya dengan kontainer aplikasi web: Tentukan nama gambar kontainer yang sepenuhnya memenuhi syarat. Misalnya, myregistry.azurecr.io/nginx:latest atau python:3.12.12-alpine/. Untuk aplikasi multi-kontainer, beberapa nama gambar kontainer dapat disediakan (dipisahkan multibaris).
configuration-file (Opsional) Hanya digunakan dengan kontainer aplikasi web: 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 startup. Sebagai contoh: 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 }}'
name: Windows_Container_Workflow

on: [push]

jobs:
  build:
    runs-on: windows-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 }}'

Anda dapat menemukan serangkaian tindakan kami yang dikelompokkan ke dalam repositori yang berbeda di GitHub. Setiap repositori berisi dokumentasi dan contoh untuk membantu Anda menggunakan GitHub untuk CI/CD dan menyebarkan aplikasi Anda ke Azure.