GitHub Actions 간편 가이드 - 표준 구조와 가장 유용한 액션 목록
일반적인 GitHub Actions에 대해 간략히 소개하고 그 구조를 설명합니다.
GitHub Actions
은 GitHub 내에서 사용되는 자동화 및 CI/CD 플랫폼으로, 푸시, 풀리퀘스트, 또는 일정에 따라 코드를 빌드, 테스트, 배포할 수 있습니다.
표준 GitHub 외에도 자체 호스팅 Gitea 서버에서 GitHub Actions를 사용할 수 있습니다.
이 요약은 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_dispatch와 inputs을 함께 사용하여 수동 및 매개변수화된 실행을 수행합니다.
- 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"와 같은 정리된 목록도 영감과 발견에 유용합니다.
유용한 링크
- https://docs.github.com/actions
- https://github.com/marketplace
- https://docs.github.com/en/actions/get-started/quickstart
- https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions
- GIT Cheatsheet
- Gitea - installing and testing
- Backup and restore Gitea server
- Using Gitea Actions deploy Hugo website to AWS S3
- Gitflow: Steps, Alternatives, Pros, and Cons
- DevOps with GitOps - Argo CD, Flux, Jenkins X, Weave GitOps and others