Observação: Executores hospedados em GitHub não são atualmente compatíveis com GitHub Enterprise Server. Você pode ver mais informações sobre suporte futuro planejado no Itinerário público do GitHub.
Visão Geral
Use jobs.<job_id>.strategy to create a build matrix for your jobs. Você pode definir variações diferentes variações nas quais executar os trabalhos.
Criando uma matriz de diferentes configurações dos trabalhos
Use jobs.<job_id>.strategy.matrix to define a matrix of different job configurations. Uma matriz permite que você crie vários trabalhos que realizam a substituição de variável em uma definição de trabalho único. Por exemplo, você pode usar uma matriz para criar trabalhos para mais de uma versão compatível de uma linguagem de programação, sistema operacional ou ferramenta. Uma matriz reutiliza a configuração do trabalho e cria trabalho para cada matriz que você configurar.
Uma matriz de tarefas pode gerar 256 tarefas no máximo por execução do fluxo de trabalho. Este limite também se aplica a executores auto-hospedados.
Cada opção que você define na matriz tem uma chave e um valor. As chaves que você define tornam-se propriedades no contexto da matriz e você pode fazer referência � propriedade em outras áreas do seu arquivo de fluxo de trabalho. Por exemplo, se você definir a chave os que contém um array de sistemas operacionais, você poderá usar a propriedade matrix.os como o valor da palavra-chave runs-on para criar um trabalho para cada sistema operacional. Para obter mais informações, consulte "Contextos".
A ordem que você define uma matriz importa. A primeira opção que você definir será a primeira que será executada no seu fluxo de trabalho.
Exemplo: Executando várias versões do Node.js
Você pode especificar uma matriz ao fornecer um array para as opções de configuração. Por exemplo, se o executor for compatível com as versões 10, 12 e 14 do Node.js, você poderá especificar uma matriz dessas versões na matriz.
Este exemplo cria uma matriz de três trabalhos, definindo a chave nó para um array de três versões do Node.js. Para usar a matriz, o exemplo define a propriedade do contexto matrix.node como o valor do parâmetro setup-node de entrada da ação node-version. Como resultado, três trabalhos serão executados, cada uma usando uma versão diferente do Node.js.
strategy:
matrix:
node: [10, 12, 14]
steps:
# Configures the node version used on GitHub-hosted runners
- uses: actions/setup-node@v2
with:
# The Node.js version to configure
node-version: ${{ matrix.node }}
A ação setup-node ` é a forma recomendada de configurar uma versão do Node.js ao usar executores hospedados em GitHub. Para obter mais informações, consulte a ação [setup-node`](https://github.com/actions/setup-node).
Exemplo: Executando com vários sistemas operacionais
Você pode criar uma matriz para executar fluxos de trabalho em mais de um sistema operacional do executor. Você também pode especificar mais de uma configuração da matriz. Este exemplo cria uma matriz de 6 trabalhos:
- 2 sistemas operacionais especificados na array
os - 3 versões do Node.js especificadas na array do
nó
Ao definir uma matriz de sistemas operacionais, você deve definir o valor de runs-on para a propriedade de contexto de matrix.os que você definiu.
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-18.04, ubuntu-20.04]
node: [10, 12, 14]
steps:
- uses: actions/setup-node@v2
with:
node-version: ${{ matrix.node }}
Para encontrar opções de configuração compatíveis com executores hospedados em GitHub, consulte "Ambientes virtuais para executores hospedados em GitHub."
Example: Including additional values in combinations
Você pode adicionar opções de configurações para um trabalho de matriz de compilação existente. Por exemplo, se você quer usar uma versão específica do npm quando o trabalho que usa o windows-latest e a versão 8 do nó é executado, você pode usar incluir para especificar a opção adicional.
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [macos-latest, windows-latest, ubuntu-18.04]
node: [8, 10, 12, 14]
include:
# includes a new variable of npm with a value of 6
# for the matrix leg matching the os and version
- os: windows-latest
node: 8
npm: 6
Exemplo: Incluindo novas combinações
Você pode usar incluir para adicionar novos trabalhos a uma matriz de criação. Qualquer configuração sem correspondência de incluir será adicionadas � matriz. Por exemplo, se você quiser usar a versão 14 do nó para compilar em vários sistemas operacionais, mas quiser uma tarefa experimental extra a versão 15 do nó no Ubuntu, você poderá usar incluir para especificar essa tarefa adicional.
runs-on: ${{ matrix.os }}
strategy:
matrix:
node: [14]
os: [macos-latest, windows-latest, ubuntu-18.04]
include:
- node: 15
os: ubuntu-18.04
experimental: true
Exemplo: Excluindo configurações de uma matriz
Você pode remover uma configuração específica definida na matriz de compilação usando a opção exclude (excluir). exclude remove um trabalho definido pela matriz de compilação. O número de trabalhos é o produto cruzado do número de sistemas operacionais (os) incluídos nos arrays fornecidos por você, menos quaisquer subtrações (exclude).
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [macos-latest, windows-latest, ubuntu-18.04]
node: [8, 10, 12, 14]
exclude:
# excludes node 8 on macOS
- os: macos-latest
node: 8
Observação: Todas as combinações de incluir são processadas depois de excluir. Isso permite que você use incluir para voltar a adicionar combinações que foram excluídas anteriormente.
Usando variáveis de ambiente em uma matriz
Você pode adicionar variáveis de ambiente personalizadas para cada combinação de testes usando a chave include. Em seguida, você pode se referir � s variáveis de ambiente personalizadas em um passo posterior.
Neste exemplo, as entradas da matriz de node-version são configuradas para usar valores diferentes para as variáveis de ambiente do site e dos centros de dados. Em seguida, a etapa de Echo site details usa env: ${{ matrix.env }} para referir-se � s variáveis personalizadas:
name: Node.js CI
on: [push]
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
include:
- node-version: 10.x
site: "prod"
datacenter: "site-a"
- node-version: 12.x
site: "dev"
datacenter: "site-b"
steps:
- name: Echo site details
env:
SITE: ${{ matrix.site }}
DATACENTER: ${{ matrix.datacenter }}
run: echo $SITE $DATACENTER
Cancelando trabalhos restantes se um trabalho da matriz falhar
When jobs.<job_id>.strategy.fail-fast is set to true, GitHub cancels all in-progress jobs if any matrix job fails. Padrão: true
Definindo o número máximo de trabalhos simultâneos em uma matriz
Use jobs.<job_id>.strategy.max-parallel to set the maximum number of jobs that can run simultaneously when using a matrix job strategy. Por padrão, o GitHub maximizará o número de trabalhos executados em paralelo dependendo dos executores disponíveis nas máquinas virtuais hospedadas no GitHub.
strategy:
max-parallel: 2