Az Azure Static Web Apps buildkonfigurációja
Az Azure Static Web Apps buildkonfigurációja a GitHub Actionst vagy az Azure Pipelinest használja. Minden hely rendelkezik egy YAML-konfigurációs fájllal, amely szabályozza a helyek létrehozásának és üzembe helyezésének módját. Ez a cikk a fájl felépítését és beállításait ismerteti.
Az alábbi táblázat az elérhető konfigurációs beállításokat sorolja fel.
Tulajdonság | Leírás | Kötelező |
---|---|---|
app_location |
Ez a mappa tartalmazza az előtérbeli alkalmazás forráskódját. Az érték a GitHub adattárgyökéréhez és az Azure DevOps aktuális munkamappájához képest van. A használat során skip_app_build: true ez az érték az alkalmazás buildkimeneti helye. |
Igen |
api_location |
Ez a mappa tartalmazza az API-alkalmazás forráskódját. Az érték a GitHub adattárgyökéréhez és az Azure DevOps aktuális munkamappájához képest van. A használat során skip_api_build: true ez az érték az API buildkimeneti helye. |
Nem |
output_location |
Ha a webalkalmazás buildelési lépést futtat, a kimeneti hely az a mappa, ahol a nyilvános fájlok létrejönnek. A legtöbb projekt esetében a output_location app_location . A .NET-projektek esetében azonban a hely a kimeneti mappához képest van. |
Nem |
app_build_command |
Az Node.js alkalmazásokhoz megadhat egy egyéni parancsot a statikus tartalomalkalmazás létrehozásához. Ha például éles buildet szeretne konfigurálni egy Angular-alkalmazáshoz, hozzon létre egy npm-szkriptet, amely az egyéni parancsként való futtatásra ng build --prod és beírásra npm run build-prod szolgálbuild-prod . Ha üresen marad, a munkafolyamat megpróbálja futtatni a npm run build parancsokat.npm run build:azure |
Nem |
api_build_command |
Node.js alkalmazásokhoz egyéni parancsot is megadhat az Azure Functions API-alkalmazás létrehozásához. | Nem |
skip_app_build |
Állítsa be az értéket úgy, hogy true kihagyja az előtér-alkalmazás készítését. |
Nem |
skip_api_build |
Állítsa be az értéket úgy, hogy true hagyja ki az API-függvények készítését. |
Nem |
cwd (csak Azure Pipelines) |
A munkamappa abszolút elérési útja. Alapértelmezett érték: $(System.DefaultWorkingDirectory) . |
Nem |
build_timeout_in_minutes |
Állítsa be ezt az értéket a build időtúllépésének testreszabásához. Alapértelmezett érték: 15 . |
Nem |
Ezekkel a beállításokkal beállíthatja a GitHub Actionst vagy az Azure Pipelinest , hogy folyamatos integrációt/folyamatos kézbesítést (CI/CD) futtasson a statikus webalkalmazáshoz.
Fájlnév és hely
A GitHub-művelet létrehozza a konfigurációs fájlt, és a .github/workflows mappában tárolja, a következő formátummal elnevezve: azure-static-web-apps-<RANDOM_NAME>.yml
.
Alapértelmezés szerint a konfigurációs fájl az adattár gyökérkönyvtárában lesz tárolva a névvel azure-pipelines.yml
.
Biztonság
A buildkonfiguráció biztonságossá tételéhez két különböző üzembehelyezési engedélyezési szabályzat közül választhat. A Static Web Apps támogatja az Azure üzembehelyezési jogkivonat (ajánlott) vagy a GitHub hozzáférési jogkivonat használatát.
Az alábbi lépésekkel állíthatja be az üzembehelyezési engedélyezési szabályzatot az alkalmazásban:
Új alkalmazások: A statikus webalkalmazás létrehozásakor a Központi telepítés konfiguráció lapján válasszon az üzembe helyezési engedélyezési szabályzathoz.
Meglévő alkalmazások: Egy meglévő alkalmazás frissítéséhez lépjen a Beállítások>konfigurációjának>üzembehelyezési konfigurációjához, és válasszon ki egy beállítást az üzembehelyezési engedélyezési szabályzathoz.
Buildelési konfiguráció
Az alábbi mintakonfiguráció figyeli a módosítások adattárát. A véglegesítések leküldése az main
ágra történik, az alkalmazás a app_location
mappából jön létre, és a output_location
fájlokat a nyilvános weben kézbesítik. Emellett az API-mappában lévő alkalmazás a webhely api
elérési útja alatt érhető el.
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)
Ebben a konfigurációban:
- Az
main
ágat a véglegesítések figyelik. - A
app_location
webalkalmazás forrásfájljait tartalmazó mappára mutatsrc
. Ez az érték a munkakönyvtárhoz (cwd
) képest van. A munkakönyvtárra való beállításhoz használja a következőt/
: . - A
api_location
hely API-végpontjaihoz tartozó Azure Functions-alkalmazást tartalmazó mappára mutatapi
. Ez az érték a munkakönyvtárhoz (cwd
) képest van. A munkakönyvtárra való beállításhoz használja a következőt/
: . - Az
output_location
alkalmazás forrásfájljainak végleges verzióját tartalmazó mappára mutatpublic
. Ez az érték a következőhöz viszonyítvaapp_location
van: . A .NET-projektek esetében a hely a kimeneti mappához viszonyítva van. - Ez
cwd
egy abszolút elérési út, amely a munkakönyvtárra mutat. Alapértelmezés szerint a .$(System.DefaultWorkingDirectory)
- A
$(deployment_token)
változó a létrehozott Azure DevOps üzembehelyezési jogkivonatra mutat.
Feljegyzés
app_location
és api_location
a munkakönyvtárhoz (cwd
) viszonyítva kell lenniük, és alkönyvtáraknak kell lenniük a .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"
Ebben a konfigurációban:
- Az
main
ágat a véglegesítések figyelik. - A GitHub Actions-munkafolyamat akkor aktiválódik, ha az
main
ágon lekéréses kérelem van megnyitva, szinkronizálva, újra megnyitva vagy bezárva. - A
build_and_deploy_job
végrehajtás akkor történik, amikor leküldéses véglegesítést hajt végre, vagy lekéréses kérelmet nyit meg aon
tulajdonságban felsorolt ágon. - A
app_location
webalkalmazás forrásfájljait tartalmazó mappára mutatsrc
. Ha ezt az értéket az adattár gyökerére szeretné állítani, használja a következőt/
: . - A
api_location
hely API-végpontjaihoz tartozó Azure Functions-alkalmazást tartalmazó mappára mutatapi
. Ha ezt az értéket az adattár gyökerére szeretné állítani, használja a következőt/
: . - Az
output_location
alkalmazás forrásfájljainak végleges verzióját tartalmazó mappára mutatpublic
. Ehhez képestapp_location
. .NET-projektek esetén a hely a közzétételi kimeneti mappához viszonyítva van.
Ne módosítsa az Azure Static Web Apps által beállított értékeketrepo_token
action
azure_static_web_apps_api_token
.
A Lekéréses kérelem bezárása feladat automatikusan bezárja a buildet és az üzembe helyezést kiváltó lekéréses kérelmet. Ez az opcionális feladat nem szükséges a folyamat működéséhez.
Egy lekéréses kérelem megnyitásakor az Azure Static Web Apps GitHub Action létrehozza és üzembe helyezi az alkalmazást egy átmeneti környezetben. Ezt követően a Lekéréses kérelem bezárása feladat ellenőrzi, hogy a lekéréses kérelem még nyitva van-e, és befejező üzenettel zárja-e be.
Ez a feladat segít a lekéréses kérelmek munkafolyamatának rendszerezésében, és megakadályozza az elavult lekéréses kérelmeket. A lekéréses kérelem automatikus bezárásával az adattár naprakész marad, és a csapat értesítést kap az állapotról.
A Lekéréses kérelem bezárása feladat az Azure Static Web Apps GitHub Actions munkafolyamatának része, amely az egyesítése után bezárja a lekéréses kérelmet. A Azure/static-web-apps-deploy
művelet üzembe helyezi az alkalmazást az Azure Static Web Appsben, amelyhez hitelesítés azure_static_web_apps_api_token
szükséges.
Egyéni buildelési parancsok
Node.js alkalmazások esetében részletesen szabályozhatja, hogy mely parancsok futnak az alkalmazás- vagy API-buildelési folyamat során. Az alábbi példa bemutatja, hogyan definiálhatja a buildet a következő értékekkel app_build_command
: és api_build_command
.
Feljegyzés
Jelenleg csak Node.js buildeket definiálhat app_build_command
és api_build_command
használhat.
A Node.js verzió megadásához használja a engines
fájlban lévő package.json
mezőt.
...
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)
Előtérbeli alkalmazás létrehozásának kihagyása
Ha az előtér-alkalmazás buildjének teljes körű vezérlésére van szüksége, megkerülheti az automatikus buildelést, és üzembe helyezheti az előző lépésben létrehozott alkalmazást.
Az előtérbeli alkalmazás létrehozásának kihagyása:
- Állítsa be
app_location
az üzembe helyezni kívánt fájlok helyét. - Állítsa a
skip_app_build
elemettrue
értékre. - Állítsa be
output_location
üres sztringre (''
).
Feljegyzés
Győződjön meg arról, hogy a staticwebapp.config.json
fájlt is átmásolta a kimeneti könyvtárba.
...
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)
Az API létrehozásának kihagyása
Ha ki szeretné hagyni az API készítését, megkerülheti az automatikus buildelést, és üzembe helyezheti az előző lépésben létrehozott API-t.
Az API létrehozásának kihagyása:
A staticwebapp.config.json fájlban állítsa be
apiRuntime
a megfelelő futtatókörnyezetet és verziót. Tekintse meg az Azure Static Web Apps konfigurálását a támogatott futtatókörnyezetek és verziók listájához.{ "platform": { "apiRuntime": "node:16" } }
Állítsa a
skip_api_build
elemettrue
értékre.Állítsa az
api_location
üzembe helyezendő beépített API-alkalmazást tartalmazó mappára. Ez az elérési út a GitHub Actionsben éscwd
az Azure Pipelinesban található adattár gyökeréhez képest van.
...
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)
Build időtúllépésének meghosszabbítása
Alapértelmezés szerint az alkalmazás- és API-buildek 15 percre korlátozódnak. A tulajdonság beállításával meghosszabbíthatja a build időtúllépését build_timeout_in_minutes
.
...
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)
Munkafolyamat futtatása üzembehelyezési titkos kulcsok nélkül
Néha szükség van arra, hogy a munkafolyamat továbbra is feldolgozható legyen, még akkor is, ha néhány titkos kulcs hiányzik. Ha úgy szeretné konfigurálni a munkafolyamatot, hogy meghatározott titkos kulcsok nélkül folytassa a műveletet, állítsa a környezeti változót a SKIP_DEPLOY_ON_MISSING_SECRETS
következőre true
: .
Ha engedélyezve van, ez a funkció lehetővé teszi a munkafolyamat folytatását a webhely tartalmának üzembe helyezése nélkül.
...
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
Környezeti változók
A build környezeti változóit a env
feladat konfigurációjának szakaszán keresztül állíthatja be.
Az Oryx által használt környezeti változókkal kapcsolatos további információkért lásd az Oryx konfigurációját.
...
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
Monorepo-támogatás
A monorepó egy olyan adattár, amely egynél több alkalmazás kódját tartalmazza. Alapértelmezés szerint a munkafolyamat nyomon követi az adattár összes fájlját, de a konfigurációt egyetlen alkalmazás megcélzásához módosíthatja.
Ha egy munkafolyamat-fájlt egyetlen alkalmazásra szeretne célozni, meg kell adnia az útvonalakat a szakaszokban és pull_request
a push
szakaszokban.
Monorepó beállításakor minden statikus alkalmazáskonfiguráció csak egyetlen alkalmazás fájljaira terjed ki. A különböző munkafolyamat-fájlok egymás mellett élnek az adattár .github/workflows mappájában.
├── .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
Az alábbi példa bemutatja, hogyan adhat hozzá csomópontot paths
egy push
azure-static-web-apps-purple-pond.yml nevű fájlhoz és pull_request
-szakaszokhoz.
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
Ebben a példában csak a következő fájlok módosításai aktiválnak új buildet:
- Az app1 mappában lévő fájlok
- Az api1 mappában lévő fájlok
- Az alkalmazás azure-static-web-apps-purple-pond.yml munkafolyamat-fájljának módosítása
Ha egyetlen adattárban egynél több alkalmazást szeretne támogatni, hozzon létre egy külön munkafolyamat-fájlt, és társítsa azt különböző Azure Pipelines-folyamatokhoz.