GitHub Actions no Azure
Replique o fluxo de trabalho de CI/CD usando o GitHub Actions com a ação azure/webapps-deploy e compreenda quando escolher o GitHub Actions em vez do Azure Pipelines.
GitHub Actions no Azure é uma aula grátis de Azure Fundamentals no CoddyKit. Esta é a aula 4 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Azure Fundamentals, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Azure Fundamentals inclui 4 aulas no total.
O que é o GitHub Actions
GitHub Actions é a plataforma integrada de CI/CD e automação do GitHub. Os fluxos de trabalho são definidos em arquivos YAML armazenados no diretório .github/workflows/ do seu repositório e acionados por eventos do GitHub — envios, solicitações de pull, versões e muito mais. O GitHub Actions é profundamente integrado ao ecossistema do GitHub (problemas, PRs, pacotes e verificação de segurança) e oferece um amplo marketplace de ações da comunidade para tarefas como compilação, testes e implantação no Azure.
Estrutura de um fluxo de trabalho do GitHub Actions
Um arquivo de fluxo de trabalho do GitHub Actions tem três seções de nível superior. on define os eventos de acionamento. env define as variáveis de ambiente globais. jobs define um ou mais trabalhos, cada um executado em um runner (hospedado pelo GitHub ou auto-hospedado). Cada trabalho tem etapas — run (script de shell) ou uses (uma ação pré-criada). Por padrão, os trabalhos são executados em paralelo; use needs para criar dependências sequenciais.
# .github/workflows/ci.yml
name: CI
on:
push:
branches: [main]
pull_request:
branches: [main]
env:
NODE_VERSION: '18.x'
jobs:
build-and-test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: ${{ env.NODE_VERSION }}
- run: npm ci
- run: npm testAutenticação no Azure a partir do GitHub Actions
A forma recomendada de autenticar o GitHub Actions no Azure é o OpenID Connect (OIDC) — ele emite tokens de curta duração sem armazenar segredos de longa duração no GitHub. Configure uma credencial de identidade federada em um registro de aplicativo do Azure ou em uma identidade gerenciada, concedendo confiança ao seu repositório e à sua ramificação do GitHub. Use a ação azure/login@v2 para trocar o token OIDC do GitHub por um token de acesso do Azure — não são necessários segredos do cliente nos GitHub Secrets.
# Configure OIDC federated credential in Azure
az ad app federated-credential create \
--id <AppRegistrationObjectId> \
--parameters '{
"name": "github-oidc",
"issuer": "https://token.actions.githubusercontent.com",
"subject": "repo:myorg/myrepo:ref:refs/heads/main",
"audiences": ["api://AzureADTokenExchange"]
}'
# In the workflow: login via OIDC
# permissions:
# id-token: write
# contents: read
# - uses: azure/login@v2
# with:
# client-id: ${{ vars.AZURE_CLIENT_ID }}
# tenant-id: ${{ vars.AZURE_TENANT_ID }}
# subscription-id: ${{ vars.AZURE_SUBSCRIPTION_ID }}Implantação no Azure App Service
A ação azure/webapps-deploy@v3 implanta código ou uma imagem de contêiner no Azure App Service. Ela gerencia a implantação em slots, a implantação baseada em pacote e a implantação de imagens do Docker. Combine-a com azure/login@v2 para autenticação. Você pode direcioná-la a um slot de preparo, executar testes de fumaça e depois fazer a troca com a ação azure/CLI@v2, que executa o comando de troca de slots — reproduzindo inteiramente no GitHub Actions o padrão de implantação azul-verde do Azure Pipelines.
# .github/workflows/deploy.yml
jobs:
deploy:
runs-on: ubuntu-latest
permissions:
id-token: write
contents: read
steps:
- uses: actions/checkout@v4
- uses: azure/login@v2
with:
client-id: ${{ vars.AZURE_CLIENT_ID }}
tenant-id: ${{ vars.AZURE_TENANT_ID }}
subscription-id: ${{ vars.AZURE_SUBSCRIPTION_ID }}
- name: Build and zip app
run: npm ci && npm run build && zip -r app.zip dist/
- uses: azure/webapps-deploy@v3
with:
app-name: myUniqueWebApp
slot-name: staging
package: app.zipImplantação no Azure Kubernetes Service
Faça a implantação no AKS a partir do GitHub Actions usando a ação azure/k8s-deploy@v5. Essa ação usa kubectl apply para implantar manifestos, realiza a substituição da imagem (trocando a etiqueta da imagem pela etiqueta da compilação atual) e monitora a integridade da implantação. A ação azure/aks-set-context@v4 configura as credenciais do kubectl obtendo o kubeconfig do cluster por meio da sessão autenticada do Azure.
jobs:
deploy-aks:
runs-on: ubuntu-latest
permissions:
id-token: write
contents: read
steps:
- uses: actions/checkout@v4
- uses: azure/login@v2
with:
client-id: ${{ vars.AZURE_CLIENT_ID }}
tenant-id: ${{ vars.AZURE_TENANT_ID }}
subscription-id: ${{ vars.AZURE_SUBSCRIPTION_ID }}
- uses: azure/aks-set-context@v4
with:
resource-group: MyRG
cluster-name: myAKSCluster
- uses: azure/k8s-deploy@v5
with:
namespace: production
manifests: k8s/
images: 'mycontainerregistry.azurecr.io/myapp:${{ github.sha }}'Segredos e variáveis do GitHub
Armazene valores confidenciais nos GitHub Secrets — valores criptografados acessíveis como ${{ secrets.SECRET_NAME }} nos fluxos de trabalho. A configuração não confidencial deve ser armazenada nas GitHub Variables — acessíveis como ${{ vars.VARIABLE_NAME }}. Ambos podem ter escopo de repositório, ambiente ou organização. Use ambientes no GitHub Actions para adicionar regras de proteção (revisores obrigatórios e ramificações de implantação), de forma semelhante aos Environments do Azure DevOps.
# Reference secrets and variables in a workflow
steps:
- name: Configure app settings
uses: azure/CLI@v2
with:
inlineScript: |
az webapp config appsettings set \
--name myUniqueWebApp \
--resource-group MyRG \
--settings \
DATABASE_URL='${{ secrets.DATABASE_URL }}' \
API_VERSION='${{ vars.API_VERSION }}'Regras de proteção de ambientes
Os Environments do GitHub Actions (configurados em Settings → Environments do repositório) adicionam portões de implantação semelhantes aos ambientes do Azure DevOps. Você pode exigir revisores obrigatórios, que devem aprovar antes da execução de um trabalho direcionado ao ambiente; restringir as implantações a ramificações específicas (somente main pode implantar em Production); e adicionar temporizadores de espera para atrasar as implantações. Os trabalhos direcionados a um ambiente protegido ficam pausados até que todas as regras de proteção sejam atendidas.
# Workflow job targeting a protected GitHub environment
jobs:
deploy-production:
runs-on: ubuntu-latest
environment:
name: Production # Must have 2 approvers in GitHub settings
url: https://myapp.contoso.com
needs: deploy-staging
steps:
- uses: azure/login@v2
with:
client-id: ${{ vars.AZURE_CLIENT_ID }}
tenant-id: ${{ vars.AZURE_TENANT_ID }}
subscription-id: ${{ vars.AZURE_SUBSCRIPTION_ID }}
- uses: azure/webapps-deploy@v3
with:
app-name: myUniqueWebApp
package: app.zipFluxos de trabalho reutilizáveis e ações compostas
Evite duplicar a lógica de CI/CD entre repositórios usando dois recursos do GitHub Actions. Os fluxos de trabalho reutilizáveis permitem definir um fluxo de trabalho em um repositório e chamá-lo a partir de fluxos de trabalho em outros repositórios usando uses: myorg/shared-workflows/.github/workflows/deploy.yml@main. As ações compostas agrupam várias etapas em uma única ação armazenada em um repositório, reutilizável com uses: myorg/my-actions/deploy@v1. Ambas promovem os princípios DRY nos pipelines de CI/CD da sua organização.
# Call a reusable workflow from another workflow
jobs:
deploy:
uses: myorg/shared-workflows/.github/workflows/deploy-appservice.yml@main
with:
app-name: myUniqueWebApp
slot-name: staging
package-path: dist/
secrets:
AZURE_CLIENT_ID: ${{ secrets.AZURE_CLIENT_ID }}
AZURE_TENANT_ID: ${{ secrets.AZURE_TENANT_ID }}
AZURE_SUBSCRIPTION_ID: ${{ secrets.AZURE_SUBSCRIPTION_ID }}GitHub Actions ou Azure Pipelines: quando escolher
Escolha o GitHub Actions quando: seu código estiver hospedado no GitHub, sua equipe preferir a interface do GitHub, você quiser uma integração estreita com as verificações de PR e a análise de código do GitHub ou estiver desenvolvendo projetos de código aberto (com muitos minutos gratuitos). Escolha o Azure Pipelines quando: precisar de integração com o Azure Boards, de testes avançados com o Azure Test Plans, do gerenciamento de feeds do Azure Artifacts, seu código estiver no Azure Repos ou você precisar de um gerenciamento complexo de versões em várias etapas, com portões em muitos ambientes. Ambos oferecem suporte igualmente bom à implantação no Azure.
Marketplace do GitHub Actions
O GitHub Actions Marketplace reúne milhares de ações da comunidade e oficiais para tarefas comuns. A Microsoft publica ações oficiais do Azure: azure/login, azure/webapps-deploy, azure/aks-set-context, azure/k8s-deploy, azure/CLI, azure/arm-deploy e muitas outras. Sempre fixe as ações em uma etiqueta de versão específica (por exemplo, @v3) ou em um SHA de confirmação, para evitar ataques à cadeia de fornecimento causados pela atualização de uma ação comprometida com código malicioso.
# Pin actions to specific version (recommended)
- uses: actions/checkout@v4 # Pinned to v4 tag
- uses: azure/login@v2 # Pinned to v2
- uses: azure/webapps-deploy@v3 # Pinned to v3
# Extra security: pin to commit SHA
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
# Avoid unpinned 'latest' or branch references
# - uses: some-action@main # UNSAFE - could change at any timeRunners auto-hospedados para redes privadas
Os runners hospedados pelo GitHub têm acesso somente à Internet pública — eles não conseguem alcançar recursos privados do Azure (bancos de dados SQL e APIs internas) sem expor esses recursos publicamente. Use runners auto-hospedados em VMs do Azure dentro da sua VNet para implantações em recursos privados. Registre um runner baixando o agente de runner do GitHub Actions, configurando-o com a URL do seu repositório e o token de registro e executando-o como um serviço. Dimensione os runners auto-hospedados com Azure Container Apps para criar conjuntos elásticos de runners.
# Register a self-hosted runner on an Azure VM
# 1. Download runner (run on the VM)
curl -O -L https://github.com/actions/runner/releases/download/v2.317.0/actions-runner-linux-x64-2.317.0.tar.gz
mkdir actions-runner && tar xzf ./actions-runner-linux-x64-2.317.0.tar.gz -C actions-runner
cd actions-runner
# 2. Configure (use token from GitHub Settings > Actions > Runners)
./config.sh --url https://github.com/myorg/myrepo --token <REGISTRATION_TOKEN>
# 3. Run as a service
sudo ./svc.sh install && sudo ./svc.sh start
# Use in workflow
# runs-on: self-hostedVerificação rápida
Teste sua compreensão dos conceitos do Microsoft Azure Fundamentals (AZ-900) apresentados nesta lição.
Recapitulação da lição
Nesta lição, você aprendeu que os fluxos de trabalho do GitHub Actions são arquivos YAML em .github/workflows/, acionados por eventos do GitHub e executados em runners; as credenciais federadas OIDC permitem a autenticação no Azure a partir do GitHub Actions sem segredos; e os GitHub Environments com regras de proteção adicionam portões de aprovação às implantações em produção. Isso conclui o curso de Azure DevOps — a seguir, veremos o Azure Monitor e o Log Analytics.
Perguntas Frequentes
A aula “GitHub Actions no Azure” é grátis?
Sim — o texto completo de “GitHub Actions no Azure” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Azure Fundamentals, atualize para CoddyKit PRO. O curso de Azure Fundamentals inclui 4 aulas no total.
O que vou aprender em “GitHub Actions no Azure”?
Replique o fluxo de trabalho de CI/CD usando o GitHub Actions com a ação azure/webapps-deploy e compreenda quando escolher o GitHub Actions em vez do Azure Pipelines. Você pratica Azure Fundamentals com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Azure Fundamentals?
Nenhuma experiência prévia é necessária. Azure Fundamentals no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 4 de 4.
Quanto tempo leva a aula “GitHub Actions no Azure”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Azure Fundamentals?
Sim. Cada aula de Azure Fundamentals inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Visão Geral dos Serviços do Azure DevOps
- Criando um Pipeline de CI com o Azure Pipelines
- Implantação Contínua no Azure
- GitHub Actions no Azure