Mengonfigurasi GitHub Action untuk membuat instans kontainer

Tindakan GitHub adalah serangkaian fitur di GitHub untuk mengotomatiskan alur kerja pengembangan perangkat lunak Anda di tempat yang sama Anda menyimpan kode dan berkolaborasi terhadap permintaan pull dan masalah.

Gunakan Sebarkan ke Azure Container Instances dalam GitHub Actions untuk mengotomatiskan pengembangan satu kontainer ke Azure Container Instances. Tindakan ini memungkinkan Anda mengatur properti untuk instans kontainer yang mirip dengan yang ada di perintahaz container create.

Artikel ini memperlihatkan cara menyiapkan alur kerja dalam repositori GitHub yang melakukan tindakan berikut:

  • Menyusun gambar dari Dockerfile
  • Menerapkan gambar ke registri kontainer Azure
  • Menyebarkan gambar kontainer ke instans kontainer Azure

Artikel ini memperlihatkan dua cara untuk menyiapkan alur kerja:

  • Konfigurasikan alur kerja GitHub - Membuat alur kerja dalam repositori GitHub menggunakan tindakan Sebarkan ke Azure Container Instances dan tindakan lainnya.
  • Gunakan ekstensi CLI - Menggunakan perintah az container app up dalam ekstensi Sebarkan ke Azure dalam Azure CLI. Perintah ini mempersingkat pembuatan alur kerja GitHub dan langkah-langkah penyebaran.

Penting

GitHub Actions untuk Azure Container Instances sedang dalam tahap pratinjau. Pratinjau disediakan untuk Anda dengan syarat Anda menyetujui ketentuan penggunaan tambahan. Beberapa aspek dari fitur ini dapat berubah sebelum tersedia secara umum (GA).

Prasyarat

  • Akun GitHub - Membuat akun di https://github.com jika Anda belum memilikinya.
  • Azure CLI - Anda dapat menggunakan Azure Cloud Shell atau penginstalan lokal Azure CLI untuk menyelesaikan langkah-langkah Azure CLI. Jika Anda perlu memasang atau meningkatkan, lihat Memasang Azure CLI.
  • Registri kontainer Azure - Jika Anda belum memilikinya, buat registri kontainer Azure di tingkat Dasar menggunakan Azure CLI, portal Microsoft Azure, atau metode lainnya. Perhatikan grup sumber daya yang digunakan untuk penyebaran, yang digunakan untuk alur kerja GitHub.

Menyiapkan repositori

  • Untuk contoh dalam artikel ini, gunakan GitHub untuk mencabangkan repositori berikut: https://github.com/Azure-Samples/acr-build-helloworld-node

    Repositori ini berisi file Dockerfile dan file sumber untuk membuat gambar kontainer aplikasi web kecil.

    Cuplikan layar tombol Fork (disorot) di GitHub

  • Pastikan Tindakan diaktifkan untuk repositori Anda. Buka repositori fork Anda dan pilih Pengaturan>Aksi. Dalam izin Tindakan, pastikan bahwa Izinkan semua tindakan dipilih.

Mengonfigurasi alur kerja GitHub

Membuat kredensial untuk autentikasi Azure

Dalam alur kerja GitHub, Anda perlu memberikan info masuk Azure untuk melakukan autentikasi ke Azure CLI. Contoh berikut membuat perwakilan layanan dengan peran Kontributor yang dibatasi pada grup sumber daya untuk registri kontainer Anda.

Pertama, dapatkan ID grup sumber daya Anda. Ganti nama grup Anda dalam perintah az group show berikut:

groupId=$(az group show \
  --name <resource-group-name> \
  --query id --output tsv)

Gunakan az ad sp create-for-rbac untuk membuat principal layanan:

az ad sp create-for-rbac \
  --scope $groupId \
  --role Contributor \
  --sdk-auth

Output kurang lebih seperti:

{
  "clientId": "xxxx6ddc-xxxx-xxxx-xxx-ef78a99dxxxx",
  "clientSecret": "xxxx79dc-xxxx-xxxx-xxxx-aaaaaec5xxxx",
  "subscriptionId": "aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e",
  "tenantId": "aaaabbbb-0000-cccc-1111-dddd2222eeee",
  "activeDirectoryEndpointUrl": "https://login.microsoftonline.com",
  "resourceManagerEndpointUrl": "https://management.azure.com/",
  "activeDirectoryGraphResourceId": "https://graph.windows.net/",
  "sqlManagementEndpointUrl": "https://management.core.windows.net:8443/",
  "galleryEndpointUrl": "https://gallery.azure.com/",
  "managementEndpointUrl": "https://management.core.windows.net/"
}

Simpan output JSON karena digunakan di langkah selanjutnya. Selain itu, perhatikan clientId, yang perlu Anda perbarui prinsipal layanan di bagian berikutnya.

Pembaruan untuk autentikasi registri

Perbarui kredensial prinsipal layanan Azure untuk mengizinkan akses push dan pull ke registri kontainer Anda. Langkah ini memungkinkan alur kerja GitHub menggunakan perwakilan layanan untuk melakukan autentikasi dengan registri kontainer Anda dan untuk mendorong dan menarik gambar Docker.

Dapatkan ID sumber daya registri kontainer. Ganti nama registri Anda dalam perintah az acr show berikut:

registryId=$(az acr show \
  --name <registry-name> \
  --resource-group <resource-group-name> \
  --query id --output tsv)

Gunakan az role assignment create untuk menetapkan peran AcrPush, yang memberi akses push dan pull ke registri. Ganti ID klien perwakilan layanan Anda:

az role assignment create \
  --assignee <ClientId> \
  --scope $registryId \
  --role AcrPush

Menyimpan info masuk ke repositori GitHub

  1. Di UI GitHub, navigasikan ke repositori fork Anda dan pilih > Rahasia dan variabel Keamanan.>

  2. Pilih Rahasia repositori baru untuk menambahkan rahasia berikut:

Rahasia Nilai
AZURE_CREDENTIALS Seluruh output JSON dari langkah pembuatan prinsipal layanan
REGISTRY_LOGIN_SERVER Nama server masuk registri Anda (semua huruf kecil). Contoh: myregistry.azurecr.io
REGISTRY_USERNAME clientId dari output JSON dari pembuatan prinsipal layanan
REGISTRY_PASSWORD clientSecret dari output JSON dari pembuatan prinsip layanan
RESOURCE_GROUP Nama grup sumber daya yang Anda gunakan untuk mengatur ruang lingkup perwakilan layanan

Membuat file alur kerja

  1. Di antarmuka pengguna GitHub, pilih Tindakan.
  2. Pilih Siapkan alur kerja Anda sendiri.
  3. Di Edit file baru, tempelkan konten YAML berikut untuk menimpa kode sampel. Setujui nama file default main.yml, atau masukkan nama file yang Anda pilih.
  4. Pilih Mulai penerapan, (opsional) berikan deskripsi singkat dan luas tentang penerapan Anda, lalu pilih Terapkan file baru.
on: [push]
name: Linux_Container_Workflow

jobs:
    build-and-deploy:
        runs-on: ubuntu-latest
        steps:
        # checkout the repo
        - name: 'Checkout GitHub Action'
          uses: actions/checkout@main
          
        - name: 'Login via Azure CLI'
          uses: azure/login@v1
          with:
            creds: ${{ secrets.AZURE_CREDENTIALS }}
        
        - name: 'Build and push image'
          uses: azure/docker-login@v1
          with:
            login-server: ${{ secrets.REGISTRY_LOGIN_SERVER }}
            username: ${{ secrets.REGISTRY_USERNAME }}
            password: ${{ secrets.REGISTRY_PASSWORD }}
        - run: |
            docker build . -t ${{ secrets.REGISTRY_LOGIN_SERVER }}/sampleapp:${{ github.sha }}
            docker push ${{ secrets.REGISTRY_LOGIN_SERVER }}/sampleapp:${{ github.sha }}

        - name: 'Deploy to Azure Container Instances'
          uses: 'azure/aci-deploy@v1'
          with:
            resource-group: ${{ secrets.RESOURCE_GROUP }}
            dns-name-label: ${{ secrets.RESOURCE_GROUP }}${{ github.run_number }}
            image: ${{ secrets.REGISTRY_LOGIN_SERVER }}/sampleapp:${{ github.sha }}
            registry-login-server: ${{ secrets.REGISTRY_LOGIN_SERVER }}
            registry-username: ${{ secrets.REGISTRY_USERNAME }}
            registry-password: ${{ secrets.REGISTRY_PASSWORD }}
            name: aci-sampleapp
            location: 'west us'

Memvalidasi alur kerja

Setelah Anda mengkomit file alur kerja, alur kerja dipicu. Untuk meninjau kemajuan alur kerja, buka Tindakan>Alur kerja.

Menampilkan kemajuan alur kerja

Lihat Menampilkan riwayat eksekusi alur kerja untuk informasi tentang menampilkan status dan hasil setiap langkah dalam alur kerja Anda. Jika alur kerja tidak selesai, lihat Menampilkan log untuk mendiagnosis kegagalan.

Jika alur kerja berhasil diselesaikan, dapatkan informasi tentang instans kontainer bernama aci-sampleapp dengan menjalankan perintah az container show. Ganti nama grup sumber daya Anda:

az container show \
  --resource-group <resource-group-name> \
  --name aci-sampleapp \
  --query "{FQDN:ipAddress.fqdn,ProvisioningState:provisioningState}" \
  --output table

Keluaran kurang lebih seperti:

FQDN                                   ProvisioningState
---------------------------------      -------------------
aci-action01.westus.azurecontainer.io  Succeeded

Setelah instans diprovisikan, buka FQDN kontainer di browser Anda untuk melihat aplikasi web yang berjalan.

Menjalankan aplikasi web di browser

Menggunakan ekstensi Sebarkan ke Azure

Sebagai alternatif, gunakan ekstensi Terapkan ke Azure di Azure CLI untuk mengonfigurasi alur kerja. Perintah az container app up dalam ekstensi mengambil parameter input dari Anda untuk menyiapkan alur kerja untuk disebarkan ke Azure Container Instances.

Alur kerja yang dibuat oleh Azure CLI mirip dengan alur kerja yang dapat Anda buat secara manual menggunakan GitHub.

Prasyarat tambahan

Selain prasyarat dan penyiapan repositori untuk skenario ini, Anda perlu menginstal ekstensi Sebarkan ke Azure untuk Azure CLI.

Jalankan perintah az extension add untuk menginstal ekstensi:

az extension add \
  --name deploy-to-azure

Untuk informasi tentang menemukan, menginstal, dan mengelola ekstensi, lihat Menggunakan ekstensi dengan Azure CLI.

Jalankan az container app up

Untuk menjalankan perintah az container app up, masukkan minimal:

  • Nama registri kontainer Azure, misalnya, myregistry
  • URL ke repositori GitHub, misalnya, https://github.com/<your-GitHub-Id>/acr-build-helloworld-node

Contoh perintah:

az container app up \
  --acr myregistry \
  --repository https://github.com/myID/acr-build-helloworld-node

Perkembangan perintah

  • Jika diminta, masukkan info masuk GitHub Anda atau masukkan token akses pribadi GitHub (PAT) yang memiliki cakupan repositori dan pengguna untuk melakukan autentikasi dengan akun GitHub Anda. Jika Anda memberikan kredensial GitHub, perintah akan membuat PAT untuk Anda. Ikuti perintah tambahan untuk mengonfigurasi alur kerja.

  • Perintah membuat rahasia repositori untuk alur kerja:

    • Kredensial akun pengguna layanan untuk Azure CLI
    • Kredensial untuk mengakses registri kontainer Azure
  • Setelah perintah menerapkan file alur kerja ke repositori Anda, alur kerja dipicu.

Output kurang lebih seperti:

[...]
Checking in file github/workflows/main.yml in the GitHub repository myid/acr-build-helloworld-node
Creating workflow...
GitHub Action Workflow has been created - https://github.com/myid/acr-build-helloworld-node/runs/515192398
GitHub workflow completed.
Workflow succeeded
Your app is deployed at:  http://acr-build-helloworld-node.eastus.azurecontainer.io:8080/

Untuk menampilkan status alur kerja dan hasil setiap langkah di UI GitHub, lihat Menampilkan riwayat eksekusi alur kerja.

Memvalidasi alur kerja

Alur kerja menyebarkan instans kontainer Azure dengan nama dasar repositori GitHub Anda, dalam hal ini, acr-build-helloworld-node. Jika alur kerja berhasil diselesaikan, dapatkan informasi tentang instans kontainer bernama acr-build-helloworld-node dengan menjalankan perintah az container show. Ganti nama grup sumber daya Anda:

az container show \
  --resource-group <resource-group-name> \
  --name acr-build-helloworld-node \
  --query "{FQDN:ipAddress.fqdn,ProvisioningState:provisioningState}" \
  --output table

Hasil mirip dengan:

FQDN                                                   ProvisioningState
---------------------------------                      -------------------
acr-build-helloworld-node.westus.azurecontainer.io     Succeeded

Setelah instans diprovisikan, buka FQDN kontainer di browser Anda untuk melihat aplikasi web yang berjalan.

Membersihkan sumber daya

Hentikan instans kontainer dengan perintah az container delete:

az container delete \
  --name <instance-name>
  --resource-group <resource-group-name>

Untuk menghapus grup sumber daya dan semua sumber daya di dalamnya, jalankan perintah az group delete:

az group delete \
  --name <resource-group-name>

Langkah berikutnya

Jelajahi GitHub Marketplace untuk tindakan lainnya untuk mengotomatiskan alur kerja pengembangan Anda