Deploy do App Service via GitHub Actions

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

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

SintomaCausaSolução
AADSTS70021: No matching federated identity record foundCredencial federada não bate com o repositório/branch/ambiente do workflowConferir se o push veio da branch exata configurada na credencial federada
Login falha mesmo com secrets certosFalta permissions: id-token: write no workflowAdicionar o bloco de permissions no nível do job ou do workflow
Deploy sobrescreve produção quando devia ir pro stagingFaltou o parâmetro slot-name na action de deployAdicionar slot-name: staging explicitamente
az webapp deployment github-actions add falha em pedir device codeSessão da CLI sem escopo pra acessar o GitHub interativamenteRodar 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

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.

 

Deixe uma resposta

Descubra mais sobre Blog do Castilho - Tecnologia | FinOps | DevOps | Cloud

Assine agora mesmo para continuar lendo e ter acesso ao arquivo completo.

Continuar lendo