Build-Konfiguration für Azure Static Web Apps
Die Azure Static Web Apps-Buildkonfiguration verwendet entweder GitHub Actions oder Azure Pipelines. Jede Site hat eine YAML-Konfigurationsdatei, die steuert, wie eine Site erstellt und bereitgestellt wird. In diesem Artikel werden Struktur und Optionen der Datei erläutert.
In der folgenden Tabelle sind die verfügbaren Konfigurationseinstellungen aufgeführt.
Eigenschaft | Beschreibung | Erforderlich |
---|---|---|
app_location |
In diesem Ordner befindet sich der Quellcode für Ihre Front-End-Anwendung. Der Wert ist relativ zum Stamm des Repositorys in GitHub und dem aktuellen Arbeitsordner in Azure DevOps. Bei Verwendung mit skip_app_build: true handelt es sich bei diesem Wert um den Buildausgabespeicherort der App. |
Ja |
api_location |
Dieser Ordner enthält den Quellcode für Ihre API-Anwendung. Der Wert ist relativ zum Stamm des Repositorys in GitHub und dem aktuellen Arbeitsordner in Azure DevOps. Bei Verwendung mit skip_api_build: true handelt es sich bei diesem Wert um den Buildausgabespeicherort der API. |
No |
output_location |
Wenn Ihre Webanwendung einen Build-Schritt ausführt, ist der Ausgabeort der Ordner, in dem die öffentlichen Dateien generiert werden. Bei den meisten Projekten ist der output_location relativ zum app_location . Bei .NET-Projekten ist der Speicherort jedoch relativ zum Ausgabeordner. |
No |
app_build_command |
Für Node.js-Anwendungen können Sie einen benutzerdefinierten Befehl definieren, um die Anwendung mit statischen Inhalten zu erstellen. Wenn Sie beispielsweise einen Produktionsbuild für eine Angular-Anwendung konfigurieren möchten, erstellen Sie ein npm-Skript mit dem Namen build-prod , um ng build --prod auszuführen, und geben Sie npm run build-prod als benutzerdefinierten Befehl ein. Wenn Sie das Feld leer lassen, versucht der Workflow, den Befehl npm run build oder npm run build:azure auszuführen. |
No |
api_build_command |
Für Node.js-Anwendungen können Sie einen benutzerdefinierten Befehl definieren, um die Azure Functions API-Anwendung zu erstellen. | No |
skip_app_build |
Legen Sie den Wert auf true fest, um das Erstellen der Front-End-App zu überspringen. |
No |
skip_api_build |
Legen Sie den Wert auf true fest, um das Erstellen der API-Funktionen zu überspringen. |
No |
cwd (Nur Azure Pipelines) |
Absoluter Pfad zum Arbeitsordner. Wird standardmäßig auf $(System.DefaultWorkingDirectory) festgelegt. |
No |
build_timeout_in_minutes |
Legen Sie diesen Wert fest, um das Buildtimeout anzupassen. Wird standardmäßig auf 15 festgelegt. |
No |
Mit diesen Einstellungen können Sie GitHub Actions oder Azure Pipelines einrichten, um kontinuierliche Integration/kontinuierliche Bereitstellung (CI/CD) für Ihre statische Webanwendung durchzuführen.
Name und Speicherort der Datei
Die GitHub Actions-Aktion generiert die Konfigurationsdatei und wird im Ordner .github/workflows gespeichert, der nach folgendem Format benannt ist: azure-static-web-apps-<RANDOM_NAME>.yml
.
Standardmäßig wird die Konfigurationsdatei im Stammverzeichnis Ihres Repositorys unter dem Namen azure-pipelines.yml
gespeichert.
Sicherheit
Sie können zwischen zwei verschiedenen Bereitstellungsautorisierungsrichtlinien wählen, um Ihre Buildkonfiguration zu schützen. Static Web Apps unterstützt entweder die Verwendung eines Azure-Bereitstellungstokens (empfohlen) oder eines GitHub-Zugriffstokens.
Führen Sie die folgenden Schritte aus, um die Bereitstellungsautorisierungsrichtlinie in Ihrer App festzulegen:
Neue Apps: Wenn Sie Ihre statische Web-App erstellen, treffen Sie auf der Registerkarte Bereitstellungskonfiguration eine Auswahl für die Bereitstellungsautorisierungsrichtlinie.
Vorhandene Apps: Um eine vorhandene App zu aktualisieren, navigieren Sie zu Einstellungen>Konfiguration>Bereitstellungskonfiguration, und treffen Sie eine Auswahl für die Bereitstellungsautorisierungsrichtlinie.
Buildkonfiguration
In der folgenden Beispielkonfiguration wird das Repository auf Änderungen überwacht. Wenn Commits in den main
-Zweig gepusht werden, wird die Anwendung im app_location
-Ordner erstellt und die Dateien im output_location
-Ordner werden im öffentlichen Web bereitgestellt. Außerdem ist die Anwendung im Ordner api unter dem Pfad api
der Website verfügbar.
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)
In dieser Konfiguration:
- Der
main
Zweig wird auf Commits überwacht. - Der
app_location
verweist auf den Ordnersrc
, der die Quelldateien für die Webanwendung enthält. Dieser Wert ist relativ zum Arbeitsverzeichnis (cwd
). Verwenden Sie/
, um ihn auf das Arbeitsverzeichnis festzulegen. - Der
api_location
verweist auf den Ordnerapi
, der die Azure Functions-Anwendung für die API-Endpunkte der Website enthält. Dieser Wert ist relativ zum Arbeitsverzeichnis (cwd
). Verwenden Sie/
, um ihn auf das Arbeitsverzeichnis festzulegen. - Der
output_location
verweist auf den Ordnerpublic
, der die endgültige Version der Quelldateien der App enthält. Dieser Wert ist relativ zuapp_location
. Bei .NET-Projekten ist der Speicherort relativ zum Ausgabeordner. cwd
ist ein absoluter Pfad, der auf das Arbeitsverzeichnis verweist. Es ist standardmäßig$(System.DefaultWorkingDirectory)
.- Die Variable
$(deployment_token)
verweist auf das generierte Azure DevOps Bereitstellungs-Token
Hinweis
app_location
and api_location
müssen relativ zum Arbeitsverzeichnis (cwd
) sein, und sie müssen Unterverzeichnisse unter cwd
sein.
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"
In dieser Konfiguration:
- Der
main
Zweig wird auf Commits überwacht. - Ein GitHub Actions-Workflow wird ausgelöst, wenn eine Pull-Anforderung auf dem
main
Zweig: geöffnet, synchronisiert, erneut geöffnet oder geschlossen wird. - Die
build_and_deploy_job
wird ausgeführt, wenn Sie Commits pushen oder eine Pull Anforderung gegen den in deron
Eigenschaft aufgeführten Zweig öffnen. - Der
app_location
verweist auf den Ordnersrc
, der die Quelldateien für die Webanwendung enthält. Verwenden Sie/
, um diesen Wert auf den Repositorystamm festzulegen. - Der
api_location
verweist auf den Ordnerapi
, der die Azure Functions-Anwendung für die API-Endpunkte der Website enthält. Verwenden Sie/
, um diesen Wert auf den Repositorystamm festzulegen. - Der
output_location
verweist auf den Ordnerpublic
, der die endgültige Version der Quelldateien der App enthält. Er ist relativ zuapp_location
. Bei .NET-Projekten ist der Speicherort relativ zum Ausgabeordner für die Veröffentlichung.
Bitte ändern Sie die Werte für repo_token
, action
und azure_static_web_apps_api_token
nicht, da sie von Azure Static Web Apps für Sie festgelegt werden.
Der Auftrag Pull Request schließen schließt automatisch den Pull Request, der den Build und die Bereitstellung ausgelöst hat. Dieser optionale Auftrag ist nicht erforderlich, damit der Prozess funktioniert.
Wenn ein Pull Request geöffnet wird, werden die GitHub Actions-Aktionen von Azure Static Web Apps erstellt, und die App wird in einer Stagingumgebung bereitgestellt. Danach überprüft der Auftrag Pull Request schließen, ob der Pull Request noch geöffnet ist, und schließt diesen mit einer Abschlussmeldung.
Dieser Auftrag trägt dazu bei, den Pull-Request-Workflow organisiert zu halten und veraltete Pull Requests zu verhindern. Da die Runtime den Pull Request automatisch schließt, bleibt Ihr Repository auf dem neuesten Stand, und Ihr Team wird über den Status benachrichtigt.
Der Auftrag Pull Request schließen ist Teil des GitHub Actions-Workflows von Azure Static Web Apps und schließt den Pull Request, nachdem er gemergt wurde. Die Azure/static-web-apps-deploy
-Aktion stellt die App in Azure Static Web Apps bereit, wobei die azure_static_web_apps_api_token
für die Authentifizierung erforderlich ist.
Benutzerdefinierte Buildbefehle
Für Node.js-Anwendungen können Sie genau steuern, welche Befehle während des Build-Prozesses der App oder API ausgeführt werden. Das folgende Beispiel zeigt, wie man Build mit Werten für app_build_command
und api_build_command
definiert.
Hinweis
Derzeit können Sie nur app_build_command
und api_build_command
für Node.js-Builds definieren.
Verwenden Sie das Feld engines
in der Datei package.json
, um die Node.js Version anzugeben.
...
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)
Überspringen des Erstellens einer Front-End-App
Wenn Sie die volle Kontrolle über die Erstellung Ihrer Front-End-Anwendung benötigen, können Sie die automatische Erstellung umgehen und die in einem vorherigen Schritt erstellte Anwendung bereitstellen.
So überspringen Sie die Erstellung der Front-End-Anwendung:
- Setzen Sie
app_location
auf den Speicherort der Dateien, die Sie bereitstellen möchten. - Setzen Sie
skip_app_build
auftrue
. - Setzen Sie
output_location
auf eine leere Zeichenkette (''
).
Hinweis
Stellen Sie sicher, dass Sie Ihre staticwebapp.config.json
-Datei auch in das output-Verzeichnis (Ausgabe) kopiert haben.
...
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)
Überspringen des Erstellens der API
Wenn Sie das Erstellen der API überspringen möchten, können Sie den automatischen Build umgehen und die in einem vorherigen Schritt integrierte API bereitstellen.
Schritte zum Überspringen des Erstellens der API:
Legen Sie in der Datei staticwebapp.config.json die Eigenschaft
apiRuntime
auf die richtige Runtime und Version fest. Die Liste der unterstützten Runtimes und Versionen finden Sie unter Konfigurieren von Azure Static Web Apps.{ "platform": { "apiRuntime": "node:16" } }
Setzen Sie
skip_api_build
auftrue
.Legen Sie
api_location
auf den Ordner fest, der die erstellte API-App enthält, die bereitgestellt werden soll. Dieser Pfad ist relativ zum Repositorystamm in GitHub Actions undcwd
in 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)
Verlängern des Buildtimeouts
Standardmäßig sind die App- und API-Builds auf 15 Minuten beschränkt. Sie können das Buildtimeout verlängern, indem Sie die build_timeout_in_minutes
-Eigenschaft festlegen.
...
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)
Ausführen von Workflows ohne Bereitstellungsgeheimnis
Unter Umständen muss Ihr Workflow die Verarbeitung auch dann fortsetzen können, wenn einige Geheimnisse fehlen. Legen Sie die Umgebungsvariable SKIP_DEPLOY_ON_MISSING_SECRETS
auf true
fest, um den Workflow so zu konfigurieren, dass er ohne definierte Geheimnisse fortgesetzt wird.
Wenn dieses Feature aktiviert ist, kann der Workflow fortgesetzt werden, ohne den Inhalt der Website bereitzustellen.
...
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
Umgebungsvariablen
Umgebungsvariablen für Ihren Build können über den Abschnitt env
einer Auftragskonfiguration festgelegt werden.
Weitere Informationen zu den von Oryx verwendeten Umgebungsvariablen finden Sie unter Oryx-Konfiguration.
...
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
Unterstützung für Monorepos
Ein Monorepo ist ein Repository, das Code für mehr als eine Anwendung enthält. Der Workflow verfolgt standardmäßig alle Dateien in einem Repository nach, aber Sie können die Konfiguration so anpassen, dass eine einzelne App als Ziel verwendet wird.
Geben Sie die Pfade in den Abschnitten push
und pull_request
an, um für eine Workflowdatei eine einzelne App als Ziel festzulegen.
Wenn Sie eine Monorepo einrichten, ist jede statische Anwendungskonfiguration nur auf Dateien für eine einzige Anwendung beschränkt. Die verschiedenen Workflowdateien befinden sich gemeinsam im Ordner .github/workflows des Repositorys.
├── .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
Im folgenden Beispiel wird veranschaulicht, wie Sie einen paths
-Knoten zu den Abschnitten push
und pull_request
einer Datei namens azure-static-web-apps-purple-pond.yml hinzufügen.
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
In diesem Beispiel lösen nur Änderungen an den folgenden Dateien einen neuen Build aus:
- alle Dateien im Ordner app1
- alle Dateien im Ordner api1
- Änderungen an der Workflowdatei azure-static-web-apps-purple-pond.yml der App
Um mehr als eine Anwendung in einem einzigen Repository zu unterstützen, erstellen Sie eine separate Workflow-Datei und verknüpfen Sie mit verschiedenen Azure Pipelines.