GitHub Actions en Azure
Reproduzca el flujo de trabajo de CI/CD mediante GitHub Actions con la acción azure/webapps-deploy y comprenda cuándo elegir GitHub Actions en lugar de Azure Pipelines.
GitHub Actions en Azure es una lección gratuita de Azure Fundamentals en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Azure Fundamentals, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Azure Fundamentals incluye 4 lecciones en total.
¿Qué es GitHub Actions?
GitHub Actions es la plataforma integrada de CI/CD y automatización de GitHub. Los workflows se definen en archivos YAML almacenados en el directorio .github/workflows/ del repositorio y se activan mediante eventos de GitHub, como envíos, solicitudes de incorporación de cambios, publicaciones y otros. GitHub Actions está profundamente integrado con el ecosistema de GitHub (issues, PR, paquetes y análisis de seguridad) y ofrece un amplio marketplace de acciones de la comunidad para tareas como compilar, probar e implementar en Azure.
Estructura de un workflow de GitHub Actions
Un archivo de workflow de GitHub Actions tiene tres secciones de nivel superior. on define los eventos que lo activan. env establece las variables de entorno globales. jobs define uno o varios trabajos, cada uno de los cuales se ejecuta en un runner (alojado por GitHub o autohospedado). Cada trabajo tiene steps, que pueden ser run (un script de shell) o uses (una acción prediseñada). De forma predeterminada, los trabajos se ejecutan en paralelo; use needs para crear dependencias secuenciales.
# .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 testAutenticación en Azure desde GitHub Actions
La forma recomendada de autenticar GitHub Actions en Azure es OpenID Connect (OIDC): emite tokens de corta duración sin almacenar secretos de larga duración en GitHub. Configure una credencial de identidad federada en un registro de aplicaciones de Azure o una identidad administrada, y concédale confianza para su repositorio y rama de GitHub. Use la acción azure/login@v2 para intercambiar el token OIDC de GitHub por un token de acceso de Azure; no se necesitan secretos de cliente en 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 }}Implementación en Azure App Service
La acción azure/webapps-deploy@v3 implementa código o una imagen de contenedor en Azure App Service. Admite la implementación en slots, la implementación basada en paquetes y la implementación de imágenes de Docker. Combínela con azure/login@v2 para la autenticación. Puede seleccionar un slot de staging, ejecutar pruebas de humo y, después, intercambiarlo mediante la acción azure/CLI@v2, que ejecuta el comando de intercambio de slots, reproduciendo por completo el patrón de implementación blue-green de Azure Pipelines en GitHub Actions.
# .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.zipImplementación en Azure Kubernetes Service
Implemente en AKS desde GitHub Actions mediante la acción azure/k8s-deploy@v5. Esta acción usa kubectl apply para implementar manifiestos, realiza la sustitución de imágenes (reemplaza la etiqueta de imagen por la etiqueta de la compilación actual) y supervisa el estado del lanzamiento. La acción azure/aks-set-context@v4 configura las credenciales de kubectl al obtener el kubeconfig del clúster mediante la sesión de Azure autenticada.
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 }}'Secretos y variables de GitHub
Almacene los valores confidenciales en GitHub Secrets, valores cifrados accesibles como ${{ secrets.SECRET_NAME }} en los workflows. Coloque la configuración no confidencial en GitHub Variables, accesible como ${{ vars.VARIABLE_NAME }}. Ambos pueden tener un ámbito de repositorio, entorno u organización. Use environments en GitHub Actions para agregar reglas de protección (revisores obligatorios y ramas de implementación), de forma similar a Azure DevOps Environments.
# 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 }}'Reglas de protección de entornos
Los Environments de GitHub Actions (configurados en Configuración del repositorio → Environments) agregan puertas de implementación similares a las de los entornos de Azure DevOps. Puede exigir revisores obligatorios que deban aprobar antes de que se ejecute un trabajo dirigido al entorno, restringir las implementaciones a ramas específicas (solo main puede implementar en Production) y agregar temporizadores de espera para retrasar las implementaciones. Los trabajos dirigidos a un entorno protegido se pausan hasta que se cumplen todas las reglas de protección.
# 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.zipWorkflows reutilizables y acciones compuestas
Evite duplicar la lógica de CI/CD entre repositorios mediante dos características de GitHub Actions. Los workflows reutilizables permiten definir un workflow en un repositorio y llamarlo desde workflows de otros repositorios mediante uses: myorg/shared-workflows/.github/workflows/deploy.yml@main. Las acciones compuestas agrupan varios pasos en una única acción almacenada en un repositorio, reutilizable mediante uses: myorg/my-actions/deploy@v1. Ambas promueven los principios DRY en los pipelines de CI/CD de su organización.
# 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 frente a Azure Pipelines: cuándo elegir cada uno
Elija GitHub Actions cuando: su código esté alojado en GitHub, su equipo prefiera la interfaz de GitHub, quiera una integración estrecha con las comprobaciones de PR y el análisis de código de GitHub, o esté desarrollando proyectos de código abierto (con una cantidad generosa de minutos gratuitos). Elija Azure Pipelines cuando: necesite integración con Azure Boards, pruebas avanzadas con Azure Test Plans, administración de fuentes de Azure Artifacts, tenga el código en Azure Repos o necesite una administración compleja de versiones en varias etapas, con puertas en muchos entornos. Ambos permiten implementar en Azure con la misma eficacia.
Marketplace de GitHub Actions
El GitHub Actions Marketplace alberga miles de acciones oficiales y de la comunidad para tareas habituales. Microsoft publica acciones oficiales de Azure: azure/login, azure/webapps-deploy, azure/aks-set-context, azure/k8s-deploy, azure/CLI, azure/arm-deploy y muchas más. Fije siempre las acciones a una etiqueta de versión específica (por ejemplo, @v3) o a un SHA de confirmación para evitar ataques a la cadena de suministro derivados de que una acción comprometida se actualice con 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 autohospedados para redes privadas
Los runners alojados por GitHub solo tienen acceso a Internet pública; no pueden acceder a recursos privados de Azure (bases de datos SQL y API internas) sin exponerlos públicamente. Use runners autohospedados en máquinas virtuales de Azure dentro de su VNet para implementar en recursos privados. Registre un runner descargando el agente de runners de GitHub Actions, configurándolo con la URL del repositorio y el token de registro, y ejecutándolo como servicio. Escale los runners autohospedados con Azure Container Apps para crear grupos de runners elásticos.
# 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-hostedComprobación rápida
Compruebe sus conocimientos sobre los conceptos de Microsoft Azure Fundamentals (AZ-900) de esta lección.
Resumen de la lección
En esta lección ha aprendido que los workflows de GitHub Actions son archivos YAML ubicados en .github/workflows/, activados por eventos de GitHub y ejecutados en runners; las credenciales federadas de OIDC permiten autenticar GitHub Actions en Azure sin secretos; y los GitHub Environments con reglas de protección agregan puertas de aprobación a las implementaciones en producción. Con esto finaliza el curso de Azure DevOps; a continuación, estudiaremos Azure Monitor y Log Analytics.
Preguntas frecuentes
¿La lección «GitHub Actions en Azure» es gratis?
Sí — el texto completo de «GitHub Actions en Azure» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Azure Fundamentals, actualiza a CoddyKit PRO. El curso de Azure Fundamentals incluye 4 lecciones en total.
¿Qué aprenderé en «GitHub Actions en Azure»?
Reproduzca el flujo de trabajo de CI/CD mediante GitHub Actions con la acción azure/webapps-deploy y comprenda cuándo elegir GitHub Actions en lugar de Azure Pipelines. Practicas Azure Fundamentals con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Azure Fundamentals?
No se requiere experiencia previa. Azure Fundamentals en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.
¿Cuánto tiempo toma la lección «GitHub Actions en Azure»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Azure Fundamentals?
Sí. Cada lección de Azure Fundamentals incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Introducción a Azure DevOps Services
- Creación de una canalización de CI con Azure Pipelines
- Implementación continua en Azure
- GitHub Actions en Azure