Skip to main content

Elegir un ejecutor para un job

Definir el tipo de máquina que procesará un job en tu flujo de trabajo.

Información general

Use jobs.<job_id>.runs-on para definir el tipo de máquina en la que se ejecutará el trabajo.

: la máquina de destino puede ser un ejecutor hospedado por GitHub, ejecutor más grande o un ejecutor autohospedado. : puede dirigirse a los ejecutores en función de las etiquetas que se les han asignado, su pertenencia a grupos o una combinación de ambos.

  • Puedes proporcionar runs-on como:

    • Una sola cadena.
    • Una sola variable que contiene una cadena.
    • Una matriz de cadenas, variables que contienen cadenas o una combinación de ambas.
    • Un par key: value que usa las claves group o labels.
  • Si especificas una matriz de cadenas o variables, el flujo de trabajo se ejecutará en cualquier ejecutor que coincida con todos los valores runs-on especificados. Por ejemplo, aquí el trabajo solo se ejecutará en un ejecutor autohospedado que tenga las etiquetas linux, x64 y gpu:

    runs-on: [self-hosted, linux, x64, gpu]
    

    Para más información, consulta "Selección de ejecutores autohospedados".

  • Puedes combinar cadenas y variables en una matriz. Por ejemplo:

    on:
      workflow_dispatch:
        inputs:
          chosen-os:
            required: true
            type: choice
            options:
            - Ubuntu
            - macOS
    
    jobs:
      test:
        runs-on: [self-hosted, "${{ inputs.chosen-os }}"]
        steps:
        - run: echo Hello world!
    
  • Si quiere ejecutar el flujo de trabajo en varias máquinas, use jobs.<job_id>.strategy.

Nota: Las comillas no son necesarias en torno a cadenas simples como self-hosted, pero son necesarias para expresiones como "${{ inputs.chosen-os }}".

Selección de ejecutores hospedados en GitHub

Si usas un ejecutor hospedado en GitHub, cada trabajo se ejecuta en una nueva instancia de una imagen de ejecutor especificada por runs-on.

El valor de las ejecuciones, cuando se usa un ejecutor hospedado en GitHub, es una etiqueta de ejecutor o el nombre de un grupo de ejecutores. Las etiquetas de los ejecutores estándar hospedados en GitHub se muestran en las tablas siguientes.

Para obtener más información, vea «Acerca de los ejecutores hospedados en GitHub».

Ejecutores hospedados en GitHub estándar para repositorios públicos

En el caso de los repositorios públicos, los trabajos que usan las etiquetas de flujo de trabajo que se muestran en la tabla siguiente se ejecutarán en máquinas virtuales con las especificaciones asociadas. El uso de estos ejecutores en repositorios públicos es gratuito e ilimitado.

Máquina virtual Procesador (CPU) Memoria (RAM) Almacenamiento (SSD) Etiqueta de flujo de trabajo
Linux 4 16 GB 14 GB ubuntu-latest, ubuntu-24.04, ubuntu-22.04, ubuntu-20.04
Windows 4 16 GB 14 GB windows-latest, windows-2022, windows-2019
macOS 3 14 GB 14 GB macos-12
macOS 4 14 GB 14 GB macos-13
macOS 3 (M1) 7 GB 14 GB macos-latest, macos-14, macos-15 [versión preliminar pública]

Ejecutores GitHub alojados estándar para repositorios internos

y repositorios privados .

En el caso de los repositorios privados e internos , los trabajos que usan las etiquetas de flujo de trabajo que se muestran en la tabla siguiente se ejecutarán en máquinas virtuales con las especificaciones asociadas. Estos ejecutores usan la asignación de minutos gratuitos de la cuenta GitHub y, a continuación, se cobran según las tarifas por minuto. Para obtener más información, vea «Acerca de la facturación para las Acciones de GitHub».

Máquina virtual Procesador (CPU) Memoria (RAM) Almacenamiento (SSD) Etiqueta de flujo de trabajo
Linux 2 7 GB 14 GB ubuntu-latest, ubuntu-24.04, ubuntu-22.04, ubuntu-20.04
Windows 2 7 GB 14 GB windows-latest, windows-2022, windows-2019
macOS 3 14 GB 14 GB macos-12
macOS 4 14 GB 14 GB macos-13
macOS 3 (M1) 7 GB 14 GB macos-latest, macos-14, macos-15 [versión preliminar pública]

Además de los ejecutores estándar hospedados en GitHub, GitHub ofrece a los clientes de los planes GitHub Team y GitHub Enterprise Cloud una gama de máquinas virtuales administradas con funciones avanzadas como, por ejemplo, más núcleos y espacio en disco, así como máquinas con tecnología de GPU y de ARM. Para obtener más información, vea «Acerca de los ejecutores más grandes».

Nota: Las imágenes de ejecutores -latest son las últimas imágenes estables que proporciona GitHub y puede que no sean las versiones más recientes de los sistemas operativos disponibles desde los proveedores de estos.

Advertencia: Las imágenes beta y en desuso se proporcionan "tal cual", "con todos sus fallos" y "conforme estén disponibles" y están excluidas del acuerdo de nivel de servicio y de la garantía. El soporte al cliente podría no cubrir las imágenes beta.

Ejemplo: Especificación de un sistema operativo

runs-on: ubuntu-latest

Para obtener más información, vea «Utilizar los ejecutores hospedados en GitHub».

Selección de ejecutores autohospedados

A fin de especificar un ejecutor autohospedado para el trabajo, configure runs-on en el archivo de flujo de trabajo con las etiquetas de ejecutor autohospedado.

Los ejecutores autohospedados pueden tener la etiqueta self-hosted. Al configurar un ejecutor autohospedado, de forma predeterminada se incluirá la etiqueta self-hosted. Puedes pasar la marca --no-default-labels para evitar que se aplique la etiqueta autohospedada. Las etiquetas pueden usarse para crear opciones de destino para los ejecutores, como el sistema operativo o la arquitectura, se recomienda proporcionar una serie de etiquetas que comience con self-hosted (debe estar en primer lugar) y que luego incluya etiquetas adicionales según sea necesario. Cuando especifiques un arreglo de etiquetas, los jobs se pondrán en cola cuando se trate de ejecutores que tengan todas las etiquetas que especificas.

Hay que tener en cuenta que action-runner-controller no admite varias etiquetas y no admite la etiqueta self-hosted.

Ejemplo: Uso de etiquetas para la selección del ejecutor

runs-on: [self-hosted, linux]

Para obtener más información, vea «Acerca de los ejecutores autohospedados» y «Uso de ejecutores autohospedados en un flujo de trabajo».

Elección de ejecutores en un grupo

Puedes usar runs-on para dirigirte a grupos de ejecutores, de modo que el trabajo se ejecute en cualquier ejecutor que sea miembro de ese grupo. Para un control más granular, también puedes combinar grupos de ejecutores con etiquetas.

Los grupos de ejecutores solo pueden tener ejecutor más grande o ejecutores autohospedados como miembros.

Ejemplo: Uso de grupos para controlar dónde se ejecutan los trabajos

En este ejemplo, se han agregado ejecutores de Ubuntu a un grupo denominado ubuntu-runners. La clave runs-on envía el trabajo a cualquier ejecutor disponible del grupo ubuntu-runners:

name: learn-github-actions
on: [push]
jobs:
  check-bats-version:
    runs-on: 
      group: ubuntu-runners
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: '14'
      - run: npm install -g bats
      - run: bats -v

Ejemplo: Combinación de grupos y etiquetas

Al combinar grupos y etiquetas, el ejecutor debe cumplir ambos requisitos para poder ejecutar el trabajo.

En este ejemplo, un grupo de ejecutores denominado ubuntu-runners se rellena con ejecutores de Ubuntu, a los que también se ha asignado la etiqueta ubuntu-20.04-16core. La clave runs-on combina group y labels para que el trabajo se enrute a cualquier ejecutor disponible dentro del grupo que también tenga una etiqueta coincidente:

name: learn-github-actions
on: [push]
jobs:
  check-bats-version:
    runs-on:
      group: ubuntu-runners
      labels: ubuntu-20.04-16core
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: '14'
      - run: npm install -g bats
      - run: bats -v

Ejemplo: Uso de prefijos para diferenciar grupos de ejecutores

Por ejemplo, si tienes un grupo de ejecutores denominado my-group en la organización y otro denominado my-group en la empresa, puedes actualizar el archivo de flujo de trabajo para usar org/my-group o ent/my-group para diferenciar entre los dos.

Usar org/:

runs-on:
  group: org/my-group
  labels: [ self-hosted, label-1 ]

Usar ent/:

runs-on:
  group: ent/my-group
  labels: [ self-hosted, label-1 ]