liminfo

GitHub Actions Reference

GitHub Actions CI/CD 레퍼런스

30개 결과

GitHub Actions Reference 소개

GitHub Actions 레퍼런스는 .github/workflows/에 저장하는 GitHub Actions 워크플로 파일의 YAML 구문 치트 시트입니다. 워크플로 수준 설정(name, 파일 위치, permissions, 전역 env 변수, 불필요한 실행을 취소하는 concurrency 제어), 트리거 이벤트(브랜치 및 경로 필터가 포함된 on: push, pull_request 이벤트, cron 스케줄, 입력 파라미터가 있는 수동 workflow_dispatch, 재사용 가능 워크플로를 위한 workflow_call), 작업 정의(jobs 블록, Ubuntu/macOS/Windows 러너를 위한 runs-on, 작업 의존성을 위한 needs, 조건부 실행을 위한 if, postgres 및 redis 같은 서비스 컨테이너), 스텝 지시어(actions/checkout@v4 및 actions/setup-node@v4 같은 서드파티 액션을 위한 uses, 셸 명령을 위한 run, 액션 파라미터를 위한 with, github 컨텍스트 변수, 스텝 출력 참조), 시크릿과 변수(${{ secrets.NAME }}, GITHUB_TOKEN, ${{ vars.NAME }}, 환경 범위 시크릿), 매트릭스 전략(다차원 빌드 매트릭스, include/exclude 조합, fail-fast 동작, max-parallel 제한)의 여섯 가지 핵심 영역을 다룹니다.

GitHub Actions는 GitHub에 직접 내장된 CI/CD 플랫폼으로 전 세계 수백만 개의 오픈소스 및 엔터프라이즈 개발 팀이 사용합니다. 프론트엔드 개발자는 PR에서 npm 빌드와 테스트를 자동화하고, 백엔드 엔지니어는 Docker 이미지를 빌드하여 클라우드 플랫폼에 배포합니다. DevOps 팀은 여러 Node.js 버전과 운영체제에 걸쳐 동시에 테스트하는 매트릭스 빌드를 구성합니다. 재사용 가능한 workflow_call 트리거는 저장소 전체에서 DRY 파이프라인 아키텍처를 가능하게 합니다.

이 레퍼런스의 모든 항목은 정확한 YAML 키, 간결한 설명, 워크플로 파일에 바로 복사할 수 있는 실제 값이 포함된 완전한 YAML 블록을 제공합니다. if 조건으로 메인 브랜치에서만 작업 실행, $GITHUB_OUTPUT으로 스텝 간 데이터 전달, concurrency 그룹으로 진행 중인 실행 취소, strategy: matrix로 다중 환경 테스트 같은 실무 패턴을 여섯 개의 필터 가능한 카테고리로 정리합니다.

주요 기능

  • 워크플로 설정: name, .github/workflows 경로, permissions(contents/packages/pull-requests), env, cancel-in-progress를 포함한 concurrency
  • 트리거: on: push(브랜치/경로), pull_request(types), schedule(cron), workflow_dispatch(inputs), workflow_call(재사용)
  • 작업: jobs 블록, runs-on(ubuntu/macos/windows), 의존성을 위한 needs, 조건부를 위한 if, 서비스(postgres/redis)
  • 스텝: uses(actions/checkout@v4, setup-node@v4), run(셸 명령), with(액션 입력), github 컨텍스트 변수
  • 스텝 출력: ${{ steps.id.outputs.name }} 패턴, 스텝 간 값 전달을 위한 $GITHUB_OUTPUT 환경 파일
  • 시크릿과 변수: ${{ secrets.NAME }}, 자동 제공되는 GITHUB_TOKEN, ${{ vars.NAME }}, 환경 범위 시크릿
  • 매트릭스 전략: 다차원 os/node-version 매트릭스, include/exclude 조합, fail-fast, max-parallel
  • 불필요한 실행을 취소하는 concurrency 그룹, 보안 워크플로를 위한 permissions 범위 설정

자주 묻는 질문

GitHub Actions란 무엇이고 워크플로 파일은 어디에 위치하나요?

GitHub Actions는 GitHub에 내장된 CI/CD 플랫폼입니다. 워크플로 파일은 저장소 루트의 .github/workflows/ 디렉터리에 저장하는 YAML 파일입니다. GitHub는 이 워크플로를 자동으로 감지하고 정의한 트리거 이벤트에 따라 실행합니다. 각 저장소는 서로 다른 자동화 시나리오를 처리하는 여러 워크플로 파일을 가질 수 있습니다.

on: push와 on: pull_request 트리거의 차이는 무엇인가요?

on: push는 지정한 브랜치에 커밋이 푸시될 때마다 워크플로를 실행합니다. on: pull_request는 지정한 브랜치를 대상으로 PR이 열리거나, 동기화되거나(새 커밋 푸시), 다시 열릴 때 실행합니다. 두 트리거 모두 types:와 paths:로 추가 필터링하여 특정 파일 변경이나 PR 이벤트 유형에 대해서만 워크플로를 실행할 수 있습니다.

GitHub Actions에서 스텝 간에 데이터를 전달하려면 어떻게 하나요?

$GITHUB_OUTPUT 환경 파일을 사용하세요. 소스 스텝에 id를 설정하고 echo "name=value" >> $GITHUB_OUTPUT으로 값을 씁니다. 이후 스텝에서 ${{ steps.스텝id.outputs.name }}으로 값을 참조합니다. 이 방식은 더 이상 사용되지 않는 set-output 명령어를 대체한 현재 권장 방식입니다.

GITHUB_TOKEN이란 무엇이고 어떻게 사용하나요?

GITHUB_TOKEN은 GitHub이 모든 워크플로 실행에 자동으로 제공하는 시크릿입니다. PR에 댓글 달기, 저장소에 푸시, 패키지 게시 등 워크플로가 실행되는 저장소에서 작업할 수 있는 권한이 있습니다. ${{ secrets.GITHUB_TOKEN }}으로 접근하며, 워크플로의 permissions: 블록으로 권한을 제어합니다.

GitHub Actions에서 매트릭스 전략은 어떻게 작동하나요?

strategy: matrix를 사용하면 여러 값의 조합에 걸쳐 작업을 실행할 수 있습니다. matrix: 아래에 하나 이상의 차원 배열을 정의합니다(예: node-version: [18, 20, 22] 또는 os: [ubuntu-latest, macos-latest]). GitHub는 각 조합에 대해 별도의 작업을 생성합니다. include:로 특정 조합을 추가하고 exclude:로 제거합니다. fail-fast: false로 설정하면 하나가 실패해도 모든 매트릭스 작업을 완료할 수 있습니다.

워크플로 작업을 메인 브랜치에서만 실행하려면 어떻게 하나요?

작업 수준에 if 조건을 추가하세요: if: github.ref == 'refs/heads/main'. 이렇게 하면 피처 브랜치나 PR에서 작업이 실행되지 않습니다. && 및 || 연산자로 조건을 결합할 수 있습니다. 배포 작업의 경우 environment: 키를 사용하여 작업 실행 전 수동 승인을 요구하는 것도 고려하세요.

GitHub Actions에서 concurrency 키는 무엇에 사용하나요?

concurrency:는 동일한 브랜치나 PR에 대해 트리거된 여러 워크플로 실행이 서로 어떻게 상호작용할지 제어합니다. concurrency.group을 github.ref를 포함하는 문자열로 설정하면 브랜치당 하나의 실행만 활성화됩니다. cancel-in-progress: true를 추가하면 새 실행이 시작될 때 이전 실행이 자동으로 취소되어 빠른 커밋에서 불필요한 CI 실행이 쌓이는 것을 방지합니다.

workflow_dispatch와 workflow_call의 차이는 무엇인가요?

workflow_dispatch는 GitHub UI와 API에 "워크플로 실행" 버튼을 추가하여 선택적 입력 파라미터와 함께 수동 트리거를 가능하게 합니다. workflow_call은 워크플로를 재사용 가능하게 만들어 같은 저장소나 다른 저장소의 워크플로가 uses: 키로 호출하고 입력과 출력을 주고받을 수 있게 합니다. workflow_call은 여러 저장소에서 파이프라인 로직을 공유하는 데 권장되는 패턴입니다.