Usar o fluxo de trabalho de GitHub Actions para implantar seu site estático no Armazenamento do Azure
Artigo
Introdução às GitHub Actions usando um fluxo de trabalho para implantar um site estático em uma conta de Armazenamento do Azure. Depois de configurar um fluxo de trabalho de GitHub Actions, você poderá implantar automaticamente seu site no Azure pelo GitHub quando fizer alterações no código do site.
Observação
Se você estiver usando Aplicativos Web Estáticos do Azure, não será necessário configurar manualmente um fluxo de trabalho de GitHub Actions.
Os Aplicativos Web Estáticos do Azure criam automaticamente um fluxo de trabalho de GitHub Actions para você.
É comum usar uma CDN (rede de distribuição de conteúdo) para reduzir a latência para seus usuários em todo o mundo e reduzir o número de transações em sua conta de armazenamento. A implantação de conteúdo estático em um serviço de armazenamento baseado em nuvem pode reduzir a necessidade de uma instância de computação potencialmente cara. Para obter mais informações, consulte Padrão de hospedagem de conteúdo estático.
az ad sp create-for-rbac --name "myML" --role contributor \
--scopes /subscriptions/<subscription-id>/resourceGroups/<group-name> \
--json-auth
O parâmetro --json-auth está disponível nas versões da CLI do Azure >= 2.51.0. Versões anteriores a essa usam --sdk-auth com um aviso de substituição.
No exemplo acima, substitua os espaços reservados pela ID da assinatura, nome do grupo de recursos e nome do aplicativo. A saída é um objeto JSON com as credenciais de atribuição de função que fornecem acesso ao aplicativo do Serviço de Aplicativo semelhante ao mostrado abaixo. Copie esse objeto JSON para uso posterior.
O OpenID Connect é um método de autenticação que usa tokens de curta duração. A configuração do OpenID Connect com o GitHub Actions é um processo mais complexo que oferece segurança aprimorada.
Esse comando produzirá um JSON com um appId que consiste em seu client-id. objectId é referente a APPLICATION-OBJECT-ID e será usado para criar credenciais federadas com as chamadas à API do Graph. Salve o valor para usar mais tarde como o segredo AZURE_CLIENT_ID do GitHub.
Crie uma entidade de serviço. Substitua $appID pelo AppID de sua saída JSON. Esse comando gera uma saída JSON com um objectId diferente que será usado na próxima etapa. O novo objectId é o assignee-object-id.
Esse comando gera uma saída JSON com um objectId diferente e será usado na próxima etapa. O novo objectId é o assignee-object-id.
Copie o appOwnerTenantId para usar mais tarde como um segredo do GitHub para AZURE_TENANT_ID.
az ad sp create --id $appId
Crie uma atribuição de função por assinatura e objeto. Por padrão, a atribuição de função será vinculada à sua assinatura padrão. Substitua $subscriptionId pela ID da sua assinatura, $resourceGroupName pelo nome do seu grupo de recursos e $assigneeObjectId pela assignee-object-id gerada (a ID do objeto da entidade de serviço recém-criada).
az role assignment create --role contributor --subscription $subscriptionId --assignee-object-id $assigneeObjectId --assignee-principal-type ServicePrincipal --scope /subscriptions/$subscriptionId/resourceGroups/$resourceGroupName
Substitua APPLICATION-OBJECT-ID pela objectId (gerada ao criar o aplicativo) do aplicativo do Microsoft Entra.
Defina um valor de CREDENTIAL-NAME para referência posterior.
Defina o subject. O valor disso é definido pelo GitHub dependendo do seu fluxo de trabalho:
Trabalhos em seu ambiente do GitHub Actions: repo:< Organization/Repository >:environment:< Name >
Para trabalhos não vinculados a um ambiente, inclua o caminho de referência para ramificação/marca com base no caminho de referência usado para disparar o fluxo de trabalho: repo:< Organization/Repository >:ref:< ref path>. Por exemplo, repo:n-username/ node_express:ref:refs/heads/my-branch ou repo:n-username/ node_express:ref:refs/tags/my-tag.
Para fluxos de trabalho disparados por um evento de solicitação de pull: repo:< Organization/Repository >:pull_request.
az ad app federated-credential create --id <APPLICATION-OBJECT-ID> --parameters credential.json
("credential.json" contains the following content)
{
"name": "<CREDENTIAL-NAME>",
"issuer": "https://token.actions.githubusercontent.com",
"subject": "repo:octo-org/octo-repo:environment:Production",
"description": "Testing",
"audiences": [
"api://AzureADTokenExchange"
]
}
Selecione Segurança > Segredos e variáveis > Ações.
Selecione Novo segredo de repositório.
Cole toda a saída JSON do comando da CLI do Azure no campo valor do segredo. Dê ao segredo o nome AZURE_CREDENTIALS.
Selecione Adicionar segredo.
Você precisa fornecer a ID do cliente, a ID do locatário e a ID da assinatura do seu aplicativo para a ação de logon. Esses valores podem ser fornecidos diretamente no fluxo de trabalho ou podem ser armazenados em segredos do GitHub e referenciados em seu fluxo de trabalho. Salvar os valores como segredos do GitHub é a opção mais segura.
Selecione Segurança > Segredos e variáveis > Ações.
Selecione Novo segredo de repositório.
Crie segredos para AZURE_CLIENT_ID, AZURE_TENANT_ID e AZURE_SUBSCRIPTION_ID. Use esses valores do aplicativo Microsoft Entra para seus segredos do GitHub:
Segredo do GitHub
Aplicativo do Microsoft Entra
AZURE_CLIENT_ID
ID do aplicativo (cliente)
AZURE_TENANT_ID
ID do diretório (locatário)
AZURE_SUBSCRIPTION_ID
ID da assinatura
Salve cada segredo selecionando Adicionar segredo.
Selecione Configurar seu fluxo de trabalho por conta própria.
Exclua tudo depois da seção on: do seu arquivo de fluxo de trabalho. Por exemplo, o fluxo de trabalho restante pode ter a aparência a seguir.
name: CI
on:
push:
branches: [ main ]
Renomeie o fluxo de trabalho Blob storage website CI e adicione as ações de check-out e logon. Essas ações farão o check-out do código do site e a autenticação com o Azure usando o segredo do GitHub AZURE_CREDENTIALS criado anteriormente.
name: Blob storage website CI
on:
push:
branches: [ main ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: azure/login@v1
with:
creds: ${{ secrets.AZURE_CREDENTIALS }}
Use a ação da CLI do Azure para carregar seu código no armazenamento de blobs e para limpar o ponto de extremidade da CDN. Para az storage blob upload-batch, substitua o espaço reservado pelo nome da sua conta de armazenamento. O script será carregado no contêiner $web. Para az cdn endpoint purge, substitua os espaços reservados pelo nome do perfil da CDN, nome do ponto de extremidade da CDN e grupo de recursos. Para acelerar a limpeza da CDN, você pode adicionar a opção --no-wait a az cdn endpoint purge. Para aumentar a segurança, adicione também a opção --account-key com a chave de conta de armazenamento.
Conclua o fluxo de trabalho adicionando uma ação para fazer logoff do Azure. Este é o fluxo de trabalho concluído. O arquivo será exibido na pasta .github/workflows do seu repositório.
Selecione Configurar seu fluxo de trabalho por conta própria.
Exclua tudo depois da seção on: do seu arquivo de fluxo de trabalho. Por exemplo, o fluxo de trabalho restante pode ter a aparência a seguir.
name: CI with OpenID Connect
on:
push:
branches: [ main ]
Adicione uma seção de permissões.
name: CI with OpenID Connect
on:
push:
branches: [ main ]
permissions:
id-token: write
contents: read
Adicione ações de fazer check-out e logon. Essas ações farão o check-out do código do site e a autenticação com o Azure usando os segredos do GitHub criado anteriormente.
name: CI with OpenID Connect
on:
push:
branches: [ main ]
permissions:
id-token: write
contents: read
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: azure/login@v1
with:
client-id: ${{ secrets.AZURE_CLIENT_ID }}
tenant-id: ${{ secrets.AZURE_TENANT_ID }}
subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
Use a ação da CLI do Azure para carregar seu código no armazenamento de blobs e para limpar o ponto de extremidade da CDN. Para az storage blob upload-batch, substitua o espaço reservado pelo nome da sua conta de armazenamento. O script será carregado no contêiner $web. Para az cdn endpoint purge, substitua os espaços reservados pelo nome do perfil da CDN, nome do ponto de extremidade da CDN e grupo de recursos. Para acelerar a limpeza da CDN, você pode adicionar a opção --no-wait a az cdn endpoint purge. Para aumentar a segurança, adicione também a opção --account-key com a chave de conta de armazenamento.
Conclua o fluxo de trabalho adicionando uma ação para fazer logoff do Azure. Este é o fluxo de trabalho concluído. O arquivo será exibido na pasta .github/workflows do seu repositório.
Abra o primeiro resultado para ver os logs detalhados da execução do fluxo de trabalho.
Limpar os recursos
Quando o site estático e o repositório do GitHub não forem mais necessários, limpe os recursos implantados excluindo o grupo de recursos e seu repositório do GitHub.