GitHub Actions 치트시트
검색과 인쇄가 가능한 GitHub Actions 참고자료입니다: 워크플로 트리거, job, 스텝, 표현식, 매트릭스, 캐싱, 재사용 워크플로까지. 무료입니다.
Workflow skeleton & triggers
12.github/workflows/ci.yml
Where workflow files live
name: CI
Workflow display name
on: push
Run on every push
on: { push: { branches: [main] } }
Only pushes to main
on: { push: { tags: ["v*"] } }
Run on version tags
on: pull_request
Run on PR open/update
on: { pull_request: { paths: ["src/**"] } }
Only when paths change
on: { schedule: [{ cron: "0 6 * * 1" }] }
Cron: Mondays 06:00 UTC
on: workflow_dispatch
Manual "Run workflow" button
workflow_dispatch: { inputs: { env: { type: choice, options: [dev, prod] } } }
Manual run with inputs
on: { release: { types: [published] } }
Run when a release ships
on: workflow_call
Make workflow reusable
Jobs & runners
12jobs: { build: { runs-on: ubuntu-latest } }
Define a job and its runner
runs-on: [macos-latest / windows-latest]
Other hosted runner images
runs-on: [self-hosted, linux, x64]
Route to self-hosted by labels
needs: build
Run after another job
needs: [lint, test]
Wait for several jobs
if: github.ref == 'refs/heads/main'
Conditional job
container: node:22
Run job inside a Docker image
services: { redis: { image: redis:7, ports: ["6379:6379"] } }
Sidecar service container
outputs: { sha: ${{ steps.vars.outputs.sha }} }
Expose job outputs
needs.build.outputs.sha
Read another job's output
defaults: { run: { working-directory: app } }
Default dir for run steps
strategy: { fail-fast: false }
Keep matrix jobs running
Steps & popular actions
14- uses: actions/checkout@v4
Clone the repository
- uses: actions/checkout@v4 with fetch-depth: 0
Full history (tags, blame)
- uses: actions/setup-node@v4 with node-version: 22
Install Node.js
- uses: actions/setup-python@v5 with python-version: "3.12"
Install Python
- uses: shivammathur/setup-php@v2 with php-version: "8.3"
Install PHP
- run: npm ci && npm test
Run shell commands
- run: | (multiline)
Multi-line script step
- name: Build
Readable step name in logs
- id: vars
Reference step outputs later
echo "sha=$(git rev-parse --short HEAD)" >> "$GITHUB_OUTPUT"
Set a step output
echo "PATH_EXTRA=/opt/bin" >> "$GITHUB_ENV"
Set env for later steps
- uses: actions/upload-artifact@v4
Save build outputs
- uses: actions/download-artifact@v4
Fetch artifacts in later jobs
continue-on-error: true
Don't fail the job on error
Expressions & contexts
14${{ github.ref }}
Full ref, e.g. refs/heads/main
${{ github.ref_name }}
Branch or tag name only
${{ github.sha }}
Commit SHA being built
${{ github.event_name }}
Trigger: push, pull_request...
${{ github.actor }}
User who triggered the run
${{ github.repository }}
owner/repo string
${{ github.event.pull_request.number }}
Dig into the event payload
${{ secrets.API_KEY }}
Encrypted repo/org secret
${{ vars.SITE_URL }}
Non-secret config variable
${{ env.NODE_ENV }}
Environment variable
${{ runner.os }} / ${{ runner.temp }}
Runner OS and temp dir
${{ steps.vars.outputs.sha }}
Output of an earlier step
contains(), startsWith(), format()
Expression helper functions
GITHUB_TOKEN
Auto-provided per-run token
Conditionals & matrix
11if: success() / failure() / always()
Run based on prior status
if: cancelled()
Only when the run is cancelled
if: github.event_name == 'push'
Trigger-specific step
if: startsWith(github.ref, 'refs/tags/')
Only for tag builds
if: contains(github.event.head_commit.message, '[skip e2e]')
Commit-message switches
strategy: { matrix: { node: [20, 22] } }
One job per matrix value
matrix: { os: [ubuntu-latest, macos-latest], node: [20, 22] }
Cross-product matrix (4 jobs)
${{ matrix.node }}
Use the matrix value
matrix: { include: [{ os: ubuntu-latest, node: 23, experimental: true }] }
Add extra combos
matrix: { exclude: [{ os: macos-latest, node: 20 }] }
Drop combos
max-parallel: 2
Throttle concurrent matrix jobs
Caching & artifacts
11- uses: actions/cache@v4
Generic dependency cache
key: npm-${{ hashFiles('package-lock.json') }}
Cache key from lockfile hash
restore-keys: | npm-
Fallback prefix on miss
path: ~/.npm
What directory to cache
setup-node@v4 with cache: npm
Built-in npm cache (easiest)
setup-python@v5 with cache: pip
Built-in pip cache
upload-artifact@v4 with name/path
Store files for download
upload-artifact: retention-days: 5
Auto-delete artifacts
download-artifact@v4 (no name)
Download all artifacts
if-no-files-found: error
Fail if the path is empty
Cache limit: 10 GB per repo
Old caches get evicted
Environments & permissions
11permissions: { contents: read }
Least-privilege GITHUB_TOKEN
permissions: { contents: write, pull-requests: write }
Allow pushes + PR comments
permissions: { id-token: write }
OIDC for cloud auth (no keys)
environment: production
Use a deploy environment
environment: { name: prod, url: https://app.example.com }
Link shown on the run
Environment protection rules
Required reviewers, wait timer
env: { NODE_ENV: production }
Env at workflow/job/step level
secrets.GITHUB_TOKEN
Scoped to the current repo
Settings > Secrets and variables > Actions
Where to define secrets
Org secrets with repo allowlists
Share secrets across repos
pull_request_target: use with care
Runs with secrets on fork PRs
Reusable workflows & composite actions
11on: { workflow_call: { inputs: ..., secrets: ... } }
Declare a reusable workflow
jobs: { ci: { uses: org/repo/.github/workflows/ci.yml@v1 } }
Call a reusable workflow
uses: ./.github/workflows/ci.yml
Call one from the same repo
with: { node-version: 22 }
Pass inputs to the callee
secrets: inherit
Forward all caller secrets
${{ inputs.node-version }}
Read inputs in the callee
action.yml with runs: { using: composite }
Define a composite action
steps: - run: ... shell: bash
Composite steps need shell:
uses: ./.github/actions/setup
Use a local composite action
inputs/outputs in action.yml
Action interface definition
Nesting limit: 4 levels of reusable calls
Plan the call depth
Concurrency & timeouts
9concurrency: { group: deploy, cancel-in-progress: true }
Kill superseded runs
group: ${{ github.workflow }}-${{ github.ref }}
One run per branch
cancel-in-progress: false
Queue instead of cancel
timeout-minutes: 15 (job level)
Kill runaway jobs (default 360)
timeout-minutes: 5 (step level)
Cap a single step
retry via nick-fields/retry@v3
Retry flaky steps
jobs.<id>.strategy.max-parallel
Limit parallel matrix legs
if: always() on cleanup steps
Cleanup even after failure
Scheduled runs can be delayed/skipped
Cron is best-effort, not exact
Common recipes
12on: push: tags: ["v*"] + softprops/action-gh-release@v2
Release on version tag
on: push: paths: ["apps/api/**"]
Monorepo: build only what changed
dorny/paths-filter@v3
Per-job change detection
peaceiris/actions-gh-pages@v4
Deploy static site to Pages
docker/build-push-action@v6
Build and push Docker images
docker/login-action@v3 with ghcr.io
Log in to GitHub registry
aws-actions/configure-aws-credentials@v4 (OIDC)
Keyless AWS deploys
appleboy/ssh-action@v1
Run commands on a server
codecov/codecov-action@v4
Upload coverage reports
github/codeql-action
Code scanning / security
dependabot.yml + auto-merge workflow
Auto-update dependencies
schedule + stale action
Auto-close stale issues
Debugging
12Secret ACTIONS_STEP_DEBUG = true
Verbose step debug logs
Secret ACTIONS_RUNNER_DEBUG = true
Runner diagnostic logs
Re-run jobs > Enable debug logging
One-off debug re-run
act
Run workflows locally in Docker
act -j build
Run a single job locally
act -s GITHUB_TOKEN=$(gh auth token)
Pass secrets to act
echo "::debug::message"
Emit a debug log line
echo "::error file=app.js,line=1::Oops"
Annotate code with errors
echo "::group::Install" ... "::endgroup::"
Collapsible log sections
$GITHUB_STEP_SUMMARY
Write Markdown run summary
mxschmitt/action-tmate@v3
SSH into a live runner
cat "$GITHUB_EVENT_PATH"
Inspect the raw event JSON
gh CLI for Actions
13gh run list
Recent workflow runs
gh run list --workflow ci.yml
Runs for one workflow
gh run watch
Live-follow the latest run
gh run view 123456 --log
Full logs of a run
gh run view --log-failed
Only the failed steps' logs
gh run rerun 123456 --failed
Re-run failed jobs only
gh run cancel 123456
Cancel a run
gh run download 123456
Download run artifacts
gh workflow list
List workflows in the repo
gh workflow run ci.yml -f env=prod
Trigger workflow_dispatch
gh workflow disable ci.yml
Disable a workflow
gh secret set API_KEY
Set a repo secret
gh cache list / gh cache delete
Inspect and prune caches
“:q”와 일치하는 항목이 없습니다.
GitHub Actions 치트시트 소개
이 GitHub Actions 치트시트는 워크플로 YAML을 검색 가능한 한 페이지로 압축했습니다: 워크플로 기본 골격과 트리거, job과 러너, 스텝과 인기 액션, 표현식과 컨텍스트, 조건문과 매트릭스 빌드, 캐싱과 아티팩트, 환경과 권한, 재사용 워크플로와 복합 액션, 동시성과 타임아웃, 자주 쓰는 레시피, 디버깅, 그리고 Actions용 gh CLI 명령어까지 다룹니다.
워크플로 파일은 대부분 기억해야 하는 문법(태그에서 어떤 트리거가 발동하는지, 시크릿을 참조하는 방법, 포크에서 스텝을 건너뛰는 if 표현식, 락파일에 대한 캐시 키 패턴 등)이므로, 모든 행이 YAML 조각과 한 줄 설명을 함께 보여줍니다.
이 시트는 무료이며 클라이언트 측에서 동작합니다: 검색창으로 실시간으로 행을 필터링하고, 고정된 목차로 섹션을 이동하고, 클릭 한 번으로 조각을 복사하고, 책상용 참고자료로 페이지를 인쇄할 수 있습니다.
GitHub Actions 치트시트 사용 방법
- 워크플로 기본 골격 & 트리거와 job & 러너부터 Actions용 gh CLI까지 섹션을 훑어보세요.
- matrix, secrets, cache 같은 키워드를 검색해 모든 행을 실시간으로 필터링하세요.
- 바로 사용할 수 있는 빌드, 테스트, 배포 job이 필요할 때는 자주 쓰는 레시피 섹션으로 이동해 맞게 수정하세요.
- YAML 조각이나 복사 아이콘을 클릭해 워크플로 파일에 복사하세요.
- 오프라인 GitHub Actions 참고자료로 시트를 인쇄하세요.
자주 묻는 질문
12개 섹션입니다: 워크플로 기본 골격과 트리거, job과 러너, 스텝과 인기 액션, 표현식과 컨텍스트, 조건문과 매트릭스, 캐싱과 아티팩트, 환경과 권한, 재사용 및 복합 워크플로, 동시성과 타임아웃, 자주 쓰는 레시피, 디버깅, gh CLI입니다.
네: push, pull_request, cron을 사용하는 schedule, 입력값이 있는 workflow_dispatch, release, 그리고 각각을 좁혀주는 경로와 브랜치 필터를 다룹니다.
둘 다 전용 섹션이 있습니다: include, exclude, fail-fast를 사용하는 매트릭스 전략, 그리고 락파일 기반 키와 restore-keys를 사용하는 actions/cache입니다.
네. 어떤 행이든 클릭하거나 복사 아이콘을 클릭하면 짧은 확인 메시지와 함께 조각이 클립보드에 저장됩니다.
네, 완전히 무료입니다: 검색과 인쇄가 가능하며 가입 없이 브라우저에서 렌더링됩니다.
인기 검색어
github actions 치트시트
github actions 워크플로 문법
github actions yaml 예시
github actions 매트릭스 빌드
github actions 캐시
워크플로 트리거 목록
github 재사용 워크플로
도움이 필요하신가요?
이 도구에서 문제를 발견하셨나요? 저희 팀에 알려주세요.