Skip to main content

Uso de ejecutores autohospedados en un flujo de trabajo

Para usar ejecutores autohospedados en un flujo de trabajo, puedes usar etiquetas o grupos para especificar el ejecutor de un trabajo.

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.

Puedes establecer como destino ejecutores autohospedados para usarlos en un flujo de trabajo en función de las etiquetas asignadas a los ejecutores, su pertenencia a grupos o una combinación de estos.

Note

El controlador del ejecutor de acciones no admite varias etiquetas, solo se puede usar el nombre del ejecutor en lugar de una etiqueta

Acerca de las etiquetas de ejecutor autohospedado

Las etiquetas te permiten enviar jobs de flujo de trabajo a tipos específicos de ejecutores auto-hospedados, de acuerdo con sus características compartidas. Por ejemplo, si tu job requiere una componente de hardware o paquete de software específico, puedes asignar una etiqueta personalizada a un ejecutor y después configurar tu job para que solo se ejecute en los ejecutores con esta etiqueta.

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.

Para obtener información sobre cómo crear etiquetas personalizadas y predeterminadas, consulta "Uso de etiquetas con ejecutores autohospedados".

Acerca de los grupos de ejecutores auto-hospedados

En el caso de los ejecutores autohospedados definidos en el nivel de la organización o la empresa, puedes agrupar los ejecutores con características compartidas en un único grupo de ejecutores y, luego, configurar el trabajo para establecer como destino el grupo de ejecutores.

A fin de especificar un grupo de ejecutores autohospedados para el trabajo, configura runs-on.group en el archivo de flujo de trabajo.

Para más información sobre cómo crear y administrar grupos de ejecutores, consulta "Administración del acceso a los ejecutores autohospedados mediante grupos".

Utilizar etiquetas predeterminadas para enrutar jobs

Un ejecutor auto-hospedado recibe ciertas etiquetas automáticamente cuando se agrega a GitHub Actions. Estas se utilizan para indicar su sistema operativo y plataforma de hardware:

  • self-hosted: etiqueta predeterminada que se aplica a los ejecutores autohospedados.
  • linux, windows o macOS: se aplica según el sistema operativo.
  • x64, ARM o ARM64: se aplica en función de la arquitectura de hardware.

Puedes utilizar el YAML de tu flujo de trabajo para mandar jobs a las diferentes combinaciones de estas etiquetas. En este ejemplo, un ejecutor auto-hospedado que empate con las tres etiquetas será elegible para ejecutar el job:

runs-on: [self-hosted, linux, ARM64]
  • self-hosted: ejecutar este trabajo en un ejecutor autohospedado.
  • linux: usar solo un ejecutor basado en Linux.
  • ARM64: usar solo un ejecutor basado en hardware ARM64.

Para crear ejecutores autohospedados individuales sin las etiquetas predeterminadas, es necesario pasar la marca --no-default-labels al crear el ejecutor. El controlador del ejecutor de acciones no admite varias etiquetas.

Utilizar etiquetas personalizadas para enrutar jobs

Puedes crear etiquetas personalizadas y asignarlas a tus ejecutores auto-hospedados en cualquier momento. Las etiquetas personalizadas te permiten enviar jobs a tipos particulares de ejecutores auto-hospedados, basándose en cómo se etiquetan.

Por ejemplo, si tiene un trabajo que requiere un tipo específico de hardware de gráficos, puede crear una etiqueta personalizada llamada gpu y asignarla a los ejecutores que tengan instalado este hardware. Un ejecutor auto-hospedado que empate con las etiquetas asignadas será entonces elegible para ejecutar el job.

Este ejemplo muestra un job que combina etiquetas predeterminadas y personalizadas:

runs-on: [self-hosted, linux, x64, gpu]
  • self-hosted: ejecutar este trabajo en un ejecutor autohospedado.
  • linux: usar solo un ejecutor basado en Linux.
  • x64: usar solo un ejecutor basado en hardware x64.
  • gpu: esta etiqueta personalizada se asignó manualmente a los ejecutores autohospedados con hardware de GPU instalado.

Estas etiquetas operan de manera acumulativa, así que un ejecutor auto-hospedado deberá tener las cuatro etiquetas para ser elegible para procesar el trabajo.

Uso de grupos para enrutar 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

Uso de etiquetas y grupos para enrutar trabajos

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

Precedencia de enrutamiento para los ejecutores auto-hospedados

Cuando se enruta un trabajo a un ejecutor autohospedado, GitHub busca un ejecutor que coincida con las etiquetas o grupos runs-on del trabajo:

  • Si GitHub encuentra un ejecutor inactivo en línea que coincida con las etiquetas o grupos runs-on del trabajo, este se asigna y envía al ejecutor.
    • Si ele ejecutor no recoge el job asignado en 60 segundos, este volverá a ponerse en cola para que el ejecutor nuevo pueda aceptarlo.
  • Si GitHub no encuentra ningún ejecutor en línea inactivo que coincida con las etiquetas o grupos runs-on del trabajo, este permanecerá en la cola hasta que haya un ejecutor en línea.
  • Si el job permanece en cola por más de 24 horas, este fallará.