0Pricing
Azure Fundamentals · Lección

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 test

Autenticació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.zip

Implementació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.zip

Workflows 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 time

Runners 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-hosted

Comprobació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

  1. Introducción a Azure DevOps Services
  2. Creación de una canalización de CI con Azure Pipelines
  3. Implementación continua en Azure
  4. GitHub Actions en Azure
← Volver a Azure Fundamentals