
GitHub Actions는 이벤트 기반 빌드·테스트·배포 자동화 엔진이다.
구조를 정확히 이해하면 어떤 CI/CD 파이프라인도 논리적으로 설계할 수 있다.
이 글은 Actions를 구성하는 핵심 요소(Workflow, Job, Step, Action)의 본질과 구조적 역할을 실무 관점에서 정리한다.
GitHub Actions는 아래 순서로 동작한다.
즉, 전체 자동화 설계는 "이벤트 → Workflow → Job → Step" 구조로 이해하면 충분하다.
Workflow는 .github/workflows/*.yml 파일로 구성된다.
한 저장소에 여러 Workflow를 둘 수 있으며 각각 독립적으로 실행된다.
최소 실행 예제:
name: basic-workflow
on: push
jobs:
hello:
runs-on: ubuntu-latest
steps:
- run: echo "Hello Actions"
구성 요소:
실무에서는 Workflow를 크게 두 가지로 구분한다.
특히 배포는 브랜치 필터 또는 태그 기반 트리거로 분리하는 것이 일반적이다.
Event Trigger는 Workflow가 "언제" 실행될지를 결정한다.
대표 트리거:
on:
push:
branches: [ main ]
pull_request:
branches: [ develop ]
추가 실무 트리거:
이벤트는 GitHub Actions의 실행 시작점이므로 구조 설계의 가장 중요한 요소다.
Job은 여러 Step의 묶음이며 기본적으로 병렬 실행된다.
jobs:
test:
runs-on: ubuntu-latest
build:
runs-on: ubuntu-latest
각 Job에는 아래 속성이 있다.
순차 실행 예제:
jobs:
test:
runs-on: ubuntu-latest
deploy:
runs-on: ubuntu-latest
needs: test
실무 기준 의존성 규칙:
Step은 Bash 명령 또는 Action 호출로 구성된다.
steps:
- name: Print
run: echo "Run Step"
여러 Step은 Job 내부에서 순서대로 실행된다.
Step 유형:
Step은 Side Effect가 없으며 Job 상태가 유지되지 않는다.
즉 모든 Step은 같은 환경에서 실행되지만 상태를 다음 Job에 넘기지 않는다.
Action은 Workflow의 재사용 가능한 기능 단위다.
공식 또는 커스텀 액션을 사용할 수 있으며, 대부분 실무에서는 아래 두 가지를 필수로 사용한다.
① checkout
- uses: actions/checkout@v4
② Node 환경 설치
- uses: actions/setup-node@v4
with:
node-version: 18
Action 구조를 이해해야 다음 단계에서 Composite Action 또는 Docker Action 개발이 가능해진다.
GitHub Actions의 장점은 기본적으로 Job이 병렬로 실행된다는 점이다.
예:
jobs:
lint:
runs-on: ubuntu-latest
test:
runs-on: ubuntu-latest
build:
runs-on: ubuntu-latest
효과:
병렬 실행을 막고 싶을 때만 needs 로 순차 흐름을 만들어 준다.
Step 또는 Job 단위로 조건 지정 가능.
if: github.ref == 'refs/heads/main'
민감 정보는 반드시 Secrets로 저장해야 하며 출력 금지.
Node 16·18·20 같은 다중 환경 테스트에 사용.
strategy:
matrix:
node: [16, 18, 20]
컨테이너 기반 환경에서 Actions 실행 가능.
container:
image: node:18
이 요소들은 CI/CD 확장에서 핵심적인 기능이다.
아래 예제는 복붙 즉시 실행 가능한 실무형 최소 CI 구성이다.
name: basic-ci
on: push
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 18
- run: npm ci
- run: npm test --if-present
build:
runs-on: ubuntu-latest
needs: test
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 18
- run: npm ci
- run: npm run build --if-present
구조적으로 완결된 기본 CI 파이프라인이다.
Actions 구조를 정확히 이해하면 CI/CD를 체계적으로 확장할 수 있다.
기본 구조를 확실히 이해해 두면 CI/CD 확장 시 불필요한 시행착오를 크게 줄일 수 있다.