Configuración de compilación para Azure Static Web Apps
La configuración de compilación de Azure Static Web Apps utiliza Acciones de GitHub o Azure Pipelines. Cada sitio tiene un archivo de configuración YAML que controla cómo se construye e implementa. En este artículo se explican la estructura y las opciones del archivo.
En la tabla siguiente se enumeran los valores de configuración disponibles.
Propiedad | Descripción | Obligatorio |
---|---|---|
app_location |
Esta carpeta contiene el código fuente de la aplicación de front-end. El valor es relativo a la raíz del repositorio en GitHub y la carpeta de trabajo actual en Azure DevOps. Cuando se usa con skip_app_build: true , este valor es la ubicación de salida de compilación de la aplicación. |
Sí |
api_location |
Esta carpeta contiene el código fuente de la aplicación de API. El valor es relativo a la raíz del repositorio en GitHub y la carpeta de trabajo actual en Azure DevOps. Cuando se usa con skip_api_build: true , este valor es la ubicación de salida de compilación de la API. |
No |
output_location |
Si la aplicación web ejecuta un paso de compilación, la ubicación de salida es la carpeta donde se generan los archivos públicos. Para la mayoría de los proyectos, output_location es relativo a app_location . Pero para los proyectos de .NET, la ubicación es relativa a la carpeta de salida. |
No |
app_build_command |
Para las aplicaciones de Node.js, puede definir un comando personalizado para compilar la aplicación de contenido estático. Por ejemplo, para configurar una compilación de producción para una aplicación angular, cree un script NPM denominado build-prod para ejecutar ng build --prod y escriba npm run build-prod como comando personalizado. Si se deja en blanco, el flujo de trabajo intenta ejecutar los comandos npm run build o npm run build:azure . |
No |
api_build_command |
Para las aplicaciones de Node.js, puede definir un comando personalizado para compilar la aplicación de API de Azure Functions. | No |
skip_app_build |
Establezca el valor en true para omitir la creación de la aplicación de front-end. |
No |
skip_api_build |
Establezca el valor en true para omitir la creación de las funciones de la API. |
No |
cwd (Solo Azure Pipelines) |
Ruta de acceso absoluta a la carpeta de trabajo. Su valor predeterminado es $(System.DefaultWorkingDirectory) . |
No |
build_timeout_in_minutes |
Establezca este valor para personalizar el tiempo de espera de compilación. Su valor predeterminado es 15 . |
No |
Con estos valores, puede configurar Acciones de GitHub o Azure Pipelines a fin de ejecutar la integración continua o entrega continua (CI/CD) para la aplicación web estática.
Nombre y ubicación del archivo
La Acción de GitHub genera el archivo de configuración, que se almacena en la carpeta .github/workflows, denominada con el formato siguiente: azure-static-web-apps-<RANDOM_NAME>.yml
.
De forma predeterminada, el archivo de configuración se almacena en la raíz del repositorio con el nombre azure-pipelines.yml
.
Seguridad
Puede elegir entre dos directivas de autorización de implementación diferentes para proteger la configuración de compilación. Static Web Apps admite el uso de un token de implementación de Azure (recomendado) o un token de acceso de GitHub.
Siga estos pasos para establecer la directiva de autorización de implementación en la aplicación:
Aplicaciones nuevas: al crear la aplicación web estática, en la pestaña Configuración de implementación, realice una selección para la Directiva de autorización de implementación.
Aplicaciones existentes: para actualizar una aplicación existente, vaya a Configuración>Configuración>Configuración de implementación y realice una selección para la Directiva de autorización de implementación.
Configuración de compilación
La siguiente configuración de ejemplo supervisa los cambios en el repositorio. A medida que se insertan confirmaciones en la rama main
, la aplicación se compila desde la carpeta app_location
y los archivos de output_location
se sirven a la web pública. Además, la aplicación de la carpeta api está disponible en la ruta api
del sitio.
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)
En esta configuración:
- La rama
main
se supervisa en busca de confirmaciones. app_location
apunta a la carpetasrc
que contiene los archivos de código fuente de la aplicación web. Este valor es relativo al directorio de trabajo (cwd
). Para establecerlo en el directorio de trabajo, use/
.api_location
apunta a la carpetaapi
que contiene la aplicación de Azure Functions para los puntos de conexión de API del sitio. Este valor es relativo al directorio de trabajo (cwd
). Para establecerlo en el directorio de trabajo, use/
.output_location
apunta a la carpetapublic
que contiene la versión final de los archivos de código fuente de la aplicación. Este valor es relativo aapp_location
. En los proyectos de .NET, la ubicación es relativa a la carpeta de salida.cwd
es una ruta de acceso absoluta que apunta al directorio de trabajo. Se establece de forma predeterminada en$(System.DefaultWorkingDirectory)
.- La variable
$(deployment_token)
apunta al token de implementación generado por Azure DevOps.
Nota:
app_location
y api_location
deben ser relativos al directorio de trabajo (cwd
) y deben ser subdirectorios de 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"
En esta configuración:
- La rama
main
se supervisa en busca de confirmaciones. - Cuando una solicitud de incorporación de cambios se abre, se sincroniza, se vuelve a abrir o se cierra en la rama
main
, se desencadena un flujo de trabajo de Acciones de GitHub. build_and_deploy_job
se ejecuta al insertar confirmaciones o abrir una solicitud de incorporación de cambios en la rama indicada en la propiedadon
.app_location
apunta a la carpetasrc
que contiene los archivos de código fuente de la aplicación web. Para establecer este valor en la raíz del repositorio, use/
.api_location
apunta a la carpetaapi
que contiene la aplicación de Azure Functions para los puntos de conexión de API del sitio. Para establecer este valor en la raíz del repositorio, use/
.output_location
apunta a la carpetapublic
que contiene la versión final de los archivos de código fuente de la aplicación. Es relativo aapp_location
. En los proyectos de .NET, la ubicación es relativa a la carpeta de salida de publicación.
No cambie los valores de repo_token
, action
y azure_static_web_apps_api_token
, ya que Azure Static Web Apps los establece de forma automática.
El trabajo Cerrar solicitud de cambios cierra automáticamente la solicitud de cambios que desencadenó la compilación y la implementación. Este trabajo opcional no es necesario para que el proceso funcione.
Cuando se abre una solicitud de cambios, la Acción de GitHub de Azure Static Web Apps compila e implementa la aplicación en un entorno de ensayo. Después, el trabajo Cerrar solicitud de cambios comprueba si la solicitud de cambios sigue abierta y la cierra con un mensaje de finalización.
Este trabajo ayuda a mantener el flujo de trabajo de solicitud de cambios organizado y evita solicitudes de cambios obsoletas. Al cerrar automáticamente la solicitud de cambios, el repositorio permanece actualizado y el equipo recibe una notificación del estado.
El trabajo Cerrar solicitud de incorporación de cambios forma parte del flujo de trabajo de Acciones de GitHub de Azure Static Web Apps, cerrando la solicitud e cambios después de combinarla. La acción Azure/static-web-apps-deploy
implementa la aplicación en Azure Static Web Apps, lo que requiere azure_static_web_apps_api_token
para autenticación.
Comandos de compilación personalizados
En las aplicaciones de Node.js, puede controlar con precisión los comandos que se ejecutan durante el proceso de compilación de la aplicación o la API. En el ejemplo siguiente se muestra cómo definir la compilación con valores para app_build_command
y api_build_command
.
Nota:
Actualmente, solo puede definir app_build_command
y api_build_command
para compilaciones de Node.js.
Para especificar la versión de Node.js, use el campo engines
del archivo package.json
.
...
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)
Omisión de la compilación de una aplicación front-end
Si necesita control total de la compilación para la aplicación de front-end, puede omitir la compilación automática e implementar la aplicación compilada en un paso anterior.
Para omitir la compilación de la aplicación de front-end:
- Establezca
app_location
en la ubicación de los archivos que quiera implementar. - Establezca
skip_app_build
entrue
. - Establezca
output_location
en una cadena vacía (''
).
Nota:
Asegúrese de que el archivo staticwebapp.config.json
se haya copiado también en el directorio 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)
Omisión de la compilación de la API
Si quiere omitir la compilación de la API, puede omitir la compilación automática e implementar la API compilada en un paso anterior.
Pasos para omitir la compilación de la API:
En el archivo staticwebapp.config.json, establezca
apiRuntime
en el runtime y la versión correctos. Consulte Configuración de Azure Static Web Apps para ver la lista de runtimes y versiones admitidos.{ "platform": { "apiRuntime": "node:16" } }
Establezca
skip_api_build
entrue
.Establezca
api_location
en la carpeta que contiene la aplicación de API compilada que se va a implementar. Esta ruta de acceso es relativa a la raíz del repositorio en Acciones de GitHub ycwd
en 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)
Ampliación del tiempo de espera de compilación
De manera predeterminada, las compilaciones de API y aplicación están limitadas a 15 minutos. Puede extender el tiempo de espera de compilación si establece la propiedad 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)
Ejecución del flujo de trabajo sin secretos de implementación
A veces, necesita que el flujo de trabajo continúe procesando incluso cuando faltan algunos secretos. Para configurar el flujo de trabajo para continuar sin secretos definidos, establezca la variable de entorno SKIP_DEPLOY_ON_MISSING_SECRETS
en true
.
Cuando está habilitada, esta característica permite que el flujo de trabajo continúe sin implementar el contenido del sitio.
...
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
Variables de entorno
Puede establecer variables de entorno para la compilación a través de la sección env
de la configuración de un trabajo.
Para más información sobre las variables de entorno usadas por Oryx, consulte Configuración de 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
Compatibilidad con monorrepositorios
Un monorrepositorio es un repositorio que contiene código para más de una aplicación. De manera predeterminada, el flujo de trabajo realiza el seguimiento de todos los archivos de un repositorio, pero se puede ajustar la configuración para que el destino sea una sola aplicación.
Para que un archivo de flujo de trabajo tenga como destino una única aplicación, especifique las rutas de acceso en las secciones push
y pull_request
.
Al configurar un repositorio único, el ámbito de configuración de cada aplicación se limita exclusivamente a los archivos de una sola aplicación. Los distintos archivos de flujo de trabajo residen en paralelo en la carpeta .github/workflows del repositorio.
├── .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
En el ejemplo siguiente se muestra cómo agregar un nodo paths
a las secciones push
y pull_request
de un archivo denominado 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
En este ejemplo, solo los cambios realizados en los siguientes archivos desencadenan una nueva compilación:
- Cualquier archivo dentro de la carpeta app1
- Cualquier archivo dentro de la carpeta api1
- Cambios en el archivo de flujo de trabajo azure-static-web-apps-purple-pond.yml de la aplicación
Para admitir más de una aplicación en un único repositorio, cree un archivo de flujo de trabajo independiente y asócielo a otras instancias de Azure Pipelines.