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