Skip to main content

Desplegar con GitHub Actions

Aprende a controlar los despliegues con características como ambientes y concurrencia.

Note

Actualmente los ejecutores hospedados por GitHub no se admiten en GitHub Enterprise Server. Puede ver más información sobre la compatibilidad futura planeada en GitHub public roadmap.

Introducción

GitHub Actions ofrece características que te permiten controlar los despliegues. Puede:

  • Activar flujos de trabajo con eventos diversos.
  • Configura ambientes para establecer reglas antes de que un job pueda proceder y para limitar el acceso a los secretos.
  • Utiliza la concurrencia para controlar la cantidad de despliegues que se ejecutan al mismo tiempo.

Para obtener más información sobre la implementación continua, consulta "Acerca de la implementación continua con Acciones de GitHub".

Prerrequisitos

Debes estar familiarizado con la sintaxis de las GitHub Actions. Para obtener más información, vea «Escritura de flujos de trabajo».

Activar tu despliegue

Puedes utilizar varios eventos para activar tu flujo de trabajo de despliegue. Algunos de los más comunes son: pull_request, push y workflow_dispatch.

Por ejemplo, un flujo de trabajo con los siguientes activadores se ejecuta en cualquier momento:

  • Hay una inserción en la rama main.
  • Una solicitud de incorporación de cambios dirigida a la rama main se ha abierto, sincronizado o vuelto a abrir.
  • Alguien lo activó manualmente.
on:
  push:
    branches:
      - main
  pull_request:
    branches:
      - main
  workflow_dispatch:

Para obtener más información, vea «Eventos que desencadenan flujos de trabajo».

Utilizar ambientes

Los entornos se usan para describir un destino de implementación general como production, staging o development. Cuando se despliega un flujo de trabajo de GitHub Actions en un ambiente, dicho ambiente se desplegará en la página principal del repositorio. Puede usar entornos para requerir aprobación para que un trabajo continúe, restringir qué ramas pueden desencadenar un flujo de trabajo, controlar las implementaciones con reglas de protección de implementación personalizadas o limitar el acceso a los secretos. Para más información sobre la creación de entornos, consulta "Administrar entornos para la implementación".

Utilizar la concurrencia

La concurrencia se asegura de que solo un job o flujo de trabajo que utilice el mismo grupo de concurrencia se ejecute al mismo tiempo. Puedes utilizar la concurrencia para que un ambiente tenga un máximo de un despliegue en progreso y un despliegue pendiente a la vez. Para obtener más información sobre simultaneidad, consulta "Control de la simultaneidad de flujos de trabajo y trabajos".

Note

concurrency y environment no están conectados. El valor de concurrencia puede ser cualquier secuencia; no necesita ser un nombre de ambiente. Adicionalmente, si otro flujo de trabajo utiliza el mismo ambiente pero no especifica una concurrencia, este no estará sujeto a ninguna regla de concurrencia.

Por ejemplo, cuando se ejecuta el siguiente flujo de trabajo, se pausará con el estado pending si cualquier trabajo o flujo de trabajo que utiliza el grupo de simultaneidad production está en curso. También cancelará cualquier trabajo o flujo de trabajo que use el grupo de simultaneidad production y tenga el estado pending. Esto significa que habrá un máximo de un trabajo o flujo de trabajo en ejecución, y un trabajo o flujo de trabajo pendiente que utilice el grupo de simultaneidad production.

name: Deployment

concurrency: production

on:
  push:
    branches:
      - main

jobs:
  deployment:
    runs-on: ubuntu-latest
    environment: production
    steps:
      - name: deploy
        # ...deployment-specific steps

También puedes especificar la concurrencia a nivel del job. Esto permitirá que los demás trabajos del flujo de trabajo continúen aunque el trabajo simultáneo sea pending.

name: Deployment

on:
  push:
    branches:
      - main

jobs:
  deployment:
    runs-on: ubuntu-latest
    environment: production
    concurrency: production
    steps:
      - name: deploy
        # ...deployment-specific steps

También puede usar cancel-in-progress para cancelar cualquier trabajo o flujo de trabajo actualmente en ejecución en el mismo grupo de simultaneidad.

name: Deployment

concurrency:
  group: production
  cancel-in-progress: true

on:
  push:
    branches:
      - main

jobs:
  deployment:
    runs-on: ubuntu-latest
    environment: production
    steps:
      - name: deploy
        # ...deployment-specific steps

Para obtener instrucciones sobre cómo escribir pasos específicos de la implementación, vea "Búsqueda de ejemplos de implementación".

Visualización del historial de implementación

Cuando se despliega un flujo de trabajo de GitHub Actions en un ambiente, dicho ambiente se desplegará en la página principal del repositorio. Para obtener más información sobre cómo ver las implementaciones en los entornos, consulta "Visualización del historial de implementación".

Monitorear las ejecuciones de flujo de trabajo

Cada ejecución de flujo de trabajo genera una gráfica en tiempo real que ilustra el progreso de la misma. Puedes utilizar esta gráfica para monitorear y depurar los despliegues. Para más información, consulta "Utilizar la gráfica de visualización".

También puedes ver las bitácoras de cada ejecución de flujo de trabajo y el historial de estos. Para obtener más información, vea «Visualizar el historial de ejecución del flujo de trabajo».

Rastrear los despliegues a través de las apps

También puedes crear una app que utilice despliegues y webhooks de estados de despliegues para rastrearlos. Cuando se ejecuta un trabajo de flujo de trabajo que hace referencia a un entorno, crea un objeto de implementación con la propiedad environment establecida en el nombre del entorno. A medida que avanza el flujo de trabajo, también crea objetos de estado de implementación con la propiedad environment establecida en el nombre del entorno, la propiedad environment_url establecida en la URL del entorno (si se ha especificado en el flujo de trabajo) y la propiedad state establecida en el estado del trabajo. Para obtener más información, consulta "Documentación de aplicaciones de GitHub" y "Eventos y cargas de webhook".

Elegir un ejecutor

Puede ejecutar el flujo de trabajo de implementación en los ejecutores hospedados en GitHub Enterprise Server o en los autohospedados. El tráfico de los ejecutores hospedados en GitHub puede provenir de una amplia gama de direcciones de red. Si vas a realizar la implementación en un entorno interno y la empresa restringe el tráfico externo a redes privadas, es posible que los flujos de trabajo de GitHub Actions que se ejecutan en ejecutores autohospedados de GitHub no puedan comunicarse con los servicios o recursos internos. Para superar esto, puedes hospedar tus propios ejecutores. Para obtener más información, vea «Acerca de los ejecutores autohospedados» y «Utilizar los ejecutores hospedados en GitHub».

Mostrar una insignia de estado

Puedes utilizar una insignia de estado para mostrar el estado de tu flujo de trabajo de despliegue. Una insignia de estado muestra si un flujo de trabajo falla o pasa actualmente. Un lugar común para agregar un distintivo de estado es el archivo README.md del repositorio, pero puede agregarlo a la página web que quiera. Predeterminadamente, las insignias muestran el estado de tu rama predeterminada. Si no hay ninguna ejecución de flujo de trabajo en la rama predeterminada, se mostrará el estado de la ejecución más reciente en todas las ramas. Puede mostrar el estado de la ejecución de un flujo de trabajo para una rama o evento específicos mediante los parámetros de consulta branch y event en la URL.

Captura de pantalla de una notificación de estado de flujo de trabajo. El lado izquierdo contiene el logotipo de octocat y "Acciones de GitHub Demo", el nombre del flujo de trabajo. La mitad derecha es verde con el texto "pasando".

Para obtener más información, vea «Adición de un distintivo de estado de flujo de trabajo».

Encontrar ejemplos de despliegues

Este artículo demostró características de las GitHub Actions que puedes agregar a tus flujos de trabajo de despliegue.

GitHub Enterprise Server ofrece plantillas de flujo de trabajo para varios servicios populares, como Azure Web App. Para obtener información sobre cómo empezar a usar una plantilla de flujo de trabajo, vea "Uso de plantillas de flujo de trabajo", o bien examine la lista completa de plantillas de flujo de trabajo de implementación. También puedes consultar flujos de trabajo de implementación específicos en nuestras guías más detalladas, como "Desplegar Node.js a Azure App Service".

Muchos proveedores de servicio también ofrecen acciones en GitHub Marketplace para desplegar a su servicio. Para obtener la lista completa, vea GitHub Marketplace.