Skip to content

액션과 재사용

개요

워크플로에서 자주 반복되는 단계(리포 체크아웃, 패키지 설치, 이미지 빌드)를 매번 처음부터 적는다면 금방 지저분해져요. GitHub Actions는 이런 반복 작업을 액션(Action)으로 캡슐화해서, 스텝 한 줄(uses:)로 재사용하게 해줘요. 이 페이지에서는 "남의 액션을 불러 쓰는 법"과 "우리 액션을 직접 만드는 법"을 다뤄요.

상위 문서: GitHub Actions · 워크플로 · 러너

핵심 개념

액션을 불러 쓰기. uses: 키워드에 <소유자>/<저장소>@<버전> 형태로 액션을 지정해요. 버전은 태그나 SHA로 고정해서 재현성 있게 쓰는 게 좋아요.

steps:
  - uses: actions/checkout@v4
  - uses: docker/build-push-action@v6
    with:
      push: true
      tags: harbor.local/api:latest

액션의 입력과 출력. 액션은 with:입력(input)을 받고, 결과를 출력(output)으로 내줘요. 출력은 ${{ steps.ID.outputs.X }}로 다음 스텝에서 참조해요. 이렇게 하면 액션 하나가 "입력 → 처리 → 출력"의 재사용 가능한 부품으로 동작해요.

액션의 종류. 직접 만들 때는 두 가지를 많이 써요.

  • JavaScript 액션 — Node.js로 작성하고 action.yml으로 메타데이터를 선언해요. 러너에 Node가 깔려 있어 빠르게 돌아가요.
  • 컴포지트(Composite) 액션 — 여러 스텝을 하나의 액션으로 묶는 방식이에요. YAML만으로 정의돼서 배우기 쉬워요.

action.yml 메타데이터. 액션 저장소 루트의 action.ymlname, description, inputs, outputs, runs를 적어요. 이것이 액션의 청사진이에요.

재사용 가능한 워크플로(Reusable Workflows). 스텝 수준의 액션 말고, 워크플로 전체를 재사용할 수도 있어요. workflow_call 이벤트로 정의하고 다른 워크플로에서 uses: 소유자/저장소/.github/workflows/파일.yml@버전처럼 호출해요. 입력(with)과 시크릿(secrets)을 넘길 수 있어요. 공통 CI 패턴이 여러 저장소에 반복될 때 유용해요.

주의점. 남의 액션을 쓸 때는 신뢰와 버전 고정이 중요해요. 검증 안 된 액션을 @main처럼 유동적으로 가리키면 나중에 내용이 바뀌어 문제가 생길 수 있어요. 가능한 SHA로 고정하거나, 널리 쓰이는 검증된 액션을 골라요.

실제 적용(데이터스케쳐스)

우리는 공식 actions/checkout으로 코드를 받고, docker/build-push-action으로 이미지를 빌드·push해요. 서비스마다 반복되는 "체크아웃 → 의존성 설치 → 테스트 → 빌드" 흐름은 컴포지트 액션이나 재사용 가능한 워크플로로 묶어서, 저장소마다 동일한 품질을 유지해요. 시크릿(레지스트리 자격증명 등)은 워크플로에서 ${{ secrets.X }}로 주입해요.

더 알아보기