Menyebarkan aplikasi Anda ke Azure menggunakan alur kerja Tindakan GitHub yang dibuat oleh Visual Studio
Mulai visual Studio 2019 versi 16.11, Anda dapat membuat alur kerja GitHub Actions baru untuk proyek .NET yang dihosting di GitHub.com.
Prasyarat
- Anda harus masuk ke akun GitHub Anda di Visual Studio.
- Akun Azure. Jika Anda tidak memiliki akun Azure, aktifkan manfaat Azure Anda untuk pelanggan Visual Studio atau daftar untuk uji coba gratis.
Menyebarkan satu proyek ke Azure menggunakan GitHub Actions
Di Penjelajah Solusi, klik kanan proyek yang dihosting GitHub.com Anda dan pilih Terbitkan.
Pada layar berikutnya, pilih Azure lalu pilih Berikutnya.
Bergantung pada jenis proyek, Anda mendapatkan daftar layanan Azure yang berbeda untuk dipilih. Pilih salah satu layanan Azure yang didukung yang sesuai dengan kebutuhan Anda.
Pada langkah terakhir wizard, pilih CI/CD menggunakan alur kerja tindakan GitHub (menghasilkan file yml) lalu pilih Selesai.
Visual Studio menghasilkan alur kerja tindakan GitHub baru dan meminta Anda untuk menerapkannya dan mendorongnya ke GitHub.com.
Jika Anda menyelesaikan langkah ini dengan menggunakan alat Git bawaan, Visual Studio akan mendeteksi eksekusi alur kerja.
Mengatur rahasia GitHub
Agar alur kerja yang dihasilkan berhasil disebarkan ke Azure, alur kerja mungkin memerlukan akses ke profil penerbitan.
Penyebaran yang berhasil mungkin juga memerlukan akses ke perwakilan layanan.
Dalam semua kasus, Visual Studio mencoba mengatur rahasia GitHub untuk Anda dengan nilai yang benar. Jika gagal, itu akan memberi tahu Anda dan memberi Anda kesempatan untuk mencoba lagi.
Jika gagal mengatur rahasia lagi, Visual Studio memberi Anda kesempatan untuk mendapatkan akses ke rahasia secara manual, sehingga Anda dapat menyelesaikan proses melalui halaman repositori Anda di GitHub.com.
Menyebarkan beberapa proyek ke Azure Container Apps menggunakan GitHub Actions
Langkah-langkah ini sesuai jika Anda memiliki lebih dari satu proyek yang menggunakan kontainer Docker, dan Anda ingin menyebarkannya sebagai aplikasi multiproyek. Anda dapat menyebarkan aplikasi multiproyek seperti yang mengimplementasikan layanan mikro ke Azure Container Apps atau Azure Kubernetes Service (AKS). Artikel ini membahas Azure Container Apps.
Klik kanan pada simpul GitHub Actions di Penjelajah Solusi, dan pilih Alur kerja baru. Wizard alur kerja Tindakan GitHub muncul.
Pada layar target GitHub Actions Workflow, pilih Azure.
Untuk target tertentu, pilih Azure Container Apps. Wizard melanjutkan ke layar Aplikasi Kontainer.
Pilih Aplikasi Kontainer Azure yang sudah ada, atau pilih Buat baru.
Saat membuat yang baru, Anda akan melihat layar ini. Saat pengujian atau pembelajaran, biasanya yang terbaik adalah membuat grup sumber daya baru untuk mempermudah menghapus semuanya nanti. Lingkungan Container Apps adalah batas aman di sekitar grup aplikasi kontainer yang berbagi jaringan virtual yang sama dan menulis log ke tujuan pengelogan yang sama. Lihat Lingkungan Azure Container Apps. Jika Anda tidak tahu apa itu atau belum membuatnya sebelumnya, buat yang baru untuk instans ini.
Setelah dibuat, instans Azure Container Apps baru ditampilkan.
Pilih Berikutnya untuk melanjutkan ke layar Registri . Pilih Azure Container Registry yang sudah ada, atau buat yang baru.
Jika Anda memilih untuk membuat yang baru, Anda akan melihat layar ini. Berikan grup sumber daya, SKU, dan pilih wilayah yang sama, jika memungkinkan, seperti sebelumnya. Untuk informasi tentang SKU untuk Azure Container Registry, lihat Tingkat layanan Azure Container Registry.
Setelah dibuat, registri baru muncul di layar.
Proyek yang dapat disebarkan dalam solusi Anda ditampilkan; pilih proyek yang ingin Anda sebarkan bersama-sama dalam instans Azure Container Apps yang sama.
Pilih Selesai. Anda dapat melihat perintah yang dikeluarkan untuk membuat aset di Azure dan menyiapkan autentikasi. Jika ada yang gagal, perhatikan baris perintah yang digunakan, karena Anda dapat mencobanya lagi dari CLI. Jangan terlalu khawatir jika Anda mendapatkan kegagalan otorisasi pada tahap ini. Anda juga dapat menyiapkan autentikasi nanti di Visual Studio.
Setelah selesai, layar ringkasan muncul. Layar ringkasan menunjukkan kredensial, yang cocok dengan entri yang dibuat Visual Studio di repositori GitHub Anda di bawah rahasia GitHub Actions. Periksa tanda peringatan kuning. Jika salah satu langkah autentikasi gagal selama proses pembuatan, Anda memiliki kesempatan untuk memperbaikinya di sini dengan mengklik tautan dengan tanda peringatan, dan mengikuti beberapa langkah.
Buka file alur kerja untuk memeriksa apa yang dihasilkan Visual Studio. Meskipun Visual Studio melakukan yang terbaik untuk menghasilkan alur kerja untuk situasi Anda, setiap aplikasi dan repositori unik, jadi Anda sering harus mengedit file YML alur kerja yang dihasilkan oleh Visual Studio secara manual sebelum berhasil dijalankan. Untuk membukanya, perluas simpul GitHub Actions di Penjelajah Solusi, klik kanan pada alur kerja yang baru saja dibuat, dan pilih Edit.
Berikut ini memperlihatkan contoh file alur kerja yang dibuat oleh Visual Studio untuk solusi dengan dua proyek yang dapat disebarkan, WebAPI dan WebFrontEnd.
on:
push:
branches:
- main
env:
CONTAINER_REGISTRY_LOGIN_SERVER: registry20230810121555.azurecr.io
CONTAINER_APP_NAME: containerapp20230810121017
CONTAINER_APP_RESOURCE_GROUP_NAME: webfrontend-container-app-1234
CONTAINER_APP_CONTAINER_NAME: containerapp
jobs:
WebApi_buildImageAndDeploy:
runs-on: ubuntu-latest
steps:
- name: Checkout source code
uses: actions/checkout@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
- name: Login to Docker registry
uses: docker/login-action@v2
with:
registry: ${{ env.CONTAINER_REGISTRY_LOGIN_SERVER }}
username: ${{ secrets.registry20230810121555_USERNAME_6891 }}
password: ${{ secrets.registry20230810121555_PASSWORD_6891 }}
- name: Build and push Docker image to Azure container registry
uses: docker/build-push-action@v4
with:
push: true
tags: ${{ env.CONTAINER_REGISTRY_LOGIN_SERVER }}/webapi:${{ github.sha }}
file: WebApi\Dockerfile
- name: Azure login
uses: azure/login@v1
with:
creds: ${{ secrets.containerapp20230810121017_SPN }}
- name: Deploy to Azure container app
uses: azure/CLI@v1
with:
inlineScript: >-
az config set extension.use_dynamic_install=yes_without_prompt
az containerapp registry set --name ${{ env.CONTAINER_APP_NAME }} --resource-group ${{ env.CONTAINER_APP_RESOURCE_GROUP_NAME }} --server ${{ env.CONTAINER_REGISTRY_LOGIN_SERVER }} --username ${{ secrets.registry20230810121555_USERNAME_2047 }} --password ${{ secrets.registry20230810121555_PASSWORD_2047 }}
az containerapp update --name ${{ env.CONTAINER_APP_NAME }} --container-name ${{ env.CONTAINER_APP_CONTAINER_NAME }} --resource-group ${{ env.CONTAINER_APP_RESOURCE_GROUP_NAME }} --image ${{ env.CONTAINER_REGISTRY_LOGIN_SERVER }}/webapi:${{ github.sha }}
- name: Azure logout
run: az logout
WebFrontEnd_buildImageAndDeploy:
runs-on: ubuntu-latest
needs: WebApi_buildImageAndDeploy
steps:
- name: Checkout source code
uses: actions/checkout@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
- name: Login to Docker registry
uses: docker/login-action@v2
with:
registry: ${{ env.CONTAINER_REGISTRY_LOGIN_SERVER }}
username: ${{ secrets.registry20230810121555_USERNAME_2047 }}
password: ${{ secrets.registry20230810121555_PASSWORD_2047 }}
- name: Build and push Docker image to Azure container registry
uses: docker/build-push-action@v4
with:
push: true
tags: ${{ env.CONTAINER_REGISTRY_LOGIN_SERVER }}/webfrontend:${{ github.sha }}
file: WebFrontEnd\Dockerfile
- name: Azure login
uses: azure/login@v1
with:
creds: ${{ secrets.containerapp20230810121017_SPN }}
- name: Deploy to Azure container app
uses: azure/CLI@v1
with:
inlineScript: >-
az config set extension.use_dynamic_install=yes_without_prompt
az containerapp registry set --name ${{ env.CONTAINER_APP_NAME }} --resource-group ${{ env.CONTAINER_APP_RESOURCE_GROUP_NAME }} --server ${{ env.CONTAINER_REGISTRY_LOGIN_SERVER }} --username ${{ secrets.registry20230810121555_USERNAME_2047 }} --password ${{ secrets.registry20230810121555_PASSWORD_2047 }}
az containerapp update --name ${{ env.CONTAINER_APP_NAME }} --container-name ${{ env.CONTAINER_APP_CONTAINER_NAME }} --resource-group ${{ env.CONTAINER_APP_RESOURCE_GROUP_NAME }} --image ${{ env.CONTAINER_REGISTRY_LOGIN_SERVER }}/webfrontend:${{ github.sha }}
- name: Azure logout
run: az logout
Fungsi utama alur kerja adalah masuk ke layanan Azure dengan autentikasi yang tepat dan menjalankan perintah untuk membangun dan menyebarkan aplikasi.
Mengedit dan menguji alur kerja
Prosedur di atas menghasilkan file YML alur kerja, tetapi Anda biasanya perlu meninjau dan menyesuaikannya sebelum dapat digunakan untuk penyebaran. Anda mungkin perlu merujuk ke panduan GitHub tentang menulis tindakan alur kerja; lihat Tentang tindakan kustom. File alur kerja berisi banyak elemen yang dapat dikonfigurasi, seperti pengaturan untuk variabel lingkungan dan nama rahasia. Anda dapat melihat referensi ke lokasi Dockerfiles Anda, nama aplikasi kontainer Azure Anda, cabang dalam repositori yang akan Anda gunakan untuk memicu eksekusi alur kerja, dan referensi ke rahasia di GitHub. Rahasia direferensikan menggunakan sintaks ${{ secrets.SECRET_NAME }}
. Lihat Rahasia GitHub Actions.
Jika proyek Anda tidak terletak di akar repositori, Anda perlu mengubah alur kerja untuk menentukan jalur untuk menemukan Dockerfiles. Tambahkan variabel lingkungan untuk jalur relatif ke Dockerfile di kedua proyek.
DOCKER_FILEPATH_WEBAPI: docker/ComposeSample/WebApi/Dockerfile
DOCKER_FILEPATH_WEBFRONTEND: docker/ComposeSample/WebFrontend/Dockerfile
Gunakan nilai variabel lingkungan ini untuk file
parameter sebagai berikut:
- name: Build and push Docker image to Azure container registry
uses: docker/build-push-action@v4
with:
push: true
tags: ${{ env.CONTAINER_REGISTRY_LOGIN_SERVER }}/webfrontend:${{ github.sha }}
file: ${{ env.DOCKER_FILEPATH_WEBFRONTEND }}
Jika Anda perlu membuat perubahan pada Dockerfile, buat dan simpan perubahan, terapkan, dan dorong ke repositori jarak jauh. Alur kerja yang dihasilkan Visual Studio berisi pemicu yang menyebabkannya berjalan jika diperbarui pada cabang tertentu. Jika Anda mendorong ke working
cabang, itu harus menyerupai kode berikut:
on:
push:
branches:
- working
Untuk menguji perubahan, terapkan dan dorong ke cabang repositori yang ditentukan dalam kode pemicu. Anda tidak perlu membuat permintaan pull (PR). Alur kerja berjalan selama pemicu push
diatur ke cabang yang tepat.
Di tab Tindakan pada repositori Anda di GitHub.com, cari alur kerja yang dijalankan. Anda bisa langsung ke sana dengan menggunakan tautan di tab ringkasan GitHub Actions di Visual Studio. Di GitHub, Anda dapat membuka eksekusi alur kerja untuk melihat log.
Pemecahan Masalah
Tips pemecahan masalah berikut mungkin berguna jika alur kerja Anda tidak berhasil dijalankan.
Masalah: Tahap build tidak dibangun
Salah satu masalah yang mungkin Anda temui di Dockerfile adalah bahwa tahap build tidak akan berfungsi seperti halnya di Visual Studio. Dockerfile default yang dihasilkan Visual Studio untuk proyek menunjukkan masalah ini. Pertimbangkan modifikasi berikut ke tahap build jika Anda memiliki Dockerfile seperti itu. Berikut adalah contoh di mana proyek berada di docker/ComposeSample/WebApi
dalam repositori. Jalur lengkap diberikan karena konteks Dockerfile dalam kontainer build alur kerja diatur ke akar repositori, tetapi di Visual Studio, diatur ke folder di atas folder proyek. Akhiran _build
ditambahkan di sini untuk membuat folder build, dan alih-alih hanya menyalin file proyek, seluruh folder disalin. Dibandingkan dengan Dockerfile default yang dihasilkan oleh Visual Studio, bagian file dari jalur dalam argumen pertama perintah COPY dihapus sehingga kami menyalin seluruh folder alih-alih hanya file proyek. Tanpa perubahan ini, tahap ini menghasilkan kesalahan MSBuild.
FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
WORKDIR /src
COPY ["docker/ComposeSample/WebApi/", "WebApi_build/"]
RUN dotnet restore "WebApi_build/WebApi.csproj"
COPY . .
WORKDIR "/src/WebApi_build"
RUN dotnet build "WebApi.csproj" -c Release -o /app/build
Masalah: Kredensial autentikasi
Alur kerja memerlukan nama pengguna dan rahasia kata sandi yang tepat untuk disiapkan untuk akses Azure. Visual Studio mencoba melakukan ini secara otomatis saat Anda membuat aset Azure atau dari layar GitHub Actions di IDE Microsoft Visual Studio. Anda dapat memeriksa rahasia di GitHub dan memastikan mereka ada di sana, atau meregenerasinya dan menambahkannya lagi ke GitHub jika perlu menggunakan bagian Pengaturan di repositori. Periksa ID rahasia terhadap apa yang direferensikan di setiap bagian alur kerja. Jika perlu, Anda dapat membuka registri kontainer di portal Azure dan mendapatkan nama pengguna dan kata sandi untuk registri kontainer dan menggunakan nilai-nilai tersebut untuk memperbarui rahasia di GitHub.
Jika Anda menjalankan az ad sp create-for-rbac
perintah untuk menyiapkan perwakilan layanan dan mendapatkan ID klien, rahasia klien, dan ID penyewa, tambahkan ID klien dan rahasia klien sebagai rahasia di bagian GitHub Actions Secrets untuk repositori GitHub Anda. Anda dapat memberikan kredensial masuk Azure dalam bentuk nama pengguna (ID klien untuk aplikasi) dan kata sandi (rahasia klien) untuk autentikasi Aplikasi Kontainer Azure. Untuk melakukannya, ganti langkah Azure login
dengan kode berikut. Gunakan nama rahasia GitHub Anda sendiri yang Anda buat untuk ID klien dan rahasia klien, dan gunakan ID penyewa dari output perintah yang sama.
- name: Azure login
uses: azure/CLI@v1
with:
inlineScript: |
az login --service-principal -u ${{ secrets.GITHUB_SECRETID_FOR_USERNAME }} -p ${{ secrets.GITHUB_SECRETID_FOR_PASSWORD }} --tenant {your tenant ID}
az account list
Jika Dockerfile berfungsi dengan benar, dan autentikasi sudah benar, dan Anda masih melihat masalah dengan alur kerja Anda, pertimbangkan sumber daya berikut:
Jenis proyek mana yang didukung?
- Inti ASP.NET
- ASP.NET 5 dan ke atas
- Azure Functions
Layanan Azure mana yang didukung?
- Azure Web Apps
- Azure Functions
- Azure API Management