# Reutilización de configuraciones de flujo de trabajo

Busque información sobre cómo evitar la duplicación al crear un flujo de trabajo mediante la reutilización de flujos de trabajo existentes y el uso de anclajes de YAML.

## Flujos de trabajo reutilizables

En este artículo se proporciona información de referencia para flujos de trabajo reutilizables y plantillas de flujo de trabajo, incluidas las reglas de acceso, las limitaciones, las palabras clave admitidas y el comportamiento del ejecutor.

### Acceso a los flujos de trabajo reutilizables

Otros flujos de trabajo pueden usar uno reutilizable si se cumple alguna de las siguientes condiciones:

* Ambos flujos de trabajo están en el mismo repositorio.

* El flujo de trabajo denominado se almacena en un repositorio público en GitHub Enterprise Server.

  No se pueden usar directamente flujos de trabajo reutilizables definidos en GitHub.com. En su lugar, almacene una copia del flujo de trabajo reutilizable en tu instancia de GitHub Enterprise Servery llame al flujo de trabajo desde esa ruta de acceso.

* El flujo de trabajo llamado se almacena en un repositorio interno y los ajustes de dicho repositorio permiten que se acceda a él. Para obtener más información, consulte [Compartir acciones y flujos de trabajo con tu empresa](/es/enterprise-server@3.22/actions/how-tos/reuse-automations/share-with-your-enterprise).

* El flujo de trabajo que se llama se almacena en un repositorio privado y los ajustes de ese repositorio permiten que se acceda a él. Para obtener más información, consulte [Compartir acciones y flujos de trabajo con tu empresa](/es/enterprise-server@3.22/actions/how-tos/reuse-automations/share-with-your-enterprise).

En la tabla siguiente se muestra la accesibilidad de los flujos de trabajo reutilizables a un flujo de trabajo de llamada, en función de la visibilidad del repositorio host.

| Repositorio del autor de la llamada | Repositorios de flujos de trabajo accesibles |
| ----------------------------------- | -------------------------------------------- |
| `private`                           |                                              |
| `private`                           |                                              |
| , `internal`y`public`               |                                              |
|                                     |                                              |
| `internal`                          |                                              |
| `internal`, y `public`              |                                              |
|                                     |                                              |
| `public`                            | `public`                                     |

Los **permisos de acciones** de la página de configuración de acciones del repositorio de llamadores deben configurarse para permitir el uso de acciones y flujos de trabajo reutilizables; consulte [Administración de la configuración de Acciones de GitHub para un repositorio](/es/enterprise-server@3.22/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-github-actions-settings-for-a-repository#allowing-select-actions-and-reusable-workflows-to-run).

Para repositorios internos o privados, la **política de acceso** en la página de configuración de Acciones del repositorio del flujo de trabajo llamado debe configurarse explícitamente para permitir el acceso desde repositorios que contienen flujos de trabajo que llaman; consulte [Administración de la configuración de Acciones de GitHub para un repositorio](/es/enterprise-server@3.22/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-github-actions-settings-for-a-repository#allowing-access-to-components-in-a-private-repository).

> \[!NOTE]
> Para mejorar la seguridad, GitHub Actions no admite redireccionamientos de acciones o flujos de trabajo reutilizables. Esto significa que cuando se cambia el propietario, el nombre del repositorio de una acción o el nombre de una acción, cualquier flujo de trabajo que utilice esa acción con el nombre anterior dará error.

### Limitaciones de los flujos de trabajo reutilizables

* Puede conectar hasta cuatro niveles de flujos de trabajo. Para obtener más información, consulta "[Anidamiento de flujos de trabajo reutilizables](/es/enterprise-server@3.22/actions/how-tos/reuse-automations/reuse-workflows#nesting-reusable-workflows).

* Puede llamar a un máximo de 20 flujos de trabajo únicos reutilizables a través de un único archivo de flujo de trabajo. Este límite incluye los árboles de flujos de trabajo reutilizables anidados a los que se puede llamar desde el archivo de flujo de trabajo del autor de llamada de nivel superior.

  Por ejemplo, *flujo-de-trabajo-del-autor-de-llamada-de-nivel-superior.yml* → *flujo-de-trabajo-llamado-1.yml* → *flujo-de-trabajo-llamado-2.yml* cuenta como dos flujos de trabajo reutilizables.

* Las variables de entorno que se configuren en un contexto `env` y que se definan a nivel del flujo de trabajo que inicia la llamada no se propagan al flujo de trabajo que recibe la llamada. Para más información, consulta [Almacenamiento de información en variables](/es/enterprise-server@3.22/actions/how-tos/write-workflows/choose-what-workflows-do/use-variables) y [Contextos de referencia](/es/enterprise-server@3.22/actions/reference/workflows-and-actions/contexts#env-context).

* Del mismo modo, las variables de entorno establecidas en el contexto `env`, definidas en el flujo de trabajo llamado, no son accesibles en el contexto `env` del flujo de trabajo del autor de la llamada. En su lugar, debe usar salidas del flujo de trabajo reutilizable. Para obtener más información, consulta [Uso de salidas de un flujo de trabajo reutilizable](/es/enterprise-server@3.22/actions/how-tos/reuse-automations/reuse-workflows#using-outputs-from-a-reusable-workflow).

* Para reutilizar variables en varios flujos de trabajo, debes establecerlas en los niveles de organización, repositorio o entorno, y hacer referencia a ellas mediante el contexto `vars`. Para más información, consulta [Almacenamiento de información en variables](/es/enterprise-server@3.22/actions/how-tos/write-workflows/choose-what-workflows-do/use-variables) y [Contextos de referencia](/es/enterprise-server@3.22/actions/reference/workflows-and-actions/contexts#vars-context).

* Los flujos de trabajo reutilizables se llaman directamente dentro de un trabajo y no desde dentro de un paso de trabajo. Por lo tanto, no puede usar `GITHUB_ENV` para pasar valores a los pasos del trabajo en el flujo de trabajo del autor de la llamada.

### Palabras clave compatibles con los jobs que llaman a un flujo de trabajo reutilizable

Cuando llama a un flujo de trabajo reutilizable, solo puede utilizar las siguientes palabras clave en el job que contiene la llamada:

* [`jobs.<job_id>.name`](/es/enterprise-server@3.22/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idname)
* [`jobs.<job_id>.uses`](/es/enterprise-server@3.22/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_iduses)
* [`jobs.<job_id>.with`](/es/enterprise-server@3.22/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idwith)
* [`jobs.<job_id>.with.<input_id>`](/es/enterprise-server@3.22/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idwithinput_id)
* [`jobs.<job_id>.secrets`](/es/enterprise-server@3.22/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idsecrets)
* [`jobs.<job_id>.secrets.<secret_id>`](/es/enterprise-server@3.22/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idsecretssecret_id)
* [`jobs.<job_id>.secrets.inherit`](/es/enterprise-server@3.22/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idsecretsinherit)
* [`jobs.<job_id>.strategy`](/es/enterprise-server@3.22/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idstrategy)
* [`jobs.<job_id>.needs`](/es/enterprise-server@3.22/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idneeds)
* [`jobs.<job_id>.if`](/es/enterprise-server@3.22/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idif)
* [`jobs.<job_id>.concurrency`](/es/enterprise-server@3.22/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idconcurrency)
* [`jobs.<job_id>.permissions`](/es/enterprise-server@3.22/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idpermissions)

  > \[!NOTE]
  >
  > * Si no se especifica `jobs.<job_id>.permissions` en el trabajo que inicia la llamada, el flujo de trabajo que la recibe tendrá los permisos predeterminados de `GITHUB_TOKEN`. Para más información, consulta [Sintaxis del flujo de trabajo para Acciones de GitHub](/es/enterprise-server@3.22/actions/reference/workflows-and-actions/workflow-syntax#permissions).
  > * Los permisos de `GITHUB_TOKEN` que se trasladaron desde el flujo de trabajo que inició la llamada solo pueden reducirse (no aumentarse) a través del flujo de trabajo que recibió la llamada.
  > * Si usa `jobs.<job_id>.concurrency.cancel-in-progress: true`, no use el mismo valor para `jobs.<job_id>.concurrency.group` en los flujos de trabajo de receptor de llamada y autor de llamada, ya que esto hará que el flujo de trabajo que ya se esté ejecutando se cancele. El flujo de trabajo llamado utiliza el nombre del flujo de trabajo que realiza la llamada en ${{ github.workflow }}, por lo que si se usa este contexto como valor de `jobs.<job_id>.concurrency.group` tanto en el flujo de trabajo que hace la llamada como en al que llaman, el flujo de trabajo que realiza la llamada se cancelará cuando se ejecute el flujo de trabajo llamado.

### Uso de ejecutores en flujos de trabajo reutilizables

#### Ejecutores alojados en GitHub

La asignación de ejecutores alojados en GitHub siempre se evalúa usando solo el contexto del proceso o entidad que llama. La facturación de los ejecutores alojados en GitHub siempre está asociada al proceso o entidad que invoca. El flujo de trabajo del proceso o entidad que realiza la llamada no puede usar ejecutores alojados en GitHub a través del repositorio al que se llama. Para más información, consulta [Ejecutores hospedados en GitHub](/es/enterprise-server@3.22/actions/concepts/runners/github-hosted-runners).

#### Ejecutores autohospedados

Los flujos de trabajo que se llaman que pertenecen al mismo usuario o organización o empresa como el flujo de trabajo que realiza la llamada puede acceder a los ejecutores autohospedados según el contexto del proceso o entidad que invoca. Esto significa que el flujo de trabajo llamado puede acceder a los ejecutores auto-hospedados que están:

* En el repositorio del llamador
* En la organización o la empresa del repositorio que invoca, siempre que el ejecutor esté disponible para el repositorio que invoca

### Acceso y permisos para flujos de trabajo anidados

Se producirá un error en un flujo de trabajo que contenga flujos de trabajo reutilizables anidados si alguno de los flujos de trabajo anidados no es accesible para el flujo de trabajo inicial del autor de la llamada. Para más información, consulta [Acceso a flujos de trabajo reutilizables](#access-to-reusable-workflows).

Los permisos `GITHUB_TOKEN` solo pueden ser los mismos o más restrictivos en los flujos de trabajo anidados. Por ejemplo, en la cadena de flujo de trabajo A > B > C, si el flujo de trabajo A tiene permiso de token `package: read`, entonces B y C no pueden tener permiso `package: write`. Para más información, consulta [Uso de GITHUB\_TOKEN para la autenticación en flujos de trabajo](/es/enterprise-server@3.22/actions/tutorials/authenticate-with-github_token).

Para obtener información sobre cómo usar la API para determinar qué archivos de flujo de trabajo han participado en una ejecución de flujo de trabajo determinada, consulta [Reutilización de flujos de trabajo](/es/enterprise-server@3.22/actions/how-tos/reuse-automations/reuse-workflows#monitoring-which-workflows-are-being-used).

### Comportamiento de los flujos de trabajo reutilizables al volver a ejecutar trabajos

Se puede hacer referencia a flujos de trabajo reutilizables de repositorios públicos mediante SHA, una etiqueta de versión o un nombre de rama. Para más información, consulta [Reutilización de flujos de trabajo](/es/enterprise-server@3.22/actions/how-tos/reuse-automations/reuse-workflows#calling-a-reusable-workflow).

Cuando se vuelve a ejecutar un flujo de trabajo que usa un flujo de trabajo reutilizable y la referencia no es SHA, hay algunos comportamientos que se deben tener en cuenta:

* Al volver a ejecutar todos los trabajos de un flujo de trabajo, se usará el flujo de trabajo reutilizable de la referencia especificada. Para más información sobre cómo volver a ejecutar todos los trabajos de un flujo de trabajo, consulta [Volver a ejecutar flujos de trabajo y tareas](/es/enterprise-server@3.22/actions/how-tos/manage-workflow-runs/re-run-workflows-and-jobs#re-running-all-the-jobs-in-a-workflow).
* Volver a ejecutar trabajos con errores o un trabajo específico en un flujo de trabajo usará el flujo de trabajo reutilizable desde el mismo SHA de confirmación del primer intento. Para más información sobre cómo volver a ejecutar todos los trabajos con error de un flujo de trabajo, consulta [Volver a ejecutar flujos de trabajo y tareas](/es/enterprise-server@3.22/actions/how-tos/manage-workflow-runs/re-run-workflows-and-jobs#re-running-failed-jobs-in-a-workflow). Para más información sobre cómo volver a ejecutar un trabajo específico de un flujo de trabajo, consulta [Volver a ejecutar flujos de trabajo y tareas](/es/enterprise-server@3.22/actions/how-tos/manage-workflow-runs/re-run-workflows-and-jobs#re-running-a-specific-job-in-a-workflow).

### Contexto `github`

Cuando un flujo de trabajo que inicia llamadas activa uno reutilizable, el contexto `github` siempre se asocia con el primer flujo. El flujo de trabajo al que se llama se le concede acceso automáticamente a `github.token` y `secrets.GITHUB_TOKEN`. Para obtener más información sobre el contexto de `github`, consulta [Contextos de referencia](/es/enterprise-server@3.22/actions/reference/workflows-and-actions/contexts#github-context).

## Plantillas de flujos de trabajo

Información de referencia que se usará al crear plantillas de flujo de trabajo para tu organización.

### Marcador de posición `$default-branch`

Si necesitas hacer referencia a la rama predeterminada de un repositorio, puedes usar el marcador de posición `$default-branch` en la plantilla de flujo de trabajo. Cuando un flujo de trabajo se crea, el marcador de posición se reemplazará automáticamente con el nombre de la rama predeterminada del repositorio.

### Valores de marcador de posición en la clave `runs-on`

Los siguientes valores de la clave `runs-on` también se tratan como marcadores de posición:

* `ubuntu-latest` se reemplaza por `[ self-hosted ]`
* `windows-latest` se reemplaza por `[ self-hosted, windows ]`
* `macos-latest"` se reemplaza por `[ self-hosted, macOS ]`

### Ejemplo de archivo de plantilla de flujo de trabajo

Este archivo denominado `octo-organization-ci.yml` muestra un flujo de trabajo básico.

```yaml copy
name: Octo Organization CI
on:
  push:
    branches: [ $default-branch ]
  pull_request:
    branches: [ $default-branch ]
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v6
      - name: Run a one-line script
        run: echo Hello from Octo Organization
```

### Requisitos del archivo de metadatos

El archivo de metadatos debe tener el mismo nombre que el archivo de flujo de trabajo, pero en lugar de la extensión `.yml`, se le tiene que anexar `.properties.json`. Por ejemplo, un archivo denominado `octo-organization-ci.properties.json` contiene los metadatos del archivo de flujo de trabajo denominado `octo-organization-ci.yml`.

```json copy
{
    "name": "Octo Organization Workflow",
    "description": "Octo Organization CI workflow template.",
    "iconName": "example-icon",
    "categories": [
        "Go"
    ],
    "filePatterns": [
        "package.json$",
        "^Dockerfile",
        ".*\\.md$"
    ]
}
```

* `name`

- **Obligatorio.** El nombre del flujo de trabajo. Esta se muestra en la lista de flujos de trabajo disponibles.

* `description`

- **Obligatorio.** La descripción del flujo de trabajo. Esta se muestra en la lista de flujos de trabajo disponibles.

* `iconName`

- **Opcional.** Especifica un icono para el flujo de trabajo que se muestra en la lista de flujos de trabajo.
  `iconName` puede ser uno de los siguientes tipos:
  * Un archivo SVG que se almacena en el directorio `workflow-templates`. Para hacer referencia a un archivo, el valor debe ser el nombre de archivo sin la extensión de archivo. Por ejemplo, se hace referencia a un archivo SVG denominado `example-icon.svg` como `example-icon`.
  * Un icono del conjunto de [Octicons](https://primer.style/octicons/) de GitHub. Para hacer referencia a un octicon, el valor debe ser `octicon <icon name>`. Por ejemplo: `octicon smiley`.

* `categories`

- **Opcional.** Define las categorías en las que se muestra el flujo de trabajo. Puede usar nombres de categoría de las listas siguientes:
  * Nombres de categoría generales del repositorio [starter-workflows](https://github.com/actions/starter-workflows/blob/main/README.md#categories).
  * Idiomas lingüistas de la lista del repositorio [linguist](https://github.com/github-linguist/linguist/blob/main/lib/linguist/languages.yml).
  * Pilas técnicas admitidas en la lista en el repositorio [starter-workflows](https://github.com/github-starter-workflows/repo-analysis-partner/blob/main/tech_stacks.yml).

* `filePatterns`

- **Opcional.** Permite usar el flujo de trabajo si el repositorio del usuario tiene un archivo en su directorio raíz que coincide con una expresión regular definida.