{"meta":{"title":"Ejecución de variaciones de trabajos en un flujo de trabajo","intro":"Crea una matriz a fin de definir variaciones para cada trabajo.","product":"GitHub Actions","breadcrumbs":[{"href":"/es/actions","title":"GitHub Actions"},{"href":"/es/actions/how-tos","title":"Procedimientos"},{"href":"/es/actions/how-tos/write-workflows","title":"Escribir flujos de trabajo"},{"href":"/es/actions/how-tos/write-workflows/choose-what-workflows-do","title":"Seleccionar qué hacen los flujos de trabajo"},{"href":"/es/actions/how-tos/write-workflows/choose-what-workflows-do/run-job-variations","title":"Ejecución de variaciones de tareas"}],"documentType":"article"},"body":"# Ejecución de variaciones de trabajos en un flujo de trabajo\n\nCrea una matriz a fin de definir variaciones para cada trabajo.\n\n## Acerca de las estrategias de matriz\n\nUna estrategia de matriz permite usar variables en una definición de trabajo para crear automáticamente varias ejecuciones de trabajos basadas en las combinaciones de las variables. Por ejemplo, puedes usar una estrategia de matriz para probar el código en varias versiones de un lenguaje o en varios sistemas operativos.\n\n## Adición de una estrategia de matriz al flujo de trabajo\n\nUtilice `jobs.<job_id>.strategy.matrix` para definir una matriz de distintas configuraciones laborales. En la matriz, define una o más variables seguidas de una matriz de valores. Por ejemplo, la matriz siguiente tiene una variable llamada `version` con el valor `[10, 12, 14]` y una variable llamada `os` con el valor `[ubuntu-latest, windows-latest]`:\n\n```yaml\njobs:\n  example_matrix:\n    strategy:\n      matrix:\n        version: [10, 12, 14]\n        os: [ubuntu-latest, windows-latest]\n```\n\nSe ejecutará un trabajo para cada combinación posible de las variables. En este ejemplo, el flujo de trabajo ejecutará seis trabajos, uno por cada combinación de las variables `os` y `version`.\n\nLa matriz anterior creará los trabajos en el orden siguiente.\n\n* `{version: 10, os: ubuntu-latest}`\n* `{version: 10, os: windows-latest}`\n* `{version: 12, os: ubuntu-latest}`\n* `{version: 12, os: windows-latest}`\n* `{version: 14, os: ubuntu-latest}`\n* `{version: 14, os: windows-latest}`\n\nPara obtener información de referencia y ejemplos, consulta [Sintaxis del flujo de trabajo para Acciones de GitHub](/es/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idstrategymatrix).\n\n## Uso de contextos para crear matrices\n\nPara crear matrices con información sobre ejecuciones de flujo de trabajo, variables, entornos de ejecutor, trabajos y pasos, acceda a contextos mediante la sintaxis de expresión `${{ <context> }}` . Para obtener más información sobre los contextos, consulta [Contextos de referencia](/es/actions/reference/workflows-and-actions/contexts).\n\nPor ejemplo, el flujo de trabajo siguiente desencadena el evento `repository_dispatch` y usa información de la carga del evento para compilar la matriz. Cuando se crea un evento de distribución de repositorio con una carga como la siguiente, la variable de matriz `version` tendrá un valor de `[12, 14, 16]`. Para más información sobre el desencadenador `repository_dispatch`, consulta [Eventos que desencadenan flujos de trabajo](/es/actions/reference/workflows-and-actions/events-that-trigger-workflows#repository_dispatch).\n\n```json\n{\n  \"event_type\": \"test\",\n  \"client_payload\": {\n    \"versions\": [12, 14, 16]\n  }\n}\n```\n\n```yaml\non:\n  repository_dispatch:\n    types:\n      - test\n\njobs:\n  example_matrix:\n    runs-on: ubuntu-latest\n    strategy:\n      matrix:\n        version: ${{ github.event.client_payload.versions }}\n    steps:\n      - uses: actions/setup-node@v7\n        with:\n          node-version: ${{ matrix.version }}\n```\n\n## Expansión o incorporación de configuraciones de matriz\n\nPara expandir las configuraciones de matriz existentes o para agregar nuevas configuraciones, usa `jobs.<job_id>.strategy.matrix.include`. El valor de `include` es una lista de objetos.\n\nPor ejemplo, considera la matriz siguiente.\n\n```yaml\nstrategy:\n  matrix:\n    fruit: [apple, pear]\n    animal: [cat, dog]\n    include:\n      - color: green\n      - color: pink\n        animal: cat\n      - fruit: apple\n        shape: circle\n      - fruit: banana\n      - fruit: banana\n        animal: cat\n```\n\nDará como resultado seis trabajos con las siguientes combinaciones de matriz.\n\n* `{fruit: apple, animal: cat, color: pink, shape: circle}`\n* `{fruit: apple, animal: dog, color: green, shape: circle}`\n* `{fruit: pear, animal: cat, color: pink}`\n* `{fruit: pear, animal: dog, color: green}`\n* `{fruit: banana}`\n* `{fruit: banana, animal: cat}`\n\nCada entrada `include` se ha aplicado de las maneras siguientes.\n\n* `{color: green}` se agrega a todas las combinaciones de matriz original, porque se puede agregar sin sobrescribir ninguna parte de las combinaciones originales.\n* `{color: pink, animal: cat}` agrega `color:pink` solo a las combinaciones de matriz originales que incluyen `animal: cat`. Esto sobrescribe el `color: green` que fue agregado por la entrada `include` anterior.\n* `{fruit: apple, shape: circle}` agrega `shape: circle` solo a las combinaciones de matriz originales que incluyen `fruit: apple`.\n* `{fruit: banana}` no se puede agregar a ninguna combinación de matriz original sin sobrescribir un valor, por lo que se agrega como una combinación de matriz adicional.\n* `{fruit: banana, animal: cat}` no se puede agregar a ninguna combinación de matriz original sin sobrescribir un valor, por lo que se agrega como una combinación de matriz adicional. No se agrega a la combinación de matriz `{fruit: banana}` porque esa combinación no era una de las combinaciones de matriz original.\n\nPara obtener configuraciones de ejemplo y referencia, consulta [Sintaxis del flujo de trabajo para Acciones de GitHub](/es/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idstrategymatrixinclude).\n\n## Exclusión de configuraciones de matriz\n\nPara quitar configuraciones específicas definidas en la matriz, usa `jobs.<job_id>.strategy.matrix.exclude`.\n\nPor ejemplo, el siguiente flujo de trabajo ejecutará nueve trabajos: un trabajo para cada una de las 12 configuraciones menos el trabajo excluido que coincide con `{os: macos-latest, version: 12, environment: production}` y los dos trabajos excluidos que coinciden con `{os: windows-latest, version: 16}`.\n\n```yaml\nstrategy:\n  matrix:\n    os: [macos-latest, windows-latest]\n    version: [12, 14, 16]\n    environment: [staging, production]\n    exclude:\n      - os: macos-latest\n        version: 12\n        environment: production\n      - os: windows-latest\n        version: 16\nruns-on: ${{ matrix.os }}\n```\n\nPara información de referencia, consulta [Sintaxis del flujo de trabajo para Acciones de GitHub](/es/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idstrategymatrixexclude)\n\n## Uso de una salida para definir dos matrices\n\nPuede usar la salida de un trabajo para definir matrices para varios trabajos.\n\nPor ejemplo, el flujo de trabajo siguiente muestra cómo definir una matriz de valores en un trabajo, usar esa matriz en un segundo trabajo para generar artefactos y, a continuación, consumir esos artefactos en un tercer trabajo. Cada artefacto está asociado a un valor de la matriz.\n\n```yaml copy\nname: shared matrix\non:\n  push:\n  workflow_dispatch:\n\njobs:\n  define-matrix:\n    runs-on: ubuntu-latest\n\n    outputs:\n      colors: ${{ steps.colors.outputs.colors }}\n\n    steps:\n      - name: Define Colors\n        id: colors\n        run: |\n          echo 'colors=[\"red\", \"green\", \"blue\"]' >> \"$GITHUB_OUTPUT\"\n\n  produce-artifacts:\n    runs-on: ubuntu-latest\n    needs: define-matrix\n    strategy:\n      matrix:\n        color: ${{ fromJSON(needs.define-matrix.outputs.colors) }}\n\n    steps:\n      - name: Define Color\n        env:\n          color: ${{ matrix.color }}\n        run: |\n          echo \"$color\" > color\n      - name: Produce Artifact\n        uses: actions/upload-artifact@v4\n        with:\n          name: ${{ matrix.color }}\n          path: color\n\n  consume-artifacts:\n    runs-on: ubuntu-latest\n    needs:\n    - define-matrix\n    - produce-artifacts\n    strategy:\n      matrix:\n        color: ${{ fromJSON(needs.define-matrix.outputs.colors) }}\n\n    steps:\n    - name: Retrieve Artifact\n      uses: actions/download-artifact@v5\n      with:\n        name: ${{ matrix.color }}\n\n    - name: Report Color\n      run: |\n        cat color\n```\n\n## Administración de errores\n\nPara controlar cómo se gestionan los fallos de trabajos, usa `jobs.<job_id>.strategy.fail-fast` y `jobs.<job_id>.continue-on-error`.\n\nPuede usar `jobs.<job_id>.strategy.fail-fast` y `jobs.<job_id>.continue-on-error` de forma conjunta. Por ejemplo, el flujo de trabajo siguiente iniciará cuatro trabajos. En cada trabajo, `continue-on-error` se determina mediante el valor de `matrix.experimental`. Si se produce un error en alguno de los trabajos con `continue-on-error: false`, se cancelarán todos los trabajos en curso o en la cola. Si se produce un error en el trabajo con `continue-on-error: true`, el resto de trabajos no se verán afectados.\n\n```yaml\njobs:\n  test:\n    runs-on: ubuntu-latest\n    continue-on-error: ${{ matrix.experimental }}\n    strategy:\n      fail-fast: true\n      matrix:\n        version: [6, 7, 8]\n        experimental: [false]\n        include:\n          - version: 9\n            experimental: true\n```\n\nPara información de referencia, consulta [`jobs.<job_id>.strategy.fail-fast`](/es/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idstrategyfail-fast) y [`jobs.<job_id>.continue-on-error`](/es/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idcontinue-on-error).\n\n## Definición del número máximo de trabajos simultáneos\n\nPara establecer el número máximo de trabajos que se pueden ejecutar simultáneamente al usar una estrategia de trabajo `matrix`, usa `jobs.<job_id>.strategy.max-parallel`.\n\nPor ejemplo, el siguiente flujo de trabajo ejecutará un máximo de dos trabajos a la vez, aunque haya runners disponibles para ejecutar los seis trabajos al mismo tiempo.\n\n```yaml\njobs:\n  example_matrix:\n    strategy:\n      max-parallel: 2\n      matrix:\n        version: [10, 12, 14]\n        os: [ubuntu-latest, windows-latest]\n```\n\nPara obtener información de referencia, consulta [Sintaxis del flujo de trabajo para Acciones de GitHub](/es/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idstrategymax-parallel)."}