GitHub Actions 간편 가이드 - 표준 구조와 가장 유용한 액션 목록

일반적인 GitHub Actions에 대해 간략히 소개하고 그 구조를 설명합니다.

Page content

GitHub Actions
은 GitHub 내에서 사용되는 자동화 및 CI/CD 플랫폼으로, 푸시, 풀리퀘스트, 또는 일정에 따라 코드를 빌드, 테스트, 배포할 수 있습니다.

표준 GitHub 외에도 자체 호스팅 Gitea 서버에서 GitHub Actions를 사용할 수 있습니다.

github actions flow

이 요약은 GitHub Actions의 구조, 간단한 설명 및 오픈소스와 상업용 워크플로우에서 가장 일반적으로 사용되는 액션에 대해 다룹니다.
액션은 공식, 커뮤니티, 제3자 도구를 포함하여 빌드 및 테스트부터 배포, 릴리스 관리, QA, 알림까지 자동화를 지원합니다.

기본 구성 구조

GitHub Actions 워크플로우는 저장소 내 .github/workflows 디렉토리에 있는 YAML 파일에서 정의됩니다.

name: Workflow Name
on:
  push:
    branches: [ main ]
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Set up Node.js
        uses: actions/setup-node@v3
        with:
          node-version: '18'
      - name: Run tests
        run: npm test
  • on 블록은 트리거 이벤트를 지정합니다.
  • job은 자신의 러너에서 실행됩니다.
  • steps는 쉘 명령을 실행하거나 재사용 가능한 액션을 호출할 수 있습니다.

핵심 워크플로우 구성 요소

구성 요소 설명
워크플로우 이벤트에 의해 트리거되는 자동화 프로세스(YAML)
이벤트 워크플로우를 트리거하는 활동(푸시, 풀리퀘스트 등)
작업 러너에서 실행되는 단계의 시리즈, 순차적으로 또는 병렬로 실행 가능
단계 작업 내의 각 명령 또는 액션
러너 작업이 실행되는 가상 머신 또는 컨테이너
액션 작업을 수행하는 재사용 가능한 확장/추가 기능

트리거 이벤트

  • push
  • pull_request
  • schedule (크론 구문 사용)
  • workflow_dispatch (수동 트리거, 입력 매개변수 허용)
  • release, issue

예시:

on:
  push:
    branches: [ main ]
  workflow_dispatch:
    inputs:
      environment:
        description: '배포 환경'
        required: true
        default: 'production'
        type: string

유용한 내장 액션

액션 목적 일반적인 매개변수
actions/checkout 저장소 코드 체크아웃 ref, token, submodules, persist-credentials
actions/setup-node Node.js 환경 설정 node-version, cache, architecture, check-latest
actions/setup-python Python 설정 python-version, architecture
actions/cache 의존성 캐싱 path, key, restore-keys
docker/build-push-action Docker 이미지 빌드 및 푸시 context, file, platforms, tags, push, build-args
actions/upload-artifact 빌드 아티팩트 업로드 name, path, if-no-files-found
actions/download-artifact 아티팩트 다운로드 name, path
github/email-actions 이메일 알림 전송 to, subject, content, attachments
peter-evans/create-pull-request 워크플로우를 통해 PR 생성 branch, title, body, labels, base
actions/github-script 워크플로우 내 임의의 JavaScript 실행 script, github-token

액션 매개변수

모든 액션 호출에 대한 일반 매개변수:

- name: Some Action or Step
  uses: owner/repo@ref
  with:
    param1: value
    param2: value
  env:
    ENV_VAR: value
  if: ${{ condition }}
  run: command_to_run
  shell: bash|pwsh|python|sh
  continue-on-error: true|false
  • with: 액션에 전달되는 인자(액션 문서를 참조하여 모든 옵션 확인)
  • env: 단계의 환경 변수
  • if: 조건 실행
  • run: 액션을 사용하지 않을 경우 쉘 명령
  • shell: 단계를 실행하는 쉘
  • continue-on-error: 단계가 실패하더라도 계속 진행

사용자 정의 액션 입력 정의

액션 메타데이터(action.yml)에서:

inputs:
  example-input:
    description: '예시 입력'
    required: false
    default: '기본값'

워크플로우에서 사용 시:

- uses: my/action@v1
  with:
    example-input: '사용자 정의 값'

액션 실행 시 환경 변수 INPUT_EXAMPLE_INPUT로 접근 가능합니다.

예시: 수동 매개변수 사용 워크플로우

name: Deploy
on:
  workflow_dispatch:
    inputs:
      environment:
        description: '배포 환경'
        required: true
        default: 'production'
        type: string
jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - name: 코드 체크아웃
        uses: actions/checkout@v4
      - name: 환경에 배포
        run: echo "Deploying to ${{ github.event.inputs.environment }}"

액션 마켓플레이스

  • 수천 개의 재사용 가능한 액션은 GitHub 마켓플레이스에서 사용 가능합니다.
  • 카테고리는 클라우드 배포, 알림 도구, 테스트 프레임워크, 코드 분석 등이 포함됩니다.
  • 탐색: actions/checkout, actions/setup-node, docker/build-push-action, actions/cache, actions/upload-artifact, 그리고 기타 많은 액션.

빠른 팁

  • 워크플로우 파일은 .github/workflows에 배치합니다.
  • workflow_dispatchinputs을 함께 사용하여 수동 및 매개변수화된 실행을 수행합니다.
  • cache 액션을 사용하여 의존성 설치를 가속화합니다.
  • job matrix를 사용하여 여러 OS/런타임 버전을 테스트합니다.
  • 민감한 데이터는 secrets를 사용하여 저장하고, ${{ secrets.SECRET_NAME }}로 참조합니다.

이 가이드는 자동화, CI/CD 및 기타 작업을 위해 GitHub Actions를 사용, 구성, 확장하는 데 필요한 기본 사항을 다룹니다. 더 자세한 내용이나 업데이트가 필요할 경우 항상 공식 GitHub 문서와 액션 저장소를 참조하세요.

일반적인 GitHub Actions

다음은 CI/CD, 테스트, 빌드, 배포 및 워크플로우 작업 자동화에 자주 사용되는 GitHub Actions의 실용적인 목록입니다:

공식 핵심 액션

액션 목적 주요 예시 매개변수
actions/checkout 저장소 코드 체크아웃 ref, submodules
actions/setup-node Node.js 환경 설정 node-version, cache
actions/setup-python Python 환경 설정 python-version
actions/setup-java Java JDK 설정 distribution, java-version
actions/cache 의존성 및 빌드 출력 캐싱 path, key, restore-keys
actions/upload-artifact 빌드 아티팩트 업로드 name, path
actions/download-artifact 워크플로우에서 아티팩트 다운로드 name, path
actions/github-script GitHub 컨텍스트 및 API를 사용한 JavaScript 실행 script
actions/create-release GitHub 릴리스 생성 tag_name, release_name
actions/upload-release-asset 릴리스에 자산 업로드 upload_url, asset_path
actions/labeler 이슈/PR에 자동으로 라벨 적용 repo-token, configuration-path

인기 커뮤니티 및 제3자 액션

액션 목적
docker/build-push-action Docker 이미지 빌드 및 푸시
actions/setup-go Go 환경 설정
super-linter/super-linter 전용 자동화 코드 린팅
trufflesecurity/trufflehog 비밀번호 및 자격 증명 스캔
peaceiris/actions-gh-pages GitHub Pages에 정적 사이트 배포
JamesIves/github-pages-deploy-action GitHub Pages에 프로젝트 배포
peter-evans/create-pull-request 자동으로 PR 생성
softprops/action-gh-release GitHub 릴리스 생성 및 업로드
ad-m/github-push-action GitHub 저장소에 변경사항 다시 푸시
actions/setup-dotnet .NET SDK 설정
azure/login Azure에 인증
google-github-actions/auth Google Cloud에 인증

테스트, QA 및 보고 액션

액션 목적
actions/setup-ruby Ruby 환경 설정
codecov/codecov-action Codecov에 코드 커버리지 보고서 업로드
coverallsapp/github-action Coveralls에 커버리지 결과 업로드
dorny/test-reporter GitHub Checks에 테스트 결과 첨부
stefanzweifel/git-auto-commit-action 파일 변경사항 자동 커밋 및 푸시

배포 및 알림 액션

액션 목적
appleboy/scp-action SCP를 사용한 파일 업로드
SamKirkland/FTP-Deploy-Action FTP/FTPS를 통해 파일 배포
cypress-io/github-action Cypress 끝단 테스트 실행
slackapi/slack-github-action Slack으로 메시지 전송
dawidd6/action-send-mail 워크플로우 실행 중 이메일 전송

유틸리티 및 워크플로우 관리

액션 목적
peter-evans/repository-dispatch 외부 저장소 워크플로우 트리거
fregante/setup-git-user 커밋을 위한 Git 사용자 자격 증명 설정
andymckay/labeler 경로에 따라 이슈 및 PR에 라벨 적용
actions/configure-pages GitHub Pages에 게시 설정
EndBug/add-and-commit 워크플로우 내에서 파일 추가 및 커밋
dangoslen/changelog-enforcer PR에 대한 변경 로그 업데이트 확인

더 많은 액션을 찾는 방법

자동화 워크플로우, 생산성 배포, 알림, 다른 서비스와의 통합 등에 유용한 많은 GitHub Actions가 있습니다.
GitHub 마켓플레이스는 테스트, 보안, 배포, 알림, 코드 품질, 통합 등 카테고리에 걸쳐 수천 개의 액션을 제공합니다.
“Awesome Actions"와 같은 정리된 목록도 영감과 발견에 유용합니다.

유용한 링크