Bangun konfigurasi untuk Azure Static Web Apps
Konfigurasi build Azure Static Web Apps menggunakan GitHub Actions atau Azure Pipelines. Setiap situs memiliki file konfigurasi YAML yang mengontrol bagaimana sebuah situs dibangun dan digunakan. Artikel ini menjelaskan struktur dan opsi file.
Tabel berikut mencantumkan pengaturan konfigurasi yang tersedia.
Properti | Deskripsi | Wajib diisi |
---|---|---|
app_location |
Folder ini berisi kode sumber untuk aplikasi front-end Anda. Nilai ini relatif terhadap root repositori di GitHub dan folder kerja saat ini di Azure DevOps. Saat digunakan dengan skip_app_build: true , nilai ini adalah lokasi output build aplikasi. |
Ya |
api_location |
Folder ini yang berisi kode sumber untuk aplikasi API Anda. Nilai ini relatif terhadap root repositori di GitHub dan folder kerja saat ini di Azure DevOps. Saat digunakan dengan skip_api_build: true , nilai ini adalah lokasi output build API. |
No |
output_location |
Jika aplikasi web Anda menjalankan langkah build, lokasi output adalah folder tempat file publik dihasilkan. Untuk sebagian besar proyek, output_location relatif terhadap app_location . Namun, untuk proyek .NET, lokasi relatif terhadap folder output. |
No |
app_build_command |
Untuk aplikasi Node.js, Anda dapat menentukan perintah khusus untuk membangun aplikasi konten statis. Misalnya, untuk mengonfigurasi build produksi untuk aplikasi Angular, buat skrip npm bernama build-prod untuk menjalankanng build --prod dan masukkan npm run build-prod sebagai perintah kustom. Jika dibiarkan kosong, alur kerja mencoba menjalankan perintah npm run build atau npm run build:azure . |
No |
api_build_command |
Untuk aplikasi Node.js, Anda dapat menentukan perintah kustom untuk membangun aplikasi Azure Functions API. | No |
skip_app_build |
Atur nilai ke true untuk melewati pembuatan aplikasi front-end. |
No |
skip_api_build |
Atur nilai ke true untuk melewati pembuatan fungsi API. |
No |
cwd (Hanya Azure Pipelines) |
Jalur absolut ke folder kerja. Default ke $(System.DefaultWorkingDirectory) . |
No |
build_timeout_in_minutes |
Atur nilai ini untuk menyesuaikan batas waktu build. Default ke 15 . |
No |
Dengan pengaturan ini, Anda dapat mengatur GitHub Actions atau Azure Pipelines untuk menjalankan continuous integration/continuous delivery (CI/CD) untuk aplikasi web statis Anda.
Nama dan lokasi file
Tindakan GitHub menghasilkan file konfigurasi dan disimpan di folder .github/workflows , bernama menggunakan format berikut: azure-static-web-apps-<RANDOM_NAME>.yml
.
Secara default, file konfigurasi disimpan di akar repositori Anda dengan nama azure-pipelines.yml
.
Keamanan
Anda dapat memilih antara dua kebijakan otorisasi penyebaran yang berbeda untuk mengamankan konfigurasi build Anda. Static Web Apps mendukung penggunaan token penyebaran Azure (disarankan), atau token akses GitHub.
Gunakan langkah-langkah berikut untuk mengatur kebijakan otorisasi penyebaran di aplikasi Anda:
Aplikasi baru: Saat Anda membuat aplikasi web statis, pada tab Konfigurasi penyebaran, buat pilihan untuk kebijakan otorisasi Penyebaran.
Aplikasi yang ada: Untuk memperbarui aplikasi yang ada, buka Konfigurasi Penyebaran Konfigurasi>Pengaturan>, dan buat pilihan untuk kebijakan otorisasi Penyebaran.
Konfigurasi build
Konfigurasi sampel berikut memantau repositori untuk perubahan. Saat commits didorong ke main
cabang, aplikasi ini dibangun dari app_location
folder dan file di dilayani ke web output_location
publik. Selain itu, aplikasi dalam folder api tersedia di bawah api
jalur situs.
trigger:
- main
pool:
vmImage: ubuntu-latest
steps:
- checkout: self
submodules: true
- task: AzureStaticWebApp@0
inputs:
app_location: 'src' # App source code path relative to cwd
api_location: 'api' # Api source code path relative to cwd
output_location: 'public' # Built app content directory relative to app_location - optional
cwd: '$(System.DefaultWorkingDirectory)/myapp' # Working directory - optional
azure_static_web_apps_api_token: $(deployment_token)
Dalam konfigurasi ini:
- Bagian
main
dipantau untuk berkomitmen. - Titik
app_location
kesrc
folder yang berisi file sumber untuk aplikasi web. Nilai ini relatif terhadap direktori kerja (cwd
). Untuk mengaturnya ke direktori kerja, gunakan/
. - Titik-titik
api_location
ke folderapi
yang berisi aplikasi Azure Functions untuk titik akhir API situs. Nilai ini relatif terhadap direktori kerja (cwd
). Untuk mengaturnya ke direktori kerja, gunakan/
. - Titik
output_location
ke folderpublic
yang berisi versi final file sumber aplikasi. Nilai ini relatif terhadapapp_location
. Untuk proyek .NET, lokasi relatif terhadap folder output. cwd
adalah jalur absolut yang menunjuk ke direktori kerja. Ini default ke$(System.DefaultWorkingDirectory)
.- Variabel
$(deployment_token)
menunjuk ke token penyebaran Azure DevOps yang dihasilkan.
Catatan
app_location
dan api_location
harus relatif terhadap direktori kerja (cwd
) dan harus subdirektori di bawah cwd
.
name: Azure Static Web Apps CI/CD
on:
push:
branches:
- main
- dev
pull_request:
types: [opened, synchronize, reopened, closed]
branches:
- main
jobs:
build_and_deploy_job:
if: github.event_name == 'push' || (github.event_name == 'pull_request' && github.event.action != 'closed')
runs-on: ubuntu-latest
name: Build and Deploy Job
permissions:
id-token: write
contents: read
steps:
- uses: actions/checkout@v3
with:
submodules: true
lfs: false
- name: Install OIDC Client from Core Package
run: npm install @actions/core@1.6.0 @actions/http-client
- name: Get Id Token
uses: actions/github-script@v6
id: idtoken
with:
script: |
const coredemo = require('@actions/core')
return await coredemo.getIDToken()
result-encoding: string
- name: Build And Deploy
id: builddeploy
uses: Azure/static-web-apps-deploy@v1
with:
azure_static_web_apps_api_token: ${{ secrets.AZURE_STATIC_WEB_APPS_API_TOKEN_GENTLE_WATER }}
action: "upload"
###### Repository/Build Configurations - These values can be configured to match your app requirements. ######
# For more information regarding Static Web App workflow configurations, please visit: https://aka.ms/swaworkflowconfig
app_location: "/" # App source code path
api_location: "" # Api source code path - optional
output_location: "dist/angular-basic" # Built app content directory - optional
production_branch: "dev"
github_id_token: ${{ steps.idtoken.outputs.result }}
###### End of Repository/Build Configurations ######
close_pull_request_job:
if: github.event_name == 'pull_request' && github.event.action == 'closed'
runs-on: ubuntu-latest
name: Close Pull Request Job
steps:
- name: Close Pull Request
id: closepullrequest
uses: Azure/static-web-apps-deploy@v1
with:
azure_static_web_apps_api_token: ${{ secrets.AZURE_STATIC_WEB_APPS_API_TOKEN_GENTLE_WATER_030D91C1E }}
action: "close"
Dalam konfigurasi ini:
- Bagian
main
dipantau untuk berkomitmen. - Alur kerja tindakan GitHub dipicu saat permintaan tarik pada bagian
main
adalah: dibuka, disinkronkan, dibuka kembali, atau ditutup. build_and_deploy_job
mengeksekusi saat Anda mendorong penerapan atau membuka permintaan pull terhadap cabang yang tercantum di propertion
.- Titik
app_location
kesrc
folder yang berisi file sumber untuk aplikasi web. Untuk mengatur nilai ini ke akar repositori, gunakan/
. - Titik-titik
api_location
ke folderapi
yang berisi aplikasi Azure Functions untuk titik akhir API situs. Untuk mengatur nilai ini ke akar repositori, gunakan/
. - Titik
output_location
ke folderpublic
yang berisi versi final file sumber aplikasi. Ini relatif terhadapapp_location
. Untuk proyek .NET, lokasi relatif terhadap folder terbitkan output.
Jangan ubah nilai untuk repo_token
, action
, dan azure_static_web_apps_api_token
karena nilai itu ditetapkan untuk Anda oleh Azure Static Web Apps.
Pekerjaan Tutup Permintaan Pull secara otomatis menutup permintaan pull yang memicu build dan penyebaran. Pekerjaan opsional ini tidak diperlukan agar proses berfungsi.
Saat permintaan pull dibuka, Azure Static Web Apps GitHub Action membangun dan menyebarkan aplikasi ke lingkungan penahapan. Setelah itu, pekerjaan Tutup Permintaan Pull memeriksa apakah permintaan pull masih terbuka dan menutupnya dengan pesan penyelesaian.
Pekerjaan ini membantu menjaga alur kerja permintaan pull Anda tetap terorganisir dan mencegah permintaan pull kedaluarsa. Dengan runtime secara otomatis menutup permintaan pull, repositori Anda tetap terbarui dan tim Anda diberi tahu tentang status tersebut.
Pekerjaan Tutup Permintaan Pull adalah bagian dari alur kerja GitHub Actions Azure Static Web Apps, menutup permintaan pull setelah digabungkan. Tindakan ini Azure/static-web-apps-deploy
menyebarkan aplikasi ke Azure Static Web Apps, yang azure_static_web_apps_api_token
memerlukan untuk autentikasi.
Perintah build kustom
Untuk aplikasi Node.js, Anda dapat mengambil kontrol halus atas perintah apa yang dijalankan selama proses pembuatan aplikasi atau API. Contoh berikut menunjukkan cara mendefinisikan build dengan nilai untuk app_build_command
dan api_build_command
.
Catatan
Saat ini, Anda hanya dapat mendefinisikan app_build_command
dan api_build_command
untuk build Node.js.
Untuk menentukan versi Node.js, gunakan engines
bidang dalam package.json
file.
...
with:
azure_static_web_apps_api_token: ${{ secrets.AZURE_STATIC_WEB_APPS_API_TOKEN }}
repo_token: ${{ secrets.GITHUB_TOKEN }}
action: 'upload'
app_location: '/'
api_location: 'api'
output_location: 'dist'
app_build_command: 'npm run build-ui-prod'
api_build_command: 'npm run build-api-prod'
...
inputs:
app_location: 'src'
api_location: 'api'
app_build_command: 'npm run build-ui-prod'
api_build_command: 'npm run build-api-prod'
output_location: 'public'
azure_static_web_apps_api_token: $(deployment_token)
Lompati membangun aplikasi front-end
Jika Anda memerlukan kontrol penuh atas build untuk aplikasi front-end Anda, Anda dapat melewati build otomatis dan menerapkan aplikasi yang dibangun pada langkah sebelumnya.
Untuk melewatkan membangun aplikasi front-end:
- Atur
app_location
ke lokasi file yang ingin Anda terapkan. - Atur
skip_app_build
ketrue
. - Atur
output_location
ke string kosong (''
).
Catatan
Pastikan file Anda staticwebapp.config.json
juga disalin ke direktori output .
...
with:
azure_static_web_apps_api_token: ${{ secrets.AZURE_STATIC_WEB_APPS_API_TOKEN }}
repo_token: ${{ secrets.GITHUB_TOKEN }}
action: 'upload'
app_location: 'src/dist'
api_location: 'api'
output_location: ''
skip_app_build: true
...
inputs:
app_location: 'src/dist'
api_location: 'api'
output_location: '' # Leave this empty
skip_app_build: true
azure_static_web_apps_api_token: $(deployment_token)
Lewati pembuatan API
Jika Anda ingin melewati pembangunan API, Anda dapat melewati build otomatis dan menyebarkan API yang dibangun pada langkah sebelumnya.
Langkah-langkah untuk melewati pembuatan API:
Dalam file staticwebapp.config.json, atur
apiRuntime
ke runtime dan versi yang benar. Lihat Mengonfigurasi Azure Static Web Apps untuk daftar runtime dan versi yang didukung.{ "platform": { "apiRuntime": "node:16" } }
Atur
skip_api_build
ketrue
.Atur
api_location
ke folder yang berisi aplikasi API bawaan untuk disebarkan. Jalur ini relatif terhadap akar repositori di GitHub Actions dancwd
di Azure Pipelines.
...
with:
azure_static_web_apps_api_token: ${{ secrets.AZURE_STATIC_WEB_APPS_API_TOKEN }}
repo_token: ${{ secrets.GITHUB_TOKEN }}
action: 'upload'
app_location: "src" # App source code path relative to repository root
api_location: "api" # Api source code path relative to repository root - optional
output_location: "public" # Built app content directory, relative to app_location - optional
skip_api_build: true
...
inputs:
app_location: 'src'
api_location: 'api'
output_location: 'public'
skip_api_build: true
azure_static_web_apps_api_token: $(deployment_token)
Memperpanjang batas waktu build
Secara default, build aplikasi dan API dibatasi hingga 15 menit. Anda dapat memperpanjang batas waktu build dengan mengatur build_timeout_in_minutes
properti .
...
with:
azure_static_web_apps_api_token: ${{ secrets.AZURE_STATIC_WEB_APPS_API_TOKEN }}
repo_token: ${{ secrets.GITHUB_TOKEN }}
action: 'upload'
app_location: 'src'
api_location: 'api'
output_location: 'public'
build_timeout_in_minutes: 30
...
inputs:
app_location: 'src'
api_location: 'api'
output_location: 'public'
build_timeout_in_minutes: 30
azure_static_web_apps_api_token: $(deployment_token)
Jalankan alur kerja tanpa rahasia penyebaran
Terkadang Anda memerlukan alur kerja Anda untuk terus memproses bahkan ketika beberapa rahasia hilang. Untuk mengonfigurasi alur kerja Anda untuk melanjutkan tanpa rahasia yang ditentukan, atur SKIP_DEPLOY_ON_MISSING_SECRETS
variabel lingkungan ke true
.
Saat diaktifkan, fitur ini memungkinkan alur kerja untuk melanjutkan tanpa menyebarkan konten situs.
...
with:
azure_static_web_apps_api_token: ${{ secrets.AZURE_STATIC_WEB_APPS_API_TOKEN }}
repo_token: ${{ secrets.GITHUB_TOKEN }}
action: 'upload'
app_location: 'src'
api_location: 'api'
output_location: 'public'
env:
SKIP_DEPLOY_ON_MISSING_SECRETS: true
...
inputs:
app_location: 'src'
api_location: 'api'
output_location: 'public'
azure_static_web_apps_api_token: $(deployment_token)
env:
SKIP_DEPLOY_ON_MISSING_SECRETS: true
Variabel lingkungan
Anda dapat mengatur variabel lingkungan untuk build melalui bagian env
konfigurasi pekerjaan.
Untuk informasi selengkapnya tentang variabel lingkungan yang digunakan oleh Oryx, lihat Konfigurasi Oryx.
...
with:
azure_static_web_apps_api_token: ${{ secrets.AZURE_STATIC_WEB_APPS_API_TOKEN }}
repo_token: ${{ secrets.GITHUB_TOKEN }}
action: 'upload'
app_location: 'src'
api_location: 'api'
output_location: 'public'
env: # Add environment variables here
HUGO_VERSION: 0.58.0
...
inputs:
app_location: 'src'
api_location: 'api'
output_location: 'public'
azure_static_web_apps_api_token: $(deployment_token)
env: # Add environment variables here
HUGO_VERSION: 0.58.0
Dukungan Monorepo
Monorepo adalah repositori yang berisi kode untuk lebih dari satu aplikasi. Secara default, alur kerja melacak semua file dalam repositori, tetapi Anda dapat menyesuaikan konfigurasi untuk menargetkan satu aplikasi.
Untuk menargetkan file alur kerja ke satu aplikasi, Anda menentukan jalur di bagian push
dan pull_request
.
Saat Anda menyiapkan monorepo, setiap konfigurasi aplikasi statis dicakup hanya untuk file untuk satu aplikasi. File alur kerja yang berbeda tinggal berdampingan di folder .github/workflows repositori.
├── .github
│ └── workflows
│ ├── azure-static-web-apps-purple-pond.yml
│ └── azure-static-web-apps-yellow-shoe.yml
│
├── app1 👉 controlled by: azure-static-web-apps-purple-pond.yml
├── app2 👉 controlled by: azure-static-web-apps-yellow-shoe.yml
│
├── api1 👉 controlled by: azure-static-web-apps-purple-pond.yml
├── api2 👉 controlled by: azure-static-web-apps-yellow-shoe.yml
│
└── README.md
Contoh berikut menunjukkan cara menambahkan simpul paths
ke bagian push
dan pull_request
file bernama azure-static-web-apps-purple-pond.yml.
on:
push:
branches:
- main
paths:
- app1/**
- api1/**
- .github/workflows/azure-static-web-apps-purple-pond.yml
pull_request:
types: [opened, synchronize, reopened, closed]
branches:
- main
paths:
- app1/**
- api1/**
- .github/workflows/azure-static-web-apps-purple-pond.yml
Dalam contoh ini, hanya perubahan yang dilakukan pada file berikut yang memicu build baru:
- File apa pun di dalam folder app1
- File apa pun di dalam folder api1
- Perubahan pada file alur kerja azure-static-web-apps-purple-pond.yml aplikasi
Untuk mendukung lebih dari satu aplikasi dalam satu repositori, buat file alur kerja terpisah dan kaitkan dengan Pipa Azure yang berbeda.