[CI/CD] Github Actions Matrix 사용법과 예제

Github Actions Matrix 사용법과 예제


환경

  • Github Actions


배경


사용법

  • 문서에 나온대로 아래와 같은 방법으로 사용할 수 있다.
  • jobs.<job_id>.strategy.matrix에 행렬의 변수와 값을 정의해주면 된다.
  • 아래 예제의 경우 version에 해당하는 값들이 [10, 12, 14]이며 os도 마찬가지이다.
jobs:
  example_matrix:
    strategy:
      matrix:
        version: [10, 12, 14]
        os: [ubuntu-latest, windows-latest]


예시

Jekyll 빌드를 여러 OS에서 실행하고 싶은 경우 아래처럼 작성할 수 있다. 실제로 이 블로그에 사용하는 workflow 예제다.

코드

  • 문서에 나온대로 적용했으며 다른 부분들도 포함되어 있지만 jobs에 있는 build job의 strategy를 보면된다.
  • os: [ubuntu-22.04, ubuntu-20.04, macos-latest]를 통해 사용할 os를 목록으로 정의했고 runs-on: ${{ matrix.os }}에서 해당 os들을 사용하도록 작성했다.
  • jobs.<job_id>.strategy.fail-fast 설정이 true이거나 해당 식이 true로 평가되면, matrix의 어떤 job이라도 실패할 경우 matrix에서 진행 중인 job과 대기 중인 job을 모두 취소한다고 문서에 나와 있다. 여러개의 job에서 하나가 실패하더라도 나머지 job들은 계속 진행하도록 하고 싶어서 false로 적용했다.
name: Jekyll Build CI

on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]
  workflow_dispatch:
    inputs:
      ruby-version:
        required: true
        type: string
        default: "3.2.2"
        
jobs:
  build:
    name: jekyll build
    strategy:
      matrix:
        os: [ubuntu-22.04, ubuntu-20.04, macos-latest]
      fail-fast: false
    runs-on: ${{ matrix.os }}
    steps:
    - name: Checkout Repository
      uses: actions/checkout@v4
    - name: Setup Ruby
      uses: ruby/setup-ruby@v1
      with:
        ruby-version: ${{ github.event.inputs.ruby-version }}
    - name: Install Bundler
      run: |
        gem install bundler
    - name: Install Dependencies
      run: |
        bundle install
    - name: Build Jekyll Site
      run: |
        bundle exec jekyll build

결과

  • 실행한 결과를 이미지로 보여주는게 이해하기 편해 이미지를 첨부한다


참고자료