Skip to main content

Running variations of jobs in a workflow

Create a matrix to define variations for each job.

About matrix strategies

๋งคํŠธ๋ฆญ์Šค ์ „๋žต์„ ์‚ฌ์šฉํ•˜๋ฉด ๋‹จ์ผ ์ž‘์—… ์ •์˜์—์„œ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ณ€์ˆ˜์˜ ์กฐํ•ฉ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” ์—ฌ๋Ÿฌ ์ž‘์—… ์‹คํ–‰์„ ์ž๋™์œผ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋งคํŠธ๋ฆญ์Šค ์ „๋žต์„ ์‚ฌ์šฉํ•˜์—ฌ ์—ฌ๋Ÿฌ ๋ฒ„์ „์˜ ์–ธ์–ด ๋˜๋Š” ์—ฌ๋Ÿฌ ์šด์˜ ์ฒด์ œ์—์„œ ์ฝ”๋“œ๋ฅผ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Using a matrix strategy

jobs.<job_id>.strategy.matrix๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค์–‘ํ•œ ์ž‘์—… ๊ตฌ์„ฑ ํ–‰๋ ฌ์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ํ–‰๋ ฌ ๋‚ด์—์„œ ํ•˜๋‚˜ ์ด์ƒ์˜ ๋ณ€์ˆ˜์™€ ๊ฐ’ ๋ฐฐ์—ด์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์Œ ํ–‰๋ ฌ์—๋Š” ๊ฐ’ [10, 12, 14]์˜ version ๋ณ€์ˆ˜์™€ ๊ฐ’ [ubuntu-latest, windows-latest]์˜ os ๋ณ€์ˆ˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

jobs:
  example_matrix:
    strategy:
      matrix:
        version: [10, 12, 14]
        os: [ubuntu-latest, windows-latest]

๊ฐ€๋Šฅํ•œ ๊ฐ ๋ณ€์ˆ˜ ์กฐํ•ฉ์— ๋Œ€ํ•ด ์ž‘์—…์ด ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ์ด ์˜ˆ์ œ์—์„œ ์›Œํฌํ”Œ๋กœ๋Š” os ๋ฐ version ๋ณ€์ˆ˜์˜ ๊ฐ ์กฐํ•ฉ์— ๋Œ€ํ•ด ํ•˜๋‚˜์”ฉ 6๊ฐœ์˜ ์ž‘์—…์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ๋ณธ์ ์œผ๋กœ GitHub์€ ์‹คํ–‰๊ธฐ ๊ฐ€์šฉ์„ฑ์— ๋”ฐ๋ผ ๋ณ‘๋ ฌ๋กœ ์‹คํ–‰๋˜๋Š” ์ž‘์—… ์ˆ˜๋ฅผ ์ตœ๋Œ€ํ™”ํ•ฉ๋‹ˆ๋‹ค. ํ–‰๋ ฌ์˜ ๋ณ€์ˆ˜ ์ˆœ์„œ์— ๋”ฐ๋ผ ์ž‘์—…์ด ์ƒ์„ฑ๋˜๋Š” ์ˆœ์„œ๊ฐ€ ๊ฒฐ์ •๋ฉ๋‹ˆ๋‹ค. ์ •์˜ํ•œ ์ฒซ ๋ฒˆ์งธ ๋ณ€์ˆ˜๋Š” ์›Œํฌํ”Œ๋กœ ์‹คํ–‰์—์„œ ๋งŒ๋“  ์ฒซ ๋ฒˆ์งธ ์ž‘์—…์ด ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์œ„์˜ ํ–‰๋ ฌ์€ ๋‹ค์Œ ์ˆœ์„œ๋กœ ์ž‘์—…์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

  • {version: 10, os: ubuntu-latest}
  • {version: 10, os: windows-latest}
  • {version: 12, os: ubuntu-latest}
  • {version: 12, os: windows-latest}
  • {version: 14, os: ubuntu-latest}
  • {version: 14, os: windows-latest}

ํ–‰๋ ฌ์€ ์›Œํฌํ”Œ๋กœ ์‹คํ–‰๋‹น ์ตœ๋Œ€ 256๊ฐœ์˜ ์ž‘์—…์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ œํ•œ์€ GitHub ํ˜ธ์ŠคํŒ… ๋ฐ ์ž์ฒด ํ˜ธ์ŠคํŒ… ์‹คํ–‰๊ธฐ ๋‘˜ ๋‹ค์— ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

์ •์˜ํ•˜๋Š” ๋ณ€์ˆ˜๋Š” matrix ์ปจํ…์ŠคํŠธ์˜ ์†์„ฑ์ด ๋˜๋ฉฐ ์›Œํฌํ”Œ๋กœ ํŒŒ์ผ์˜ ๋‹ค๋ฅธ ์˜์—ญ์—์„œ ์†์„ฑ์„ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์˜ˆ์ œ์—์„œ๋Š” matrix.version ๋ฐ matrix.os๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž‘์—…์—์„œ ์‚ฌ์šฉ ์ค‘์ธ version ๋ฐ os์˜ ํ˜„์žฌ ๊ฐ’์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ "Accessing contextual information about workflow runs"์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

Example: Using a single-dimension matrix

๋‹จ์ผ ๋ณ€์ˆ˜๋ฅผ ์ง€์ •ํ•˜์—ฌ ๋‹จ์ผ ์ฐจ์› ํ–‰๋ ฌ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์Œ ์›Œํฌํ”Œ๋กœ๋Š” ๊ฐ’ [10, 12, 14]๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ณ€์ˆ˜ version์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ์›Œํฌํ”Œ๋กœ๋Š” ๋ณ€์ˆ˜์˜ ๊ฐ ๊ฐ’์— ๋Œ€ํ•ด ํ•˜๋‚˜์”ฉ 3๊ฐœ์˜ ์ž‘์—…์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ์ž‘์—…์€ matrix.version ์ปจํ…์ŠคํŠธ๋ฅผ ํ†ตํ•ด version ๊ฐ’์— ์•ก์„ธ์Šคํ•˜๊ณ  ํ•ด๋‹น ๊ฐ’์„ actions/setup-node ์ž‘์—…์— node-version์œผ๋กœ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.

jobs:
  example_matrix:
    strategy:
      matrix:
        version: [10, 12, 14]
    steps:
      - uses: actions/setup-node@v4
        with:
          node-version: ${{ matrix.version }}

Example: Using a multi-dimension matrix

์—ฌ๋Ÿฌ ๋ณ€์ˆ˜๋ฅผ ์ง€์ •ํ•˜์—ฌ ๋‹ค์ฐจ์› ๋งคํŠธ๋ฆญ์Šค๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ€๋Šฅํ•œ ๊ฐ ๋ณ€์ˆ˜ ์กฐํ•ฉ์— ๋Œ€ํ•ด ์ž‘์—…์ด ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์Œ ์›Œํฌํ”Œ๋กœ๋Š” ๋‘ ๊ฐœ์˜ ๋ณ€์ˆ˜๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

  • os ๋ณ€์ˆ˜์— ์ง€์ •๋œ ์šด์˜ ์ฒด์ œ 2๊ฐœ
  • version ๋ณ€์ˆ˜์— ์ง€์ •๋œ Node.js ๋ฒ„์ „ 3๊ฐœ

์›Œํฌํ”Œ๋กœ๋Š” os ๋ฐ version ๋ณ€์ˆ˜์˜ ๊ฐ ์กฐํ•ฉ์— ๋Œ€ํ•ด ํ•˜๋‚˜์”ฉ 6๊ฐœ์˜ ์ž‘์—…์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ์ž‘์—…์€ runs-on ๊ฐ’์„ ํ˜„์žฌ os ๊ฐ’์œผ๋กœ ์„ค์ •ํ•˜๊ณ  ํ˜„์žฌ version ๊ฐ’์„ actions/setup-node ์ž‘์—…์— ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.

jobs:
  example_matrix:
    strategy:
      matrix:
        os: [ubuntu-22.04, ubuntu-20.04]
        version: [10, 12, 14]
    runs-on: ${{ matrix.os }}
    steps:
      - uses: actions/setup-node@v4
        with:
          node-version: ${{ matrix.version }}

๋งคํŠธ๋ฆญ์Šค์˜ ๋ณ€์ˆ˜ ๊ตฌ์„ฑ์€ object์˜ array์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

matrix:
  os:
    - ubuntu-latest
    - macos-latest
  node:
    - version: 14
    - version: 20
      env: NODE_OPTIONS=--openssl-legacy-provider

์ด ๋งคํŠธ๋ฆญ์Šค๋Š” ํ•ด๋‹น ์ปจํ…์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ 4๊ฐœ์˜ ์ž‘์—…์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

- matrix.os: ubuntu-latest
  matrix.node.version: 14
- matrix.os: ubuntu-latest
  matrix.node.version: 20
  matrix.node.env: NODE_OPTIONS=--openssl-legacy-provider
- matrix.os: macos-latest
  matrix.node.version: 14
- matrix.os: macos-latest
  matrix.node.version: 20
  matrix.node.env: NODE_OPTIONS=--openssl-legacy-provider

Example: Using contexts to create matrices

์ปจํ…์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋งคํŠธ๋ฆญ์Šค๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ปจํ…์ŠคํŠธ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ "Accessing contextual information about workflow runs"๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์Œ ์›Œํฌํ”Œ๋กœ๋Š” repository_dispatch ์ด๋ฒคํŠธ์—์„œ ํŠธ๋ฆฌ๊ฑฐํ•˜๊ณ  ์ด๋ฒคํŠธ ํŽ˜์ด๋กœ๋“œ์˜ ์ •๋ณด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋งคํŠธ๋ฆญ์Šค๋ฅผ ๋นŒ๋“œํ•ฉ๋‹ˆ๋‹ค. ์•„๋ž˜์™€ ๊ฐ™์€ ํŽ˜์ด๋กœ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ๋””์ŠคํŒจ์น˜ ์ด๋ฒคํŠธ๋ฅผ ๋งŒ๋“ค๋ฉด ๋งคํŠธ๋ฆญ์Šค version ๋ณ€์ˆ˜๊ฐ€ [12, 14, 16] ๊ฐ’์„ ๊ฐ–์Šต๋‹ˆ๋‹ค. repository_dispatch ํŠธ๋ฆฌ๊ฑฐ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ "์›Œํฌํ”Œ๋กœ๋ฅผ ํŠธ๋ฆฌ๊ฑฐํ•˜๋Š” ์ด๋ฒคํŠธ"์„ ์ฐธ์กฐํ•˜์„ธ์š”.

{
  "event_type": "test",
  "client_payload": {
    "versions": [12, 14, 16]
  }
}
on:
  repository_dispatch:
    types:
      - test
 
jobs:
  example_matrix:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        version: ${{ github.event.client_payload.versions }}
    steps:
      - uses: actions/setup-node@v4
        with:
          node-version: ${{ matrix.version }}

Expanding or adding matrix configurations

jobs.<job_id>.strategy.matrix.include๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ธฐ์กด ํ–‰๋ ฌ ๊ตฌ์„ฑ์„ ํ™•์žฅํ•˜๊ฑฐ๋‚˜ ์ƒˆ ๊ตฌ์„ฑ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. include ๊ฐ’์€ ๊ฐœ์ฒด ๋ชฉ๋ก์ž…๋‹ˆ๋‹ค.

include ๋ชฉ๋ก์˜ ๊ฐ ๊ฐœ์ฒด์—์„œ ํ‚ค:๊ฐ’ ์Œ์ด ์›๋ž˜ ํ–‰๋ ฌ ๊ฐ’์„ ๋ฎ์–ด์“ฐ์ง€ ์•Š์œผ๋ฉด ๊ฐœ์ฒด์˜ ํ‚ค:๊ฐ’ ์Œ์ด ๊ฐ ํ–‰๋ ฌ ์กฐํ•ฉ์— ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค. ๊ฐœ์ฒด๋ฅผ ํ–‰๋ ฌ ์กฐํ•ฉ์— ์ถ”๊ฐ€ํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ ๋Œ€์‹  ์ƒˆ ํ–‰๋ ฌ ์กฐํ•ฉ์ด ๋งŒ๋“ค์–ด์ง‘๋‹ˆ๋‹ค. ์›๋ž˜ ํ–‰๋ ฌ ๊ฐ’์€ ๋ฎ์–ด์“ฐ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์ถ”๊ฐ€๋œ ํ–‰๋ ฌ ๊ฐ’์„ ๋ฎ์–ด์“ธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ์ด ํ–‰๋ ฌ์€

strategy:
  matrix:
    fruit: [apple, pear]
    animal: [cat, dog]
    include:
      - color: green
      - color: pink
        animal: cat
      - fruit: apple
        shape: circle
      - fruit: banana
      - fruit: banana
        animal: cat

๋‹ค์Œ ํ–‰๋ ฌ ์กฐํ•ฉ์„ ์‚ฌ์šฉํ•˜์—ฌ 6๊ฐœ ์ž‘์—…์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

  • {fruit: apple, animal: cat, color: pink, shape: circle}
  • {fruit: apple, animal: dog, color: green, shape: circle}
  • {fruit: pear, animal: cat, color: pink}
  • {fruit: pear, animal: dog, color: green}
  • {fruit: banana}
  • {fruit: banana, animal: cat}

์ด๋•Œ ๋‹ค์Œ ๋…ผ๋ฆฌ๋ฅผ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.

  • {color: green}๋Š” ์›๋ž˜ ์กฐํ•ฉ์˜ ์ผ๋ถ€๋ฅผ ๋ฎ์–ด์“ฐ์ง€ ์•Š๊ณ  ์ถ”๊ฐ€๋  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๋ชจ๋“  ์›๋ž˜ ํ–‰๋ ฌ ์กฐํ•ฉ์— ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค.
  • {color: pink, animal: cat}๋Š” animal: cat์„ ํฌํ•จํ•˜๋Š” ์›๋ž˜ ํ–‰๋ ฌ ์กฐํ•ฉ์—๋งŒ color:pink์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์ด์ „ include ํ•ญ๋ชฉ์ด ์ถ”๊ฐ€ํ•œ color: green์„ ๋ฎ์–ด์”๋‹ˆ๋‹ค.
  • {fruit: apple, shape: circle}๋Š” fruit: apple์„ ํฌํ•จํ•˜๋Š” ์›๋ž˜ ํ–‰๋ ฌ ์กฐํ•ฉ์—๋งŒ shape: circle์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
  • {fruit: banana}๋Š” ๊ฐ’์„ ๋ฎ์–ด์“ฐ์ง€ ์•Š๊ณ ๋Š” ์›๋ž˜ ํ–‰๋ ฌ ์กฐํ•ฉ์— ์ถ”๊ฐ€๋  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ์ถ”๊ฐ€ ํ–‰๋ ฌ ์กฐํ•ฉ์œผ๋กœ ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค.
  • {fruit: banana, animal: cat}๋Š” ๊ฐ’์„ ๋ฎ์–ด์“ฐ์ง€ ์•Š๊ณ ๋Š” ์›๋ž˜ ํ–‰๋ ฌ ์กฐํ•ฉ์— ์ถ”๊ฐ€๋  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ์ถ”๊ฐ€ ํ–‰๋ ฌ ์กฐํ•ฉ์œผ๋กœ ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค. {fruit: banana} ํ–‰๋ ฌ ์กฐํ•ฉ์€ ์›๋ž˜ ํ–‰๋ ฌ ์กฐํ•ฉ ์ค‘ ํ•˜๋‚˜๊ฐ€ ์•„๋‹ˆ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ํ•ด๋‹น ์กฐํ•ฉ์— ์ถ”๊ฐ€ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

Example: Expanding configurations

์˜ˆ๋ฅผ ๋“ค์–ด, ๋‹ค์Œ ์›Œํฌํ”Œ๋กœ๋Š” os ๋ฐ node์˜ ๊ฐ ์กฐํ•ฉ์— ๋Œ€ํ•ด ํ•˜๋‚˜์”ฉ 4๊ฐœ์˜ ์ž‘์—…์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. windows-latest์˜ os ๊ฐ’๊ณผ 16์˜ node ๊ฐ’์— ๋Œ€ํ•œ ์ž‘์—…์ด ์‹คํ–‰๋˜๋ฉด 6 ๊ฐ’์„ ์‚ฌ์šฉํ•˜๋Š” npm์ด๋ผ๋Š” ์ถ”๊ฐ€ ๋ณ€์ˆ˜๊ฐ€ ์ž‘์—…์— ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

jobs:
  example_matrix:
    strategy:
      matrix:
        os: [windows-latest, ubuntu-latest]
        node: [14, 16]
        include:
          - os: windows-latest
            node: 16
            npm: 6
    runs-on: ${{ matrix.os }}
    steps:
      - uses: actions/setup-node@v4
        with:
          node-version: ${{ matrix.node }}
      - if: ${{ matrix.npm }}
        run: npm install -g npm@${{ matrix.npm }}
      - run: npm --version

Example: Adding configurations

์˜ˆ๋ฅผ ๋“ค์–ด ์ด ๋งคํŠธ๋ฆญ์Šค๋Š” ๋งคํŠธ๋ฆญ์Šค์˜ os ๋ฐ version ๊ฐ ์กฐํ•ฉ์— ๋Œ€ํ•ด ํ•˜๋‚˜์”ฉ 10๊ฐœ์˜ ์ž‘์—…๊ณผ windows-latest์˜ os ๊ฐ’๊ณผ 17์˜ version ๊ฐ’์— ๋Œ€ํ•œ ์ž‘์—…์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

jobs:
  example_matrix:
    strategy:
      matrix:
        os: [macos-latest, windows-latest, ubuntu-latest]
        version: [12, 14, 16]
        include:
          - os: windows-latest
            version: 17

๋งคํŠธ๋ฆญ์Šค ๋ณ€์ˆ˜๋ฅผ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด include ์•„๋ž˜์˜ ๋ชจ๋“  ๊ตฌ์„ฑ์ด ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์Œ ์›Œํฌํ”Œ๋กœ๋Š” ๊ฐ include ํ•ญ๋ชฉ์— ๋Œ€ํ•ด ํ•˜๋‚˜์”ฉ ๋‘ ๊ฐœ์˜ ์ž‘์—…์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์™„์ „ํžˆ ์ฑ„์›Œ์ง„ ๋งคํŠธ๋ฆญ์Šค ์—†์ด ๋งคํŠธ๋ฆญ์Šค ์ „๋žต์„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

jobs:
  includes_only:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        include:
          - site: "production"
            datacenter: "site-a"
          - site: "staging"
            datacenter: "site-b"

Excluding matrix configurations

๋งคํŠธ๋ฆญ์Šค์— ์ •์˜๋œ ํŠน์ • ๊ตฌ์„ฑ์„ ์ œ๊ฑฐํ•˜๋ ค๋ฉด jobs.<job_id>.strategy.matrix.exclude๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ œ์™ธ๋œ ๊ตฌ์„ฑ์€ ์ œ์™ธ๋˜๋ ค๋ฉด ๋ถ€๋ถ„ ์ผ์น˜์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์Œ ์›Œํฌํ”Œ๋กœ๋Š” 9๊ฐœ์˜ ์ž‘์—…์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. 12๊ฐœ ๊ตฌ์„ฑ ๊ฐ๊ฐ์— ๋Œ€ํ•ด ํ•˜๋‚˜์˜ ์ž‘์—…์—์„œ {os: macos-latest, version: 12, environment: production}๊ณผ ์ผ์น˜ํ•˜๋Š” ์ œ์™ธ๋œ ์ž‘์—… ํ•˜๋‚˜์™€ {os: windows-latest, version: 16}๊ณผ ์ผ์น˜ํ•˜๋Š” ์ œ์™ธ๋œ ์ž‘์—… 2๊ฐœ๋ฅผ ๋บ€ ๊ฐ’์ž…๋‹ˆ๋‹ค.

strategy:
  matrix:
    os: [macos-latest, windows-latest]
    version: [12, 14, 16]
    environment: [staging, production]
    exclude:
      - os: macos-latest
        version: 12
        environment: production
      - os: windows-latest
        version: 16
runs-on: ${{ matrix.os }}

์ฐธ๊ณ : ๋ชจ๋“  include ์กฐํ•ฉ์€ exclude ๋‹ค์Œ์— ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค. include๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด์ „์— ์ œ์™ธ๋œ ์กฐํ•ฉ์„ ๋‹ค์‹œ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Example: Using an output to define two matrices

ํ•œ ์ž‘์—…์˜ ์ถœ๋ ฅ์„ ์‚ฌ์šฉํ•˜์—ฌ ์—ฌ๋Ÿฌ ์ž‘์—…์— ๋Œ€ํ•œ ํ–‰๋ ฌ์„ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์Œ ์›Œํฌํ”Œ๋กœ๋Š” ํ•œ ์ž‘์—…์—์„œ ๊ฐ’ ํ–‰๋ ฌ์„ ์ •์˜ํ•˜๊ณ , ๋‘ ๋ฒˆ์งธ ์ž‘์—…์—์„œ ํ•ด๋‹น ํ–‰๋ ฌ์„ ์‚ฌ์šฉํ•˜์—ฌ ์•„ํ‹ฐํŒฉํŠธ๋ฅผ ์ƒ์„ฑํ•œ ๋‹ค์Œ, ์„ธ ๋ฒˆ์งธ ์ž‘์—…์—์„œ ํ•ด๋‹น ์•„ํ‹ฐํŒฉํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ณด์—ฌ ์ค๋‹ˆ๋‹ค. ๊ฐ ์•„ํ‹ฐํŒฉํŠธ๊ฐ€ ํ–‰๋ ฌ์˜ ๊ฐ’๊ณผ ์—ฐ๊ฒฐ๋ฉ๋‹ˆ๋‹ค.

YAML
name: shared matrix
on:
  push:
  workflow_dispatch:

jobs:
  define-matrix:
    runs-on: ubuntu-latest

    outputs:
      colors: ${{ steps.colors.outputs.colors }}

    steps:
      - name: Define Colors
        id: colors
        run: |
          echo 'colors=["red", "green", "blue"]' >> "$GITHUB_OUTPUT"

  produce-artifacts:
    runs-on: ubuntu-latest
    needs: define-matrix
    strategy:
      matrix:
        color: ${{ fromJSON(needs.define-matrix.outputs.colors) }}

    steps:
      - name: Define Color
        env:
          color: ${{ matrix.color }}
        run: |
          echo "$color" > color
      - name: Produce Artifact
        uses: actions/upload-artifact@v4
        with:
          name: ${{ matrix.color }}
          path: color

  consume-artifacts:
    runs-on: ubuntu-latest
    needs:
    - define-matrix
    - produce-artifacts
    strategy:
      matrix:
        color: ${{ fromJSON(needs.define-matrix.outputs.colors) }}

    steps:
    - name: Retrieve Artifact
      uses: actions/download-artifact@v4
      with:
        name: ${{ matrix.color }}

    - name: Report Color
      run: |
        cat color

Handling failures

jobs.<job_id>.strategy.fail-fast ๋ฐ jobs.<job_id>.continue-on-error๋กœ ์ž‘์—… ์˜ค๋ฅ˜๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

jobs.<job_id>.strategy.fail-fast๋Š” ์ „์ฒด ํ–‰๋ ฌ์— ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. jobs.<job_id>.strategy.fail-fast๊ฐ€ true๋กœ ์„ค์ •๋˜๊ฑฐ๋‚˜ ์‹์ด true๋กœ ํ‰๊ฐ€๋˜๋ฉด GitHub์€(๋Š”) ํ–‰๋ ฌ์˜ ์ž‘์—…์ด ์‹คํŒจํ•  ๊ฒฝ์šฐ ํ–‰๋ ฌ์˜ ์ง„ํ–‰ ์ค‘์ธ ์ž‘์—…๊ณผ ๋Œ€๊ธฐ ์ค‘์ธ ์ž‘์—…์„ ๋ชจ๋‘ ์ทจ์†Œํ•ฉ๋‹ˆ๋‹ค. ์ด ์†์„ฑ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ true์ž…๋‹ˆ๋‹ค.

jobs.<job_id>.continue-on-error๋Š” ๋‹จ์ผ ์ž‘์—…์— ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. jobs.<job_id>.continue-on-error๊ฐ€ true์ธ ๊ฒฝ์šฐ jobs.<job_id>.continue-on-error: true์ธ ์ž‘์—…์ด ์‹คํŒจํ•˜๋”๋ผ๋„ ํ–‰๋ ฌ์˜ ๋‹ค๋ฅธ ์ž‘์—…์€ ๊ณ„์† ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

jobs.<job_id>.strategy.fail-fast ๋ฐ jobs.<job_id>.continue-on-error๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์Œ ์›Œํฌํ”Œ๋กœ๋Š” 4๊ฐœ์˜ ์ž‘์—…์„ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ์ž‘์—…์— ๋Œ€ํ•ด continue-on-error๋Š” matrix.experimental ๊ฐ’์œผ๋กœ ๊ฒฐ์ •๋ฉ๋‹ˆ๋‹ค. continue-on-error: false์ธ ์ž‘์—…์ด ์‹คํŒจํ•˜๋ฉด ์ง„ํ–‰ ์ค‘์ด๊ฑฐ๋‚˜ ํ์— ๋Œ€๊ธฐ ์ค‘์ธ ๋ชจ๋“  ์ž‘์—…์ด ์ทจ์†Œ๋ฉ๋‹ˆ๋‹ค. continue-on-error: true์ธ ์ž‘์—…์ด ์‹คํŒจํ•˜๋ฉด ๋‹ค๋ฅธ ์ž‘์—…์€ ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

jobs:
  test:
    runs-on: ubuntu-latest
    continue-on-error: ${{ matrix.experimental }}
    strategy:
      fail-fast: true
      matrix:
        version: [6, 7, 8]
        experimental: [false]
        include:
          - version: 9
            experimental: true

Defining the maximum number of concurrent jobs

๊ธฐ๋ณธ์ ์œผ๋กœ GitHub์€ ์‹คํ–‰๊ธฐ ๊ฐ€์šฉ์„ฑ์— ๋”ฐ๋ผ ๋ณ‘๋ ฌ๋กœ ์‹คํ–‰๋˜๋Š” ์ž‘์—… ์ˆ˜๋ฅผ ์ตœ๋Œ€ํ™”ํ•ฉ๋‹ˆ๋‹ค. matrix ์ž‘์—… ์ „๋žต์„ ์‚ฌ์šฉํ•  ๋•Œ ๋™์‹œ์— ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ์ž‘์—… ์ˆ˜๋ฅผ ์„ค์ •ํ•˜๋ ค๋ฉด jobs.<job_id>.strategy.max-parallel์„ ์‚ฌ์šฉํ•˜์„ธ์š”.

์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์Œ ์›Œํฌํ”Œ๋กœ๋Š” ํ•œ ๋ฒˆ์— 6๊ฐœ์˜ ์ž‘์—…์„ ๋ชจ๋‘ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์‹คํ–‰์ž๊ฐ€ ์žˆ๋”๋ผ๋„ ํ•œ ๋ฒˆ์— ์ตœ๋Œ€ ๋‘ ๊ฐœ์˜ ์ž‘์—…๋งŒ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

jobs:
  example_matrix:
    strategy:
      max-parallel: 2
      matrix:
        version: [10, 12, 14]
        os: [ubuntu-latest, windows-latest]