Skip to main content

Análisis en profundidad de GitHub Codespaces

Comprende el funcionamiento de GitHub Codespaces.

GitHub Codespaces es un entorno de desarrollo instantáneo basado en la nube que usa un contenedor para proporcionar lenguajes comunes, herramientas y utilidades para el desarrollo. GitHub Codespaces también es configurable, lo cual te permite crear un entorno de desarrollo personalizado para tu proyecto. Al configurar un ambiente de desarrollo personalizado para tu proyecto, puedes tener una configuración de codespace repetible para todos los usuarios de dicho proyecto.

Crea tu codespace

Hay varios puntos de entrada para crear un codespace.

  • Desde una plantilla de GitHub o desde cualquier repositorio de plantilla en GitHub para iniciar un nuevo proyecto
  • Desde una rama del repositorio para el nuevo trabajo destacado
  • Desde una solicitud de incorporación de cambios abierta para explorar el trabajo en curso
  • Desde una confirmación en el historial de un repositorio para investigar un error en un punto específico del tiempo

Puede crear un codespace en GitHub, en Visual Studio Code o utilizando el GitHub CLI.

Tu codespace puede ser efímero si necesitas probar algo o puedes volver al mismo codespace para trabajar en trabajo destacado a largo plazo.

Para más información, consulta "Creación de un codespace para un repositorio," "Creación de un codespace a partir de una plantilla" y "Apertura de un codespace existente".

Nota: Puedes crear más de un codespace por repositorio o incluso por rama. Sin embargo, hay límites para el número de codespaces que puede crear y el número de codespaces que puede ejecutar al mismo tiempo. Si alcanza el número máximo de codespaces e intenta crear otro, se muestra un mensaje que indica que debe quitar un codespace existente para poder crear uno nuevo.

Proceso de creación de un codespace

Al crear un codespace, se producen varios pasos en segundo plano antes de que el codespace esté disponible para ti.

Paso 1: Se asigna una MV y un almacenamiento a tu codespace

Al crear un codespace, se crea una máquina virtual (VM) mediante la versión estable o versión preliminar pública de la imagen de host de la máquina virtual. Para obtener más información, vea «Elección de la imagen de host estable o beta». La imagen de host define la versión de Linux que se usa para la VM. La VM es dedicada y privada. El tener una MV dedicada garantiza que tengas un conjunto completo de recursos de cómputo disponibles para ti desde esa máquina. Si es necesario, esto también te permitirá tener acceso de raíz total a tu contenedor.

Entonces, se genera un clon superficial del repositorio o del repositorio de plantilla si va a crear un codespace a partir de una plantilla. Este se clona en el /workspaces directorio de la VM y, posteriormente, se monta en el contenedor de desarrollador. Para obtener más información, consulta "Acerca de la estructura de directorios de un codespace" a continuación.

Paso 2: se crea el contenedor de desarrollador

GitHub Codespaces utiliza un contenedor Docker como entorno de desarrollo. Este contenedor se crea en función de las configuraciones que puedes definir en un archivo devcontainer.json u, opcionalmente, en un Dockerfile. Si creas un codespace a partir de la plantilla en blanco de GitHub o desde un repositorio sin el archivo devcontainer.json, GitHub Codespaces usa una imagen predeterminada, que tiene muchos lenguajes y tiempos de ejecución disponibles. Para obtener más información, vea «Introducción a los contenedores dev». Para obtener detalles sobre lo que contiene la imagen predeterminada para contenedores de desarrollador, consulte el repositorio devcontainers/images.

Nota: Si quiere usar enlaces de Git en el codespace y aplicar cualquier cosa en el directorio de plantillas de Git al codespace, tendrá que configurar enlaces durante el paso 4 después de crear el contenedor.

Como el repositorio se clona en la máquina virtual host antes de crear el contenedor, todo lo que se encuentra en el directorio de plantillas de Git no se aplicará en el codespace a menos que configure enlaces en el archivo de configuración devcontainer.json mediante postCreateCommand en el paso 4. Para más información, vea "Paso 4: Configuración posterior a la creación".

Paso 3: Conectarse al codespace

Cuando tu contenedor se crea y se ejecuta cualquier otra inicialización, estarás conectado a tu codespace. Puedes conectarse a él mediante lo siguiente:

Paso 4: Ajustes post-creación

Una vez que te conectes al codespace, la configuración automatizada podría continuar la compilación en función de la configuración especificada en el archivo devcontainer.json. Es posible que vea que se ejecutan postCreateCommand y postAttachCommand.

Si quieres usar enlaces de Git en el codespace, configúralos mediante los devcontainer.jsonscripts de ciclo de vida, como postCreateCommand. Para obtener más información sobre los scripts de ciclo de vida, consulta la especificación de los contenedores de desarrollo en el sitio web de los contenedores de desarrollo.

Si tienes un repositorio público de dotfiles para GitHub Codespaces, puedes habilitarlo para utilizarlo con nuevos codespaces. Cuando lo habilitas, tus dotfiles se clonarán en el contenedor y se invocará el script de instalación. Para obtener más información, vea «Personalización de GitHub Codespaces para la cuenta».

Por último, si has creado el codespace desde un repositorio, todo el historial del repositorio se copiará con un clon integral. Si has creado el codespace a partir de una plantilla, no se conservará el historial completo del repositorio de plantilla. En su lugar, a menos que uses la plantilla en blanco, empezarás con una confirmación inicial para el contenido del repositorio de plantilla.

Durante la configuración post-creación, aún podrás utilizar la terminal integrada y editar tus archivos, pero ten cuidado de evitar cualquier condiciones de carrera entre tu trabajo y los comandos que se están ejecutando.

Ciclo de vida de los Codespaces

Guardar archivos en tu codespace

Guarda los cambios en los archivos de la manera habitual, según el editor que estés usando.

Si trabajas en codespaces en Visual Studio Code, puedes habilitar el Guardado automático para asegurarte de que los cambios siempre se guardan.

Cerrar o detener tu codespace

El codespace seguirá ejecutándose mientras lo usas, pero se agotará el tiempo de espera después de un período de inactividad. Los cambios de archivo del editor y de la salida del terminal se cuentan como actividad. Por lo tanto, no se agotará el tiempo de espera de tu codespace si la salida del terminal sigue. El período de tiempo de espera de inactividad predeterminado es de 30 minutos. Puedes definir un configuración de tiempo de espera personal para los codespaces que crees, pero una directiva de tiempo de espera de la organización puede invalidarla. Para obtener más información, vea «Configuración del periodo de tiempo de espera para GitHub Codespaces».

Si se agota el tiempo de espera de un codespace, dejará de ejecutarse, pero puedes reiniciarlo desde la pestaña del explorador (si estabas usando el codespace en el explorador), desde VS Code o desde tu lista de codespaces en https://github.com/codespaces.

Para detener un codespace, puedes hacer lo siguiente:

  • En el explorador: en tu lista de codespaces de https://github.com/codespaces, haz clic en los puntos suspensivos ( ... ) situados a la derecha del codespace que deseas detener y haz clic en Detener codespace.
  • En VS Code: abra la Visual Studio Code Command Palette. Por ejemplo, presione Ctrl+Shift+P (Windows/Linux) o Shift+Command+P (Mac); escriba Codespaces: stop y presione Enter. Para obtener más información, vea «Uso de la paleta de Comandos de Visual Studio Code en GitHub Codespaces».
  • En el cliente de JetBrains, haz clic en el botón de detener situado en la parte superior de la ventana de herramientas de GitHub Codespaces. Para obtener más información, consulta la pestaña "JetBrains IDEs" de "Detención e inicio de un codespace."
  • En una ventana del terminal: usa el comando gh codespace stop de la GitHub CLI. Para obtener más información, vea «Uso de GitHub Codespaces con la CLI de GitHub».

Si sales de tu codespace sin ejecutar el comando para detenerlo (por ejemplo, cerrando la pestaña del explorador) o si dejas el codespace ejecutándose sin interacción, este y sus procesos en ejecución seguirán durante el período de tiempo de espera de inactividad.

Cuando cierras o detienes tu codespace, todos los cambios sin confirmar se preservan hasta que te conectes al codespace nuevamente.

Ejecutar tu aplicación

La redirección de puertos te otorga acceso a los puertos CRP dentro de tu codespace. Por ejemplo, si estás ejecutando una aplicación web por el puerto 4000 dentro de tu codespace, puedes reenviar ese puerto automáticamente para hacer la aplicación accesible desde tu buscador.

El reenvío de puertos determina cuáles de ellos se hicieron accesibles para ti desde la máquina remota. Incluso si no reenvías un puerto, este será accesible para otros procesos que se ejecuten dentro del mismo codespace.

Diagrama que muestra las conexiones, a través de Internet, entre un editor de código o un explorador en el dispositivo y un codespace en la nube.

Cuando una aplicación que se ejecuta dentro de GitHub Codespaces da salida a un puerto hacia la consola, GitHub Codespaces detecta el patrón de URL del localhost y reenvía el puerto automáticamente. Puedes hacer clic en la dirección URL del terminal o en el vínculo del mensaje de notificación del sistema que aparece en la esquina inferior derecha de VS Code para abrir el puerto en un explorador. De manera predeterminada, GitHub Codespaces reenvía el puerto utilizando HTTP. Para obtener más información sobre el reenvío de puertos, consulta "Reenviar puertos en tu codespace".

Si bien los puertos pueden reenviarse automáticamente, no son accesibles públicamente en la internet. Predeterminadamente, todos los puertos son privados, pero puedes poner a un puerto como disponible para tu organización o como público manualmente y luego compartir el acceso a través de una URL. Para obtener más información, vea «Reenviar puertos en tu codespace».

El ejecutar tu aplicación cuando llegas por primera vez a tu codespace puede convertirse en un bucle de desarrollador interno rápido. Mientras editas, tus cambios se guardan automáticamente y se ponen disponibles en tu puerto reenviado. Para ver los cambios, regresa a la pestaña de la aplicación en ejecución en tu buscador y actualízala.

Confirmar y subir tus cambios

Git está instalado de manera predeterminada en tu codespace, por lo que puedes confiar en tu flujo de trabajo existente de Git. Puedes trabajar con Git en el codespace mediante el terminal o con las características de control de código fuente de VS Code o JetBrains.

Si estás trabajando con un repositorio existente, puedes crear un codespace desde cualquier rama, confirmación o solicitud de incorporación de cambios en el repositorio o puedes cambiar a una rama existente o nueva desde dentro de tu codespace activo. Ya que GitHub Codespaces está diseñado para ser efímero, puedes utilizarlo como un ambiente aislado para experimentar, verificar la solicitud de incorporación de cambios de un compañero o arreglar conflictos de fusión.

Si solo tienes acceso de lectura a un repositorio, puedes crear un codespace para el repositorio siempre que puedas bifurcarlo. Al realizar una confirmación desde el codespace, o insertar una nueva rama, GitHub Codespaces crea automáticamente una bifurcación del repositorio o vincula el codespace a una bifurcación existente si ya tienes una para el repositorio ascendente.

Si estás trabajando en un codespace creado a partir de una plantilla, Git se instala de manera predeterminada, pero tendrás que publicar el codespace en un repositorio remoto para conservar el trabajo y compartirlo con otros usuarios. Si empiezas a partir de la plantilla en blanco de GitHub, primero debes inicializar el área de trabajo como repositorio de Git (por ejemplo, escribiendo git init) para comenzar a usar el control de código fuente en el codespace.

Para obtener más información, vea «Utilizar el control de código fuente en tu codespace».

Nota: Las confirmaciones desde el codespace se atribuirán al nombre y al correo electrónico público configurados en https://github.com/settings/profile. Para la autenticación, se usará un token con ámbito en el repositorio, incluido en el entorno como GITHUB_TOKEN, y las credenciales de GitHub.

Personalización de un codespace con extensiones o complementos

Puedes agregar complementos y extensiones en un codespace para personalizar tu experiencia en JetBrains y VS Code respectivamente.

Extensiones de VS Code

Si trabajas con los codespaces en la aplicación de escritorio de VS Code o en el cliente web, puedes agregar las extensiones que necesites desde Visual Studio Code Marketplace. Para obtener información sobre cómo se ejecutan las extensiones en GitHub Codespaces, consulta Compatibilidad con el desarrollo remoto y GitHub Codespaces en la documentación de VS Code.

Si ya usas VS Code, puedes usar Sincronización de ajustes para sincronizar automáticamente extensiones, configuraciones, temas y métodos abreviados de teclado entre la instancia local y los codespaces que crees.

Complementos de JetBrains

Si trabajas con los codespaces en un IDE de JetBrains, puedes agregar complementos desde JetBrains Marketplace.

  1. Haz clic en el Cliente JetBrains y, después, en Preferencias.

  2. En el cuadro de diálogo Preferencias, haz clic en Complementos en el host para instalar un complemento en el IDE de JetBrains completo que se ejecuta de forma remota o en Complementos para instalar un complemento en el cliente local, por ejemplo, para cambiar el tema de la interfaz de usuario.

  3. Haz clic en la pestaña Marketplace.

    Captura de pantalla del cuadro de diálogo "Preferencias", con la pestaña "Marketplace" mostrada. La opción "Complementos en host" está resaltada con un contorno naranja oscuro.

  4. Haz clic en Instalar junto al complemento necesario.

Acerca de la estructura de directorios de un codespace

Al crear un codespace, el repositorio se clona en el directorio /workspaces del codespace. Es un directorio persistente que se monta en el contenedor. Todo cambio que se realice dentro de este directorio (incluida la edición, la adición o la eliminación de archivos) se conserva al detener e iniciar el codespace, así como al recompilar el contenedor en el codespace.

Fuera del directorio /workspaces, el codespace contiene una estructura de directorios de Linux que varía en función de la imagen de contenedor dev que se utiliza para compilar el codespace. Puede agregar archivos o realizar cambios en los archivos fuera del directorio /workspaces. Por ejemplo, puede instalar nuevos programas o puede establecer la configuración del shell en un archivo como ~/.bashrc. Como usuario no raíz, puede que no tengas acceso de escritura automáticamente a ciertos directorios, pero la mayoría de las imágenes permiten el acceso raíz a estos directorios con el comando sudo.

Fuera de /workspaces, a excepción del directorio /tmp, los directorios de un codespace están vinculados al ciclo de vida del contenedor. Esto significa que los cambios que se realicen se conservan al detener e iniciar el codespace, pero no al recompilar el contenedor. Para obtener más información sobre el directorio /tmp, consulta "Conservación de variables de entorno y archivos temporales".

Borrar los directorios fuera de /workspaces ayuda a asegurar que el contenedor recompilado esté en el mismo estado en el que estaría en un codespace recién creado. Si vas a volver a compilar un contenedor para aplicar cambios de configuración al codespace en el que estás trabajando, puedes estar seguro de que los cambios de configuración realizados funcionarán igual para los usuarios que creen nuevos codespaces con la misma configuración. Para obtener más información, vea «Introducción a los contenedores dev».

Si quieres hacer cambios en tu codespace que sean más sólidos a lo largo de las recompilaciones y a través de diferentes codespaces, tienes varias opciones.

  • Para instalar programas y herramientas en todos los codespaces creados a partir de un repositorio, en la configuración del contenedor de desarrollo, puedes usar propiedades de comando de ciclo de vida, como postCreateCommand, para ejecutar comandos de instalación personalizados, o puedes elegir entre comandos de instalación escritos previamente denominados "características". Para más información, consulta la especificación de contenedores de desarrollo en el sitio web Contenedores de desarrollo y "Adición de características a un archivo devcontainer.json".
  • Para instalar herramientas o personalizar la configuración en cada codespace que crees, como configurar el perfil bash, puedes vincular GitHub Codespaces con un repositorio dotfiles. El repositorio dotfiles también se clona en el directorio persistente /workspaces. Para obtener más información, vea «Personalización de GitHub Codespaces para la cuenta».
  • Si deseas conservar archivos específicos sobre una recompilación, puede usar un archivo devcontainer.json para crear un enlace simbólico entre los archivos y un directorio persistente dentro de /workspaces. Para obtener más información, vea «Recompilación del contenedor en un codespace».

Información adicional