콘텐츠로 이동

GitHub Actions (CI/CD)

코드를 커밋할 때마다 "검사하고, 빌드하고, 이미지로 만들어 레지스트리에 올리는" 일을 사람이 매번 한다고 상상해 보세요. 빠져먹기 쉽고, 누가 언제 어떤 버전을 올렸는지도 헷갈려요. GitHub Actions는 저장소에서 일어나는 이벤트(push, PR 등)를 감지해 정해둔 작업을 자동으로 실행해 주는 CI/CD 도구예요.

"레포가 곧 배포의 출발점"이라서, 누가 언제 무엇을 빌드·배포했는지 모두 기록으로 남아요.

핵심 개념

워크플로(Workflow). 파이프라인의 단위로, .github/workflows/ 아래 YAML 파일로 선언해요. 어떤 이벤트에서 실행할지(on)와 어떤 작업을 할지(jobs)를 적습니다.

잡(Job)과 스텝(Step). 워크플로는 여러 잡으로 나뉘고, 잡은 여러 스텝으로 이뤄져요. 스텝은 uses:로 남이 만든 액션을 재사용하거나, run:으로 직접 명령을 실행해요. 각 잡은 별도의 러너(실행 환경)에서 돌아갑니다.

name: build
on: [push]
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - run: npm ci
      - run: npm run build

러너(Runner). 잡이 실제로 도는 환경이에요. GitHub이 제공하는 호스팅 러너(ubuntu-latest 등)를 쓰거나, 회사 자체 머신을 Self-hosted runner로 등록해 쓸 수 있어요.

시크릿(Secret). 파이프라인에서 필요한 비밀값(레지스트리 자격증명, API 키)은 YAML에 평문으로 쓰지 않고 저장소의 Secrets에 보관하고 ${{ secrets.X }}로 주입해요. 로그에 노출되지 않게 조심해야 해요.

사용 사례 / 실제 적용

저장소에 push가 일어나면 워크플로가 코드를 체크아웃해 테스트를 돌리고, 빌드해서 Docker 이미지로 만들고, 그 이미지를 레지스트리(Harbor)에 push하는 흐름을 자동화해요. 여기서 파이프라인이 끝나고, 그다음 배포 반영은 ArgoCD가 맡아요.

신경 쓸 지점은 두 가지예요. 첫째, 이미지 태그를 버전이나 커밋 해시로 남겨서 나중에 "이 배포가 정확히 어떤 코드였는지"를 되짚을 수 있게 해요. 둘째, 시크릿을 누출하지 않도록 권한을 최소화하고 로그를 점검해요.

하위 챕터

더 알아보기