Github Actions Matrix 사용법과 예제
환경
- Github Actions
배경
- 작업은 동일한데 일부 값들만 변경하여 CI/CD를 실행하고 싶은 경우가 있어서 찾아보고 적용하여 정리한다.
- 자세한 사용법과 예제는 https://docs.github.com/actions/writing-workflows/choosing-what-your-workflow-does/using-a-matrix-for-your-jobs에 나와있다.
사용법
- 문서에 나온대로 아래와 같은 방법으로 사용할 수 있다.
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
결과
- 실행한 결과를 이미지로 보여주는게 이해하기 편해 이미지를 첨부한다