[CI/CD] GitHub Actions Matrix 사용법과 예제
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에 있는buildjob의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
결과
- 실행한 결과를 이미지로 보여주는게 이해하기 편해 이미지를 첨부한다