Configuração de build para Aplicativos Web Estáticos do Azure
A configuração de compilação dos Aplicativos Web Estáticos do Azure usa o GitHub Actions ou o Azure Pipelines. Cada site tem um arquivo de configuração YAML que controla a maneira como um site é criado e implantado. Este artigo explica a estrutura e as opções do arquivo.
A tabela a seguir lista as definições de configuração disponíveis.
Propriedade | Descrição | Obrigatório |
---|---|---|
app_location |
Essa pasta contém o código-fonte para o aplicativo de front-end. O valor está relacionado à raiz do repositório GitHub e à pasta de trabalho atual no Azure DevOps. Quando usado com skip_app_build: true , esse valor será o local de saída de compilação do aplicativo. |
Yes |
api_location |
Essa pasta que contém o código-fonte para o aplicativo de API. O valor está relacionado à raiz do repositório GitHub e à pasta de trabalho atual no Azure DevOps. Quando usado com skip_api_build: true , esse valor será o local de saída da compilação da API. |
Não |
output_location |
Se o aplicativo Web executa uma etapa de build, o local de saída é a pasta em que os arquivos públicos são gerados. Para a maioria dos projetos, o output_location está relacionado ao app_location . No entanto, para projetos .NET, o local é relativo à pasta de saída. |
Não |
app_build_command |
Para aplicativos Node.js, você pode definir um comando personalizado para criar o aplicativo de conteúdo estático. Por exemplo, para configurar uma compilação de produção para um aplicativo Angular, crie um script npm chamado build-prod para executar ng build --prod e insira-o npm run build-prod como o comando personalizado. Se for deixado em branco, o fluxo de trabalho tentará executar os comandos npm run build ou npm run build:azure . |
Não |
api_build_command |
Para aplicativos Node.js, você pode definir um comando personalizado para criar o aplicativo de API do Azure Functions. | Não |
skip_app_build |
Defina o valor como true para ignorar a compilação do aplicativo de front-end. |
Não |
skip_api_build |
Defina o valor como true para ignorar a compilação das funções da API. |
Não |
cwd (Azure Pipelines somente) |
Caminho absoluto para a pasta de trabalho. Assume o padrão de $(System.DefaultWorkingDirectory) . |
Não |
build_timeout_in_minutes |
De definir esse valor para personalizar o tempo de build. Assume o padrão de 15 . |
Não |
Com essas definições, você pode configurar o GitHub Actions ou Azure Pipelines para executar a CI/CD (integração contínua e entrega contínua) para o aplicativo Web estático.
Nome e local do arquivo
A ação do GitHub gera o arquivo de configuração e é armazenada na pasta .github/workflows, nomeada usando o seguinte formato: azure-static-web-apps-<RANDOM_NAME>.yml
.
Por padrão, o arquivo de configuração é armazenado na raiz do repositório com o nome azure-pipelines.yml
.
Segurança
Você pode escolher entre duas políticas de autorização de implantação diferentes para proteger sua configuração de build. Os Aplicativos Web Estáticos dão suporte ao uso de um token de implantação do Azure (recomendado) ou a um token de acesso do GitHub.
Use as seguintes etapas para definir a política de autorização de implantação em seu aplicativo:
Novos aplicativos: ao criar seu aplicativo Web estático, na guia Configuração de implantação, faça uma seleção para a Política de autorização de implantação.
Aplicativos existentes: para atualizar um aplicativo existente, acesse Configurações>Configuração>Configuração de implantação e faça uma seleção para a Política de autorização de implantação.
Configuração de compilação
A configuração de exemplo a seguir monitora as alterações do repositório. À medida que as confirmações são enviadas para o branch main
, o aplicativo é criado na pasta app_location
e os arquivos no output_location
são disponibilizados para a Web pública. Além disso, o aplicativo na pasta api está disponível no caminho do api
site.
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)
Nesta configuração:
- As confirmações do branch
main
são monitoradas. - O
app_location
aponta para a pastasrc
que contém os arquivos de origem para o aplicativo Web. Esse valor é relativo ao diretório de trabalho (cwd
). Para defini-lo como o diretório de trabalho, use/
. - O
api_location
aponta para a pastaapi
que contém o aplicativo Azure Functions para os pontos de extremidade de API do site. Esse valor é relativo ao diretório de trabalho (cwd
). Para defini-lo como o diretório de trabalho, use/
. - O
output_location
aponta para a pastapublic
que contém a versão final dos arquivos de origem do aplicativo. Esse valor é relativo aapp_location
. Para projetos .NET, o local é relativo à pasta de saída. - O
cwd
é um caminho absoluto que aponta para o diretório de trabalho. O padrão é$(System.DefaultWorkingDirectory)
. - A variável
$(deployment_token)
aponta para o token de implantação gerado do Azure DevOps.
Observação
app_location
e api_location
devem ser relativos ao diretório de trabalho (cwd
) e devem ser subdiretórios em 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"
Nesta configuração:
- As confirmações do branch
main
são monitoradas. - Um fluxo de trabalho do GitHub Actions é disparado quando uma solicitação de pull no branch
main
é: aberta, sincronizada, reaberta ou fechada. - O
build_and_deploy_job
é executado quando você envia as confirmações ou abre uma solicitação de pull em relação ao branch listado na propriedadeon
. - O
app_location
aponta para a pastasrc
que contém os arquivos de origem para o aplicativo Web. Para definir esse valor como a raiz do repositório, use/
. - O
api_location
aponta para a pastaapi
que contém o aplicativo Azure Functions para os pontos de extremidade de API do site. Para definir esse valor como a raiz do repositório, use/
. - O
output_location
aponta para a pastapublic
que contém a versão final dos arquivos de origem do aplicativo. Ele é relativo aapp_location
. Para projetos .NET, o local está relacionado à pasta de saída de publicação.
Não altere os valores de repo_token
, action
e azure_static_web_apps_api_token
, pois são definidos para você pelos Aplicativos Web Estáticos do Azure.
O trabalho Fechar Solicitação de Pull fecha automaticamente a pull request que disparou a compilação e a implantação. Esse trabalho opcional não é necessário para que o processo funcione.
Quando uma pull request é aberta, o Aplicativos Web Estáticos do Azure no GitHub Actions cria e implanta o aplicativo em um ambiente de preparação. Depois disso, o trabalho Fechar Pull Request verifica se a pull request ainda está aberta e a fecha com uma mensagem de conclusão.
Esse trabalho ajuda a manter seu fluxo de trabalho de pull request organizado e evita pull requests obsoletas. Com o runtime fechando automaticamente a pull request, o seu repositório permanece atualizado e a sua equipe é notificada sobre o status.
O trabalho Fechar Pull Request faz parte do fluxo de trabalho do GitHub Actions dos Aplicativos Web Estáticos do Azure, fechando a pull request depois que ela é mesclada. A ação Azure/static-web-apps-deploy
implanta o aplicativo no Aplicativos Web Estáticos do Azure, exigindo o azure_static_web_apps_api_token
para autenticação.
Comandos de compilação personalizados
Para aplicativos Node.js, você pode fazer um controle refinado sobre quais comandos são executados durante o processo de build do aplicativo ou da API. O exemplo a seguir mostra como definir o build com valores para app_build_command
e api_build_command
.
Observação
No momento, você só pode definir app_build_command
e api_build_command
para builds Node.js.
Para especificar a versão de Node.js, use o campo engines
no arquivo 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)
Ignorar criação de aplicativo de front-end
Se você precisar de controle total do build para o aplicativo de front-end, pode ignorar o build automático e implantar o aplicativo criado em uma etapa anterior.
Para ignorar o build do aplicativo de front-end:
- Defina
app_location
como o local dos arquivos que você deseja implantar. - Definir
skip_app_build
paratrue
. - Defina
output_location
como uma cadeia de caracteres vazia (''
).
Observação
Certifique-se de ter o arquivo staticwebapp.config.json
copiado também no diretório de saída.
...
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)
Ignorar a criação da API
Se você quiser ignorar a compilação da API, poderá ignorar a compilação automática e implantar a API criada em uma etapa anterior.
Etapas para ignorar a criação da API:
No arquivo staticwebapp.config.json, defina
apiRuntime
como o runtime e a versão corretos. Consulte Configurar Aplicativos Web Estáticos do Azure para a lista de runtimes e versões com suporte.{ "platform": { "apiRuntime": "node:16" } }
Definir
skip_api_build
paratrue
.Defina
api_location
para a pasta que contém o aplicativo de API criado para implantação. Esse caminho é relativo à raiz do repositório em GitHub Actions ecwd
no 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)
Estender o tempo de build
Por padrão, os builds do aplicativo e da API são limitados a 15 minutos. Você pode estender o tempo de build definindo a propriedade 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)
Executar fluxo de trabalho sem segredos de implantação
Às vezes, você precisa que seu fluxo de trabalho continue a ser processado mesmo quando alguns segredos estiverem ausentes. Para configurar o fluxo de trabalho para continuar sem segredos definidos, defina a variável de ambiente SKIP_DEPLOY_ON_MISSING_SECRETS
como true
.
Quando habilitado, esse recurso permite que o fluxo de trabalho continue sem implantar o conteúdo do site.
...
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
Variáveis de ambiente
É possível definir variáveis de ambiente para sua compilação por meio da env
seção de configuração de um trabalho.
Para obter mais informações sobre as variáveis de ambiente usadas pelo Oryx, consulte Configuração 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
Suporte a mono repositório
Um mono repositório é um repositório que contém código para mais de um aplicativo. Por padrão, o fluxo de trabalho rastreia todos os arquivos em um repositório, mas é possível ajustar a configuração para direcionar um único aplicativo.
Para direcionar um arquivo de fluxo de trabalho para um único aplicativo, deve-se especificar caminhos nas seções push
e pull_request
.
Ao configurar um monorepo, cada aplicativo estático tem seu próprio arquivo de configuração com escopo definido como somente arquivos em um único aplicativo. Os diferentes arquivos de fluxo de trabalho residem lado a lado na pasta .github/workflows do repositório.
├── .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
O exemplo a seguir demonstra como adicionar um paths
nó a push
e pull_request
seções de um arquivo chamado 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
Nesse exemplo, somente as alterações feitas nos seguintes arquivos disparam um novo build:
- Quaisquer arquivos dentro da pasta App1
- Quaisquer arquivos dentro da pasta App1
- Alterações no arquivo de fluxo de trabalho azure-static-web-apps-purple-pond. yml do aplicativo
Para dar suporte a mais de um aplicativo em um único repositório, crie um arquivo de fluxo de trabalho separado e o associe a um Azure Pipelines diferente.