Usar o fluxo de trabalho de Ações do GitHub para implantar seu site estático no Armazenamento do Azure
Artigo
Comece a usar as Ações do GitHub 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 Ações do GitHub, você poderá implantar automaticamente seu site no Azure a partir do GitHub quando fizer alterações no código do seu site.
Nota
Se você estiver usando os Aplicativos Web Estáticos do Azure, não precisará configurar manualmente um fluxo de trabalho de Ações do GitHub.
Os Aplicativos Web Estáticos do Azure criam automaticamente um fluxo de trabalho de Ações do GitHub para você.
Um repositório GitHub com o código estático do seu site. Se você não tiver uma conta no GitHub, inscreva-se gratuitamente.
Um site estático de trabalho hospedado no Armazenamento do Azure. Saiba como hospedar um site estático no Armazenamento do Azure. Para seguir este exemplo, você também deve implantar a CDN do Azure.
Nota
É comum usar uma rede de distribuição de conteúdo (CDN) para reduzir a latência para seus usuários em todo o mundo e para reduzir o número de transações para 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 instâncias de computação potencialmente caras. 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 este uso --sdk-auth com um aviso de descontinuaçã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 seu aplicativo do Serviço de Aplicativo semelhante ao abaixo. Copie este objeto JSON para mais tarde.
OpenID Connect é um método de autenticação que usa tokens de curta duração. Configurar o OpenID Connect com o GitHub Actions é um processo mais complexo que oferece segurança reforçada.
Este comando produzirá JSON com um appId que é o seu client-id. O objectId é APPLICATION-OBJECT-ID e será usado para criar credenciais federadas com chamadas de API do Graph. Salve o valor para usar como o segredo do AZURE_CLIENT_ID GitHub mais tarde.
Crie uma entidade de serviço. Substitua o $appID pelo appId da sua saída JSON. Este comando gera saída JSON com um diferente objectId será usado na próxima etapa. O novo objectId é o assignee-object-id.
Este comando gera saída JSON com um diferente objectId e será usado na próxima etapa. O novo objectId é o assignee-object-id.
Copie o appOwnerTenantId para usar como um segredo do GitHub para AZURE_TENANT_ID mais tarde.
az ad sp create --id $appId
Crie uma nova 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 assinatura, $resourceGroupName pelo nome do grupo de recursos e $assigneeObjectId pelo gerado assignee-object-id (a ID do objeto principal 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
Execute o seguinte comando para criar uma nova credencial de identidade federada para seu aplicativo Microsoft Entra.
Substitua APPLICATION-OBJECT-ID pelo objectId (gerado durante a criação do aplicativo) para seu aplicativo Microsoft Entra.
Defina um valor para CREDENTIAL-NAME referenciar mais tarde.
Defina o subjectarquivo . O valor disso é definido pelo GitHub dependendo do seu fluxo de trabalho:
Trabalhos em seu ambiente de ações do GitHub: repo:< Organization/Repository >:environment:< Name >
Para Trabalhos não vinculados a um ambiente, inclua o caminho ref para ramificação/tag com base no caminho ref usado para acionar 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 acionados por um evento pull request: 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 Segredos de Segurança > e Ações de variáveis>.
Selecione Novo segredo do repositório.
Cole toda a saída JSON do comando CLI do Azure no campo de valor do segredo. Dê o nome AZURE_CREDENTIALSao segredo .
Selecione Add secret (Adicionar segredo).
Você precisa fornecer a ID do cliente, a ID do locatário e a ID da assinatura do aplicativo para a ação de login. 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 Segredos de Segurança > e Ações de variáveis>.
Selecione Novo segredo do repositório.
Crie segredos para AZURE_CLIENT_ID, AZURE_TENANT_IDe AZURE_SUBSCRIPTION_ID. Use estes valores do seu aplicativo Microsoft Entra para seus segredos do GitHub:
Segredo do GitHub
Aplicação Microsoft Entra
AZURE_CLIENT_ID
ID da aplicação (cliente)
AZURE_TENANT_ID
ID do Diretório (inquilino)
AZURE_SUBSCRIPTION_ID
ID de Subscrição
Salve cada segredo selecionando Adicionar segredo.
Selecione Configurar seu fluxo de trabalho você mesmo.
Exclua tudo após a on: seção do seu arquivo de fluxo de trabalho. Por exemplo, o fluxo de trabalho restante pode ter esta aparência.
name: CI
on:
push:
branches: [ main ]
Renomeie seu fluxo de trabalho Blob storage website CI e adicione as ações de check-out e login. Essas ações verificarão o código do seu site e autenticarão com o Azure usando o segredo do AZURE_CREDENTIALS GitHub que você criou 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 CLI do Azure para carregar seu código no armazenamento de blob e limpar seu ponto de extremidade CDN. Para az storage blob upload-batch, substitua o espaço reservado pelo nome da conta de armazenamento. O script será carregado para o $web contêiner. Para az cdn endpoint purge, substitua os espaços reservados pelo nome do perfil CDN, nome do ponto de extremidade CDN e grupo de recursos. Para acelerar a limpeza da CDN, você pode adicionar a --no-wait opção ao az cdn endpoint purge. Para aumentar a segurança, você também pode adicionar a opção com a chave da --account-key conta de armazenamento.
Conclua seu fluxo de trabalho adicionando uma ação para fazer logout do Azure. Aqui está o fluxo de trabalho concluído. O arquivo aparecerá na .github/workflows pasta do seu repositório.
Selecione Configurar seu fluxo de trabalho você mesmo.
Exclua tudo após a on: seção do seu arquivo de fluxo de trabalho. Por exemplo, o fluxo de trabalho restante pode ter esta aparência.
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 check-out e login. Essas ações verificarão o código do seu site e serão autenticadas com o Azure usando os segredos do GitHub criados 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 CLI do Azure para carregar seu código no armazenamento de blob e limpar seu ponto de extremidade CDN. Para az storage blob upload-batch, substitua o espaço reservado pelo nome da conta de armazenamento. O script será carregado para o $web contêiner. Para az cdn endpoint purge, substitua os espaços reservados pelo nome do perfil CDN, nome do ponto de extremidade CDN e grupo de recursos. Para acelerar a limpeza da CDN, você pode adicionar a --no-wait opção ao az cdn endpoint purge. Para aumentar a segurança, você também pode adicionar a opção com a chave da --account-key conta de armazenamento.
Conclua seu fluxo de trabalho adicionando uma ação para fazer logout do Azure. Aqui está o fluxo de trabalho concluído. O arquivo aparecerá na .github/workflows pasta do seu repositório.
Abra o primeiro resultado para ver os logs detalhados da execução do seu fluxo de trabalho.
Clean up resources (Limpar recursos)
Quando seu site estático e o repositório GitHub não forem mais necessários, limpe os recursos implantados excluindo o grupo de recursos e o repositório GitHub.