Bagikan melalui


Menyebarkan aplikasi Anda ke Azure menggunakan alur kerja GitHub Actions 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, Anda mendapatkan daftar layanan Azure yang berbeda untuk dipilih. Pilih salah satu layanan Azure yang didukung yang sesuai dengan kebutuhan Anda.

memilih layanan Azure yang sesuai untuk proyek Anda

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

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

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

menerapkan dan mendorong

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, mungkin memerlukan akses ke profil penerbitan.

satu rahasia GitHub

Penyebaran yang berhasil mungkin juga memerlukan akses ke prinsipal 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.

mengatur 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 menerapkan layanan mikro untuk Azure Container Apps atau Azure Kubernetes Service (AKS). Artikel ini membahas Azure Container Apps.

  1. Klik kanan pada simpul Tindakan GitHub di Penjelajah Solusi, dan pilih Alur kerja baru. Asisten alur kerja GitHub Actions 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 Buatbaru.

    Cuplikan layar memperlihatkan Azure Container Apps yang 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 dari Azure Container Registry, lihat tingkat layanan dari 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 sesuai dengan entri yang dibuat Visual Studio dalam repositori GitHub Anda pada bagian 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 di 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 parameter file 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 melakukan push ke cabang working, seharusnya kode tersebut menyerupai yang berikut:

on:
  push:
  branches:
  - working

Untuk menguji perubahan, terapkan dan dorong ke cabang repositori yang ditentukan dalam kode pemicu. Anda tidak perlu membuat permintaan tarik (PR). Alur kerja berjalan selama pemicu push diatur ke cabang yang tepat.

Di tab Aksi 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 proses build di kontainer diatur ke root repositori, tetapi di Visual Studio, konteks tersebut ditetapkan ke dalam folder di atas folder proyek. Akhiran _build ditambahkan di sini untuk membuat folder build, dan alih-alih hanya menyalin file proyek, seluruh folder disalin. Jika dibandingkan dengan Dockerfile default yang dihasilkan oleh Visual Studio, bagian jalur file dalam argumen pertama perintah COPY dihapus agar kita menyalin keseluruhan 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 Microsoft Azure dan mendapatkan nama pengguna dan kata sandi untuk registri kontainer dan menggunakan nilai-nilai tersebut untuk memperbarui rahasia di GitHub.

Jika Anda menjalankan perintah az ad sp create-for-rbac 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?

  • ASP.NET Core
  • ASP.NET 5 ke atas
  • Azure Functions

Layanan Azure mana yang didukung?

  • Azure Web Apps
  • Azure Functions
  • Azure API Management