Bagikan melalui


Mengonfigurasi alur dan mendorong pembaruan

Dalam artikel ini, Anda akan mempelajari cara menggunakan Azure Developer CLI (azd) untuk mendorong perubahan templat melalui alur CI/CD seperti GitHub Actions atau Azure DevOps. Untuk contoh ini, Anda akan menggunakan Aplikasi Web React dengan API Node.js dan MongoDB di templat Azure , tetapi Anda dapat menerapkan prinsip yang Anda pelajari dalam artikel ini ke salah satu templat Azure Developer CLI.

Catatan

azd pipeline config Perintah masih dalam versi beta. Baca selengkapnya tentang dukungan fitur alfa dan beta pada halaman penerapan versi fitur dan strategi rilis.

Prasyarat

azd templat mungkin atau mungkin tidak menyertakan file konfigurasi alur GitHub Actions dan/atau Azure DevOps default yang disebut azure-dev.yml, yang diperlukan untuk menyiapkan CI/CD. File konfigurasi ini menyediakan sumber daya Azure Anda dan menyebarkan kode Anda ke cabang utama. Anda dapat menemukan azure-dev.yml:

  • Untuk GitHub Actions: di .github/workflows direktori.
  • Untuk Azure DevOps: di .azdo/pipelines direktori.

Anda dapat menggunakan file konfigurasi apa adanya atau memodifikasinya agar sesuai dengan kebutuhan Anda.

Catatan

Pastikan templat Anda memiliki definisi alur (azure-dev.yaml) sebelum memanggil azd pipeline config. azd tidak otomatis membuat file ini. Lihat Membuat definisi alur untuk azd di bawah ini.

azd pipeline config Gunakan perintah untuk mengonfigurasi alur CI/CD, yang menangani tugas berikut:

  • Membuat dan mengonfigurasi perwakilan layanan untuk aplikasi pada langganan Azure. Pengguna Anda harus memiliki Owner peran atau Contributor + User Access Administrator peran dalam langganan Azure untuk memungkinkan azd membuat dan menetapkan peran ke perwakilan layanan.
  • Langkah-langkah Anda melalui alur kerja untuk membuat dan mengonfigurasi repositori GitHub atau Azure DevOps dan menerapkan kode proyek Anda ke dalamnya. Anda juga dapat memilih untuk menggunakan repositori yang ada.
  • Membuat koneksi aman antara Azure dan repositori Anda.
  • Menjalankan tindakan GitHub saat Anda memeriksa file alur kerja.

Untuk kontrol yang lebih terperinci atas proses ini, atau jika Anda pengguna tidak memiliki peran yang diperlukan, Anda dapat mengonfigurasi alur secara manual.

Pilih penyedia alur pilihan Anda untuk melanjutkan:

Mengotorisasi GitHub untuk disebarkan ke Azure

Untuk mengonfigurasi alur kerja, Anda perlu mengotorisasi perwakilan layanan untuk disebarkan ke Azure atas nama Anda, dari tindakan GitHub. azd membuat perwakilan layanan dan kredensial federasi untuk itu.

  1. Jalankan perintah berikut untuk membuat perwakilan layanan Azure dan konfigurasikan alur:

    azd pipeline config
    

    Perintah ini, secara opsional membuat repositori GitHub dan mendorong kode ke repositori baru.

    Catatan

    Secara default, azd pipeline config menggunakan OpenID Connect (OIDC), yang disebut kredensial federasi . Jika Anda lebih memilih tidak menggunakan OIDC, jalankan azd pipeline config --auth-type client-credentials.

    Kredensial OIDC/federasi tidak didukung untuk Terraform.

    Pelajari selengkapnya tentang dukungan OIDC di azd.

  2. Berikan informasi GitHub yang diminta.

  3. Saat diminta tentang menerapkan dan mendorong perubahan lokal Anda untuk memulai Tindakan GitHub baru, tentukan y.

  4. Di jendela terminal, lihat hasil azd pipeline config perintah. Perintah azd pipeline config akan menghasilkan nama repositori GitHub untuk proyek Anda.

  5. Menggunakan browser Anda, buka repositori GitHub untuk proyek Anda.

  6. Pilih Tindakan untuk melihat alur kerja berjalan.

    Cuplikan layar alur kerja GitHub yang berjalan.

Membuat dan mendorong perubahan kode

  1. Di direktori proyek /src/web/src/layout , buka header.tsx.

  2. Temukan baris <Text variant="xLarge">ToDo</Text>.

  3. Ubah harfiah ToDo menjadi myTodo.

  4. Simpan file.

  5. Terapkan perubahan Anda. Menerapkan perubahan memulai alur GitHub Action untuk menyebarkan pembaruan.

    Cuplikan layar langkah-langkah yang diperlukan untuk membuat dan menerapkan perubahan pada file pengujian.

  6. Dengan menggunakan browser Anda, buka repositori GitHub proyek Anda untuk melihat keduanya:

    • Penerapan Anda
    • Penerapan dari GitHub Actions sedang disiapkan.

    Cuplikan layar perubahan yang Anda lakukan di GitHub.

  7. Pilih Tindakan untuk melihat pembaruan pengujian yang tercermin dalam alur kerja.

    Cuplikan layar alur kerja GitHub yang berjalan setelah pembaruan pengujian.

  8. Kunjungi URL frontend web untuk memeriksa pembaruan.

azd sebagai tindakan GitHub

Tambahkan azd sebagai tindakan GitHub. Tindakan ini akan menginstal azd. Untuk menggunakannya, Anda dapat menambahkan yang berikut ini ke .github\workflows\azure-dev.yml:

on: [push]

jobs:
   build:
      runs-on: ubuntu-latest
      steps:
         - name: Install azd
         uses: Azure/setup-azd@v0.1.0

Membersihkan sumber daya

Saat Anda tidak lagi memerlukan sumber daya Azure yang dibuat dalam artikel ini, jalankan perintah berikut:

azd down

Fitur tingkat lanjut

Anda dapat memperluas azd pipeline config perintah untuk skenario atau persyaratan templat tertentu, seperti yang dijelaskan di bagian berikut.

Rahasia atau variabel tambahan

Secara default, azd mengatur variabel dan rahasia untuk alur. Misalnya, azd pipeline config perintah membuat subscription id, environment name dan region sebagai variabel alur setiap kali dijalankan. Definisi alur kemudian mereferensikan variabel tersebut:

env:
   AZURE_CLIENT_ID: ${{ vars.AZURE_CLIENT_ID }}
   AZURE_TENANT_ID: ${{ vars.AZURE_TENANT_ID }}
   AZURE_SUBSCRIPTION_ID: ${{ vars.AZURE_SUBSCRIPTION_ID }}
   AZURE_ENV_NAME: ${{ vars.AZURE_ENV_NAME }}
   AZURE_LOCATION: ${{ vars.AZURE_LOCATION }}

Saat alur berjalan, azd mendapatkan nilai dari lingkungan, yang dipetakan ke variabel dan rahasia. Bergantung pada templat, mungkin ada pengaturan yang dapat Anda kontrol menggunakan variabel lingkungan. Misalnya, variabel lingkungan bernama KEY_VAULT_NAME dapat diatur untuk menentukan nama sumber daya Key Vault dalam infrastruktur templat. Untuk kasus seperti itu, daftar variabel dan rahasia dapat ditentukan oleh templat, menggunakan azure.yaml. Misalnya, pertimbangkan konfigurasi berikut azure.yaml :

pipeline:
  variables:
    - KEY_VAULT_NAME
    - STORAGE_NAME
  secrets:
    - CONNECTION_STRING

Dengan konfigurasi ini, azd memeriksa apakah salah satu variabel atau rahasia memiliki nilai yang tidak kosong di lingkungan. azd kemudian membuat variabel atau rahasia untuk alur menggunakan nama kunci dalam konfigurasi sebagai nama variabel atau rahasia, dan nilai non-string dari lingkungan untuk nilai .

Definisi azure-dev.yaml alur kemudian dapat mereferensikan variabel atau rahasia:

- name: Provision Infrastructure
   run: azd provision --no-prompt
   env:
      KEY_VAULT_NAME: ${{ variables.KEY_VAULT_NAME }}
      STORAGE_NAME: ${{ variables.STORAGE_NAME }}
      CONNECTION_STRING: ${{ secrets.CONNECTION_STRING }}

Catatan

Anda harus menjalankan azd pipeline config setelah memperbarui daftar rahasia atau variabel untuk azure.yaml azd guna mengatur ulang nilai alur.

Parameter infrastruktur

Pertimbangkan contoh bicep berikut:

@secure()
param BlobStorageConnection string

Parameter BlobStorageConnection tidak memiliki nilai default yang ditetapkan, jadi azd meminta pengguna untuk memasukkan nilai. Namun, tidak ada perintah interaktif selama CI/CD. azd harus meminta nilai untuk parameter saat Anda menjalankan azd pipeline config, menyimpan nilai dalam alur, lalu mengambil nilai lagi saat alur berjalan.

azd menggunakan rahasia alur yang dipanggil AZD_INITIAL_ENVIRONMENT_CONFIG untuk menyimpan dan mengatur nilai semua parameter yang diperlukan secara otomatis dalam alur. Anda hanya perlu mereferensikan rahasia ini di alur Anda:

- name: Provision Infrastructure
   run: azd provision --no-prompt
   env:
      AZD_INITIAL_ENVIRONMENT_CONFIG: ${{ secrets.AZD_INITIAL_ENVIRONMENT_CONFIG }}

Saat alur berjalan, azd mengambil nilai untuk parameter dari rahasia, menghapus kebutuhan akan perintah interaktif.

Catatan

Anda harus menjalankan azd pipeline config kembali jika menambahkan parameter baru.

Membuat definisi alur

Jika templat Anda azd belum memiliki file definisi alur CI/CD, Anda dapat membuatnya sendiri. Definisi alur CI/CD biasanya memiliki 4 bagian utama:

  • pemicu
  • permissions
  • sistem operasi atau kumpulan
  • langkah-langkah yang akan dijalankan

Contoh berikut menunjukkan cara membuat file definisi dan konfigurasi terkait untuk GitHub Actions dan Azure Pipelines.

Berjalan azd di GitHub Actions memerlukan konfigurasi berikut:

  • Memberikan id-token: write dan contents: read mengakses cakupan.
  • Instal tindakan azd, kecuali Anda menggunakan gambar docker tempat azd sudah diinstal.

Anda dapat menggunakan templat berikut sebagai titik awal untuk definisi alur Anda sendiri:

on:
  workflow_dispatch:
  push:
    # Run when commits are pushed to mainline branch (main or master)
    # Set this to the mainline branch you are using
    branches:
      - main
      - master

# Set this permission if you are using a Federated Credential.
permissions:
  id-token: write
  contents: read

jobs:
  build:
    runs-on: ubuntu-latest
    # azd build-in variables.
    # This variables are always set by `azd pipeline config`
    # You can set them as global env (apply to all steps) or you can add them to individual steps' environment
    env:
      AZURE_CLIENT_ID: ${{ vars.AZURE_CLIENT_ID }}
      AZURE_TENANT_ID: ${{ vars.AZURE_TENANT_ID }}
      AZURE_SUBSCRIPTION_ID: ${{ vars.AZURE_SUBSCRIPTION_ID }}
      AZURE_ENV_NAME: ${{ vars.AZURE_ENV_NAME }}
      AZURE_LOCATION: ${{ vars.AZURE_LOCATION }}
      ## Define the additional variables or secrets that are required globally (provision and deploy)
      # ADDITIONAL_VARIABLE_PLACEHOLDER: ${{ variables.ADDITIONAL_VARIABLE_PLACEHOLDER }}
      # ADDITIONAL_SECRET_PLACEHOLDER: ${{ secrets.ADDITIONAL_SECRET_PLACEHOLDER }}      
    steps:
      - name: Checkout
        uses: actions/checkout@v4

      # using the install-azd action
      - name: Install azd
        uses: Azure/setup-azd@v1.0.0

      # # If you want to use azd-daily build, or install it from a PR, you can remove previous step and
      # # use the next one:
      # - name: Install azd - daily or from PR
      #  # Update this scrip based on the OS - pool of your pipeline. This example is for a linux pipeline installing daily build
      #  run: curl -fsSL https://aka.ms/install-azd.sh | bash -s -- --version daily
      #  shell: pwsh

      # azd set up Federated Credential by default. You can remove this step if you are using Client Credentials
      - name: Log in with Azure (Federated Credentials)
        if: ${{ env.AZURE_CLIENT_ID != '' }}
        run: |
          azd auth login `
            --client-id "$Env:AZURE_CLIENT_ID" `
            --federated-credential-provider "github" `
            --tenant-id "$Env:AZURE_TENANT_ID"
        shell: pwsh

      ## If you set up your pipeline with Client Credentials, remove previous step and uncomment this one
      # - name: Log in with Azure (Client Credentials)
      #   if: ${{ env.AZURE_CREDENTIALS != '' }}
      #   run: |
      #     $info = $Env:AZURE_CREDENTIALS | ConvertFrom-Json -AsHashtable;
      #     Write-Host "::add-mask::$($info.clientSecret)"

      #     azd auth login `
      #       --client-id "$($info.clientId)" `
      #       --client-secret "$($info.clientSecret)" `
      #       --tenant-id "$($info.tenantId)"
      #   shell: pwsh
      #   env:
      #     AZURE_CREDENTIALS: ${{ secrets.AZURE_CREDENTIALS }}

      - name: Provision Infrastructure
        run: azd provision --no-prompt
        env:
         #  # uncomment this if you are using infrastructure parameters
         #  AZD_INITIAL_ENVIRONMENT_CONFIG: ${{ secrets.AZD_INITIAL_ENVIRONMENT_CONFIG }}
         ## Define the additional variables or secrets that are required only for provision 
         #  ADDITIONAL_VARIABLE_PLACEHOLDER: ${{ variables.ADDITIONAL_VARIABLE_PLACEHOLDER }}
         #  ADDITIONAL_SECRET_PLACEHOLDER: ${{ secrets.ADDITIONAL_SECRET_PLACEHOLDER }}

      - name: Deploy Application
        run: azd deploy --no-prompt
        env:
         ## Define the additional variables or secrets that are required only for deploy
         #  ADDITIONAL_VARIABLE_PLACEHOLDER: ${{ variables.ADDITIONAL_VARIABLE_PLACEHOLDER }}
         #  ADDITIONAL_SECRET_PLACEHOLDER: ${{ secrets.ADDITIONAL_SECRET_PLACEHOLDER }}