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
- Instal Azure Developer CLI.
- Sebarkan templat Node.js.
- Kode Studio Visual terinstal.
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 atauContributor + 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.
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, jalankanazd pipeline config --auth-type client-credentials
.Kredensial OIDC/federasi tidak didukung untuk Terraform.
Berikan informasi GitHub yang diminta.
Saat diminta tentang menerapkan dan mendorong perubahan lokal Anda untuk memulai Tindakan GitHub baru, tentukan
y
.Di jendela terminal, lihat hasil
azd pipeline config
perintah. Perintahazd pipeline config
akan menghasilkan nama repositori GitHub untuk proyek Anda.Menggunakan browser Anda, buka repositori GitHub untuk proyek Anda.
Pilih Tindakan untuk melihat alur kerja berjalan.
Membuat dan mendorong perubahan kode
Di direktori proyek
/src/web/src/layout
, bukaheader.tsx
.Temukan baris
<Text variant="xLarge">ToDo</Text>
.Ubah harfiah
ToDo
menjadimyTodo
.Simpan file.
Terapkan perubahan Anda. Menerapkan perubahan memulai alur GitHub Action untuk menyebarkan pembaruan.
Dengan menggunakan browser Anda, buka repositori GitHub proyek Anda untuk melihat keduanya:
- Penerapan Anda
- Penerapan dari GitHub Actions sedang disiapkan.
Pilih Tindakan untuk melihat pembaruan pengujian yang tercermin dalam alur kerja.
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
dancontents: 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 }}