Github Actions - About workflows

wondi·2025년 1월 22일

인프라구축/CI&CD

목록 보기
5/10

About workflows 워크플로우란?

  • 워크플로우는 하나 이상의 작업을 실행하는 구성 가능한 자동화된 프로세스
  • 워크플로우는 저장소에 저장된 YAML 파일로 정의되며, 저장소의 이벤트에 의해 실행되거나 수동으로 또는 정해진 일정에 따라 실행될 수 있다.

# Workflow basics (워크플로우 기본 구성요소)

워크플로우는 기본 구성 요소를 포함해야함
1. 워크플로우를 트리거할 하나 이상의 이벤트
2. 러너 머신에서 실행되는 하나 이상의 작업(jobs)
3. 각 작업은 여러 단계로 구성됨

  • 직접 정의한 스크립트 실행
  • 재사용 가능한 액션 실행

워크플로우의 갯수는 워크플로우 파일 수 x 트리거 횟수다.

yaml이 한 개이고, push 1번 했을 때

#폴더 구조
.github/workflows/
    ci.yml  # jobs 3개 포함
CI Pipeline 워크플로우 실행 #1
  ├─ build job (VM 1에서 실행)
  ├─ test job (VM 2에서 실행)
  └─ checkstyle job (VM 3에서 실행)
  • 워크플로우는 1번 실행됨
  • jobs 3개가 각각 VM에서 병렬적으로 실행됨

yaml이 3개이고, push 1번 했을 때

# 폴더구조
.github/workflows/
    build.yml
    test.yml
    checkstyle.yml
Build 워크플로우 실행 #1
  └─ build job (VM 1에서 실행)

Test 워크플로우 실행 #1
  └─ test job (VM 2에서 실행)

Checkstyle 워크플로우 실행 #1
  └─ checkstyle job (VM 3에서 실행)
  • 워크플로우는 3번 실행됨
  • jobs는 각각 VM에서 병렬적으로 실행됨

📨 event

# 1. Push 이벤트
on: push   # 코드를 push할 때마다 실행

# 2. 특정 브랜치 Push 이벤트
on:
  push:
    branches: [ main, dev ]  # main 또는 dev 브랜치에 push할 때만 실행

# 3. Pull Request 이벤트
on:
  pull_request:
    types: [opened, reopened]  # PR이 생성되거나 다시 열릴 때 실행

# 4. 스케줄 이벤트
on:
  schedule:
    - cron: '0 0 * * *'  # 매일 자정에 실행

# 5. 수동 실행 이벤트
on:
  workflow_dispatch:  # GitHub UI에서 수동으로 실행 가능

🧑‍💻 Jobs

Jobs에 build/ checkstyle/coverage를 넣는다면,
이 job들은 각각 새로운 독립된 가상머신에서 실행된다.

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - run: ./gradlew build

  checkstyle:
    needs: build  # build 작업이 성공해야 실행
    runs-on: ubuntu-latest
    steps:
      - run: ./gradlew checkstyle

  coverage:
    needs: build  # build 작업이 성공해야 실행
    runs-on: ubuntu-latest
    steps:
      - run: ./gradlew test

# Triggering a workflow (워크플로우 트리거)

워크플로우를 실행시키는 트리거 이벤트 종류
1. 저장소 내부 이벤트(push, pull request)
2. github 외부 이벤트
3. 예약된 시간
4. 수동 실행

Advanced workflow features (고급 기능들)

  1. 시크릿 저장
  • 비밀번호나 인증서 데이터를 Github에 시크릿으로 저장
  • 워크플로우에서 환경 변수로 사용가능
  1. 작업 의존성 설정
jobs:
  setup:
    runs-on: ubuntu-latest
    steps:
      - run: ./setup_server.sh
  build:
    needs: setup    # setup 작업이 완료되어야 실행
    steps:
      - run: ./build_server.sh
  1. 매트릭스 전략
  • 하나의 작업 정의로 여러 버전/ 환경에서 테스트
strategy:
  matrix:
    node: [14, 16]  # Node.js 14와 16 버전에서 각각 실행
  1. 의존성 캐싱
  • 자주 사용하는 의존성 파일들을 캐시하여 성능 향상
  • 같은 저장소의 모든 워크플로우에서 캐시 재사용 가능
  1. 데이터베이스와 서비스 컨테이너
  • 작업에 필요한 데이터베이스나 서비스를 임시 컨테이너로 생성
  • 작업 완료 후 자동제거
  1. 워크플로우 재사용
  • 다른 워크플로우 내에서 워크플로우 호출 가능
  • 코드 중복을 줄이고 유지보수성 향상
  1. 환경설정
  • 보호 규칙과 시크릿으로 작업 실행 제어
  • 각 작업은 하나의 환경만 참조 가능

참조 | github 공식문서

profile
Developer Wondi

0개의 댓글