Publicar direto do Kudu ou via zip deploy manual funciona, mas não escala — cada deploy vira um comando pra lembrar e nenhum rastro de quem publicou o quê. GitHub Actions resolve isso: todo push na branch certa dispara o deploy sozinho, com histórico completo no próprio repositório.
Neste guia rápido você vai configurar o GitHub Actions com um único comando de Azure CLI — usando OIDC (sem publish profile, sem segredo de longa duração armazenado no GitHub) — e entender o workflow YAML gerado automaticamente.
Sumário
- OIDC vs. publish profile: por que a diferença importa
- Configurando com um comando
- O que o comando gera no repositório
- Publicando num slot em vez de produção
- Troubleshooting comum
- Conclusão
- Referências oficiais
OIDC vs. publish profile: por que a diferença importa
O jeito mais antigo de autenticar o GitHub Actions no Azure é baixar o publish profile do App Service e colar como secret no repositório — funciona, mas é uma credencial de longa duração: se vazar, continua válida até você trocá-la manualmente. O OIDC (OpenID Connect) troca isso por confiança federada: o GitHub prova pro Azure AD, a cada execução, que aquele workflow específico daquele repositório está rodando — sem nenhum segredo fixo armazenado em lugar nenhum.
Configurando o GitHub Actions com um comando
A Azure CLI tem um comando dedicado que faz o trabalho pesado inteiro: cria o app registration, configura a credencial federada e ainda commita o workflow YAML no repositório, via autenticação interativa com o GitHub:
az webapp deployment github-actions add \
--name meuapp-prod \
--resource-group rg-appservice-lab \
--repo "minhaorg/meurepo" \
--branch main \
--login-with-github
O --login-with-github abre um fluxo de device code — copia um código, cola numa página do GitHub, autoriza, e a CLI cuida do resto: cria a identidade, a credencial federada apontando pro repositório e branch informados, e adiciona o arquivo do workflow direto no .github/workflows/.
O que o comando gera no repositório
O workflow segue sempre a mesma estrutura: login via OIDC, build, e deploy com a action oficial do App Service:
name: Build and deploy Node.js app to Azure Web App - meuapp-prod
on:
push:
branches: [ main ]
workflow_dispatch:
permissions:
id-token: write
contents: read
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '20.x'
- run: npm ci && npm run build --if-present
- uses: azure/login@v2
with:
client-id: ${{ secrets.AZUREAPPSERVICE_CLIENTID }}
tenant-id: ${{ secrets.AZUREAPPSERVICE_TENANTID }}
subscription-id: ${{ secrets.AZUREAPPSERVICE_SUBSCRIPTIONID }}
- uses: azure/webapps-deploy@v3
with:
app-name: meuapp-prod
package: .
Repare no bloco permissions: id-token: write é obrigatório pra OIDC funcionar — sem ele, o azure/login não consegue solicitar o token federado ao GitHub, e o job falha na autenticação.
Publicando num slot em vez de produção
Combinando com o artigo de Deployment Slots, dá pra fazer o Actions publicar sempre no staging — e deixar o swap pra produção como uma etapa manual (ou automática, com aprovação) separada. Basta adicionar slot-name na action de deploy:
- uses: azure/webapps-deploy@v3
with:
app-name: meuapp-prod
slot-name: staging
package: .
Troubleshooting comum
| Sintoma | Causa | Solução |
|---|---|---|
AADSTS70021: No matching federated identity record found | Credencial federada não bate com o repositório/branch/ambiente do workflow | Conferir se o push veio da branch exata configurada na credencial federada |
| Login falha mesmo com secrets certos | Falta permissions: id-token: write no workflow | Adicionar o bloco de permissions no nível do job ou do workflow |
| Deploy sobrescreve produção quando devia ir pro staging | Faltou o parâmetro slot-name na action de deploy | Adicionar slot-name: staging explicitamente |
az webapp deployment github-actions add falha em pedir device code | Sessão da CLI sem escopo pra acessar o GitHub interativamente | Rodar num terminal interativo (não funciona bem em scripts não-interativos/CI) |
Conclusão
Com GitHub Actions e OIDC, o deploy do App Service deixa de depender de um comando manual (ou de um secret de longa duração) e vira parte natural do fluxo de push — com histórico, log de execução e a possibilidade de acoplar validações antes de qualquer coisa chegar em produção. Combinado com os Deployment Slots, fecha um pipeline de CI/CD completo sem precisar de Azure DevOps nem de nenhuma ferramenta paga.
Referências oficiais
- Deploy no App Service com GitHub Actions (Microsoft Learn)
- Conectar GitHub Actions ao Azure via OIDC (Microsoft Learn)
- az webapp deployment github-actions — referência da CLI (Microsoft Learn)
Interessado em saber mais sobre artigos relacionados ao Microsoft Azure CLIQUE AQUI
🚀 Vamos nos conectar?
Não perca nenhuma oportunidade! Cadastre-se nas minhas redes e no canal do YouTube para receber conteúdos de TI, Cloud, Azure, Kubernetes e DevOps em primeira mão.
Dica: No Facebook, todos os artigos do blog são publicados automaticamente. Vale a pena curtir!
💬 Dúvidas ou Problemas?
Com o intuito de ajudar a comunidade, caso você tenha dúvidas ou encontre problemas na execução dos comandos deste artigo, deixe um comentário abaixo. Responderei o mais breve possível!
Muito obrigado pela visita e até o próximo post!
Jefferson Castilho Especialista em Cloud & DevOps.Este guia técnico é exclusivo do Blog do Castilho. Explore mais conteúdos sobre Cloud e DevOps.