Bagikan melalui


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

Menyebarkan satu proyek ke Azure menggunakan GitHub Actions

Di Penjelajah Solusi, klik kanan proyek yang dihosting GitHub.com Anda dan pilih Terbitkan.

klik > kanan Terbitkan

Pada layar berikutnya, pilih Azure lalu pilih Berikutnya.

pilih Azure

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.

pilih layanan Azure yang sesuai untuk proyek Anda

Pada langkah terakhir wizard, pilih CI/CD menggunakan alur kerja tindakan GitHub (menghasilkan file yml) lalu pilih Selesai.

CI/CD menggunakan alur kerja GitHub Actions (menghasilkan file yml)

Visual Studio menghasilkan alur kerja tindakan GitHub baru dan meminta Anda untuk menerapkannya dan mendorongnya ke GitHub.com.

penerapan dan pendorongan

Jika Anda menyelesaikan langkah ini dengan menggunakan alat Git bawaan, Visual Studio akan mendeteksi eksekusi alur kerja.

alur kerja sedang berjalan

Mengatur rahasia GitHub

Agar alur kerja yang dihasilkan berhasil disebarkan ke Azure, alur kerja mungkin memerlukan akses ke profil penerbitan.

satu rahasia GitHub

Penyebaran yang berhasil mungkin juga memerlukan akses ke perwakilan layanan.

dua rahasia GitHub

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.

Rahasia GitHub hilang

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.

atur rahasia GitHub yang hilang

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.

  1. Klik kanan pada simpul GitHub Actions di Penjelajah Solusi, dan pilih Alur kerja baru. Wizard alur kerja Tindakan GitHub muncul.

    Cuplikan layar menu simpul GitHub Actions.

  2. Pada layar target GitHub Actions Workflow, pilih Azure.

  3. Untuk target tertentu, pilih Azure Container Apps. Wizard melanjutkan ke layar Aplikasi Kontainer.

    Cuplikan layar memperlihatkan Azure Container Apps yang sudah ada.

  4. Pilih Aplikasi Kontainer Azure yang sudah ada, atau pilih Buat baru.

    Cuplikan layar memperlihatkan Azure Container Apps yang sudah ada.

    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.

    Cuplikan layar memperlihatkan pembuatan instans Azure Container Apps baru.

    Setelah dibuat, instans Azure Container Apps baru ditampilkan.

    Cuplikan layar memperlihatkan instans Azure Container Apps yang baru dibuat.

  5. Pilih Berikutnya untuk melanjutkan ke layar Registri . Pilih Azure Container Registry yang sudah ada, atau buat yang baru.

    Cuplikan layar Azure Container Registry.

    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.

    Cuplikan layar memperlihatkan registri kontainer Azure baru yang baru saja dibuat.

    Setelah dibuat, registri baru muncul di layar.

    Cuplikan layar memperlihatkan pembuatan registri kontainer Azure baru.

  6. Proyek yang dapat disebarkan dalam solusi Anda ditampilkan; pilih proyek yang ingin Anda sebarkan bersama-sama dalam instans Azure Container Apps yang sama.

    Cuplikan layar memperlihatkan pilihan proyek yang akan disebarkan.

  7. 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.

  8. 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.

  9. 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