Skip to main content
We publish frequent updates to our documentation, and translation of this page may still be in progress. For the most current information, please visit the English documentation.

이 버전의 GitHub Enterprise는 다음 날짜에 중단되었습니다. 2023-01-18. 중요한 보안 문제에 대해서도 패치 릴리스가 이루어지지 않습니다. 성능 향상, 향상된 보안, 새로운 기능을 위해 최신 버전의 GitHub Enterprise로 업그레이드합니다. 업그레이드에 대한 도움말은 GitHub Enterprise 지원에 문의하세요.

작업에 행렬 사용

각 작업에 대한 변형을 정의하는 행렬을 만듭니다.

참고: GitHub 호스트 실행기는 현재 GitHub Enterprise Server에서 지원되지 않습니다. GitHub public roadmap에 예정된 향후 지원에 대해 자세히 알아볼 수 있습니다.

행렬 전략 정보

매트릭스 전략을 사용하면 단일 작업 정의에서 변수를 사용하여 변수의 조합을 기반으로 하는 여러 작업 실행을 자동으로 만들 수 있습니다. 예를 들어 매트릭스 전략을 사용하여 여러 버전의 언어 또는 여러 운영 체제에서 코드를 테스트할 수 있습니다.

행렬 전략 사용

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]

가능한 각 변수 조합에 대해 작업이 실행됩니다. 이 예제에서 워크플로는 osversion 변수의 각 조합에 대해 하나씩 6개의 작업을 실행합니다.

기본적으로 GitHub Enterprise Server는 실행기 가용성에 따라 병렬로 실행되는 작업 수를 최대화합니다. 행렬의 변수 순서에 따라 작업이 생성되는 순서가 결정됩니다. 정의한 첫 번째 변수는 워크플로 실행에서 만든 첫 번째 작업이 됩니다. 예를 들어 위의 행렬은 다음 순서로 작업을 만듭니다.

  • {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 Enterprise Server 호스팅 및 자체 호스팅 실행기 둘 다에 적용됩니다.

정의하는 변수는 matrix 컨텍스트의 속성이 되며 워크플로 파일의 다른 영역에서 속성을 참조할 수 있습니다. 이 예제에서는 matrix.versionmatrix.os를 사용하여 작업에서 사용 중인 versionos의 현재 값에 액세스할 수 있습니다. 자세한 내용은 “컨텍스트”를 참조하세요.

예: 1차원 행렬 사용

단일 변수를 지정하여 단일 차원 행렬을 만들 수 있습니다.

예를 들어 다음 워크플로는 값 [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@v2
        with:
          node-version: ${{ matrix.version }}

예: 다차원 행렬 사용

여러 변수를 지정하여 다차원 매트릭스를 만들 수 있습니다. 가능한 각 변수 조합에 대해 작업이 실행됩니다.

예를 들어 다음 워크플로는 두 개의 변수를 지정합니다.

  • os 변수에 지정된 운영 체제 2개
  • version 변수에 지정된 Node.js 버전 3개

워크플로는 osversion 변수의 각 조합에 대해 하나씩 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@v2
        with:
          node-version: ${{ matrix.version }}

예제: 컨텍스트를 사용하여 행렬 만들기

컨텍스트를 사용하여 매트릭스를 만들 수 있습니다. 컨텍스트에 대한 자세한 내용은 “컨텍스트”를 참조하세요.

예를 들어 다음 워크플로는 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@v2
        with:
          node-version: ${{ matrix.version }}

행렬 구성 확장 또는 추가

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} 행렬 조합은 원래 행렬 조합 중 하나가 아니었기 때문에 해당 조합에 추가하지 않습니다.

예: 구성 확장

예를 들어, 다음 워크플로는 osnode의 각 조합에 대해 하나씩 6개 작업을 실행합니다. windows-latestos 값과 16node 값에 대한 작업이 실행되면 6 값을 사용하는 npm이라는 추가 변수가 작업에 포함됩니다.

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

예: 구성 추가

예를 들어 이 매트릭스는 매트릭스의 osversion 각 조합에 대해 하나씩 10개의 작업과 windows-latestos 값과 17version 값에 대한 작업을 실행합니다.

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"

행렬 구성 제외

매트릭스에 정의된 특정 구성을 제거하려면 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를 사용하여 이전에 제외된 조합을 다시 추가하는 데 사용할 수 있습니다.

오류 처리

jobs.<job_id>.strategy.fail-fastjobs.<job_id>.continue-on-error로 작업 오류를 처리하는 방법을 제어할 수 있습니다.

jobs.<job_id>.strategy.fail-fast는 전체 행렬에 적용됩니다. jobs.<job_id>.strategy.fail-fasttrue로 설정되면 GitHub Enterprise Server는 행렬의 작업이 실패할 경우 행렬의 진행 중인 작업과 대기 중인 작업을 모두 취소합니다. 이 속성은 기본적으로 true로 설정됩니다.

jobs.<job_id>.continue-on-error는 단일 작업에 적용됩니다. jobs.<job_id>.continue-on-errortrue인 경우 jobs.<job_id>.continue-on-error: true인 작업이 실패하더라도 행렬의 다른 작업은 계속 실행됩니다.

jobs.<job_id>.strategy.fail-fastjobs.<job_id>.continue-on-error를 함께 사용할 수 있습니다. 예를 들어 다음 워크플로는 4개의 작업을 시작합니다. 각 작업에 대해 continue-on-errormatrix.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

최대 동시 작업 수 정의

기본적으로 GitHub Enterprise Server은 실행기 가용성에 따라 병렬로 실행되는 작업 수를 최대화합니다. 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]