나무모에 미러 (일반/밝은 화면)
최근 수정 시각 : 2025-11-09 11:09:29

GitHub Action

GHA에서 넘어옴

[[GitHub|
파일:GitHub 아이콘 화이트.svg파일:GitHub 로고 화이트.svg
]]
{{{#!wiki style="min-height: calc(1.5em + 5px); margin: 0 -10px -5px"
{{{#!folding [ 펼치기 · 접기 ]
{{{#!wiki style="margin: -5px -1px -11px"
<colbgcolor=#000,#000><colcolor=#fff,#fff> 관련 인물 톰 프레스턴 워너
서비스 저장소 · GitHub Pages · GitHub Action · GitHub Packages · GitHub Wiki · GitHub Gist · GitHub Copilot
클라이언트 GitHub CLI · GitHub Desktop · GitHub Mobile
오픈 소스 Electron · Atom · Linguist · Tree-sitter
관련 문서 사건 사고 · GitHub Universe · npm
}}}}}}}}} ||
파일:GitHub Actions.svg
1. 개요2. 구조3. 이벤트4. 특징5. 기타6. 외부 링크

1. 개요

GitHubCI/CD 자동화 서비스.

2. 구조

파일:overview-actions-simple.webp

각각의 액션은 워크플로우라는 가장 큰 단위로 구성되며, 저장소의 .github/workflows 폴더 아래에 각 워크플로우를 정의하는 YAML 파일을 작성해 생성할 수 있다.

하나의 워크플로우는 여러 job으로 구성되는데, 보통 하나의 job만을 가지지만 크로스 컴파일을 위해 matrix를 사용하는 경우 등 여러 job을 가지는 것도 가능하다. 하나의 job은 하나의 가상 머신 안에서 끝까지 순차적으로 실행되는데, 이 머신을 runner라고 한다. runner의 환경 설정 또한 워크플로우에서 정의 가능하기 때문에, 필요한 러너를 정의하고 원하는 job들을 특정 러너에 배치하는 것이 가능하다. 일례로 상술한 바와 같이 크로스 컴파일이 가능한 CD 환경을 구축한다면, x86ARM 두 아키텍처의 러너 R1과 R2를 정의한 다음, 지정된 환경에서 빌드를 수행하는 잡 J1과 J2를 만들어 알맞은 러너에서 돌릴 수 있다.

각각의 job은 또다시 여러 스텝으로 나누어지는데, 각각의 스텝은 '이 외부 액션을 사용해라(uses)', '이 셸 스크립트를 실행해라(run)' 등 개별 action에서 실행할 수 있는 최소 실행 단위이다. job에 정의된 각각의 스텝은 mutable하게 반드시 순차적으로 실행되기 때문에 side-effect를 마음껏 누릴 수 있다. 가령 이전 스텝에서 빌드를 수행하고, 다음 스텝에서 빌드된 결과물을 사용해 테스트를 수행한 다음, 마지막 스텝에서 배포를 하는 것이 명시적 종속성 없이도 가능하다. 모든 스텝이 완료되면 해당 job은 종료된다.

자주 사용되는 워크플로우를 사전에 설정하여 action.yml과 함께 패키징한 형태를 action이라 하며, 다른 액션에서 uses: 문법으로 불러와 재사용이 가능하다. 이때 스텝에서 with: 문법으로 액션 사이에 인자를 주고받거나 실행 결과를 환경변수에 담아 후속 스텝에서 steps.<스텝ID>.outputs.<키> 형태로 참조하는 것도 가능하다.

3. 이벤트

모든 이벤트 종류 보기

해당 워크플로우가 설치된 저장소에서 특정 상황이 일어날 때마다 해당 워크플로우를 자동으로 시작시키도록 정의할 수 있다. 수많은 이벤트가 있지만 대부분 CI 목적을 위해 push 등을 사용한다.

모든 커밋 push에 대해 실행하려면
on:
  push
와 같이 정의할 수 있다. 필터 문법을 사용해서 특정 브랜치나 특정 태그가 푸시될 때만 트리거 되도록 설정할 수도 있다. 가령 deploy 브랜치로 푸시되었을 때 CD를 수행하는 액션을 작성한다면
on:
  push:
    branches:
      - deploy
와 같이 쓸 수 있다. 비슷하게 릴리즈 태그가 푸시되었을 때 패키지를 빌드해 레지스트리에 공개하는 액션을 작성한다면
on:
  push:
    tags:
      - v*.*.*
와 같이 특정 regex에 맞는 태그만 필터링해 워크플로우를 실행하도록 설정할 수 있다.

cron trigger도 자주 쓰이는데 가령
on:
  schedule:
    - cron: 0 21 * * *
과 같이 작성하면 매일 한국 표준시 기준 6시에 특정 액션을 실행하게 된다.

액션을 수동으로 실행하고 싶은 경우, 리스닝할 이벤트 목록에 workflow_dispatch를 추가하면 해당 워크플로우 탭 UI에 해당 액션을 수동으로 실행할 수 있는 버튼이 생겨난다.

웹 UI의 저장소 액션 탭에서 특정 이벤트 유형에 따라 필터링하는 것도 가능하다.

4. 특징

5. 기타

6. 외부 링크


[1] You can build Docker container, JavaScript, and composite actions. #