Quick reference GitHub Actions. Workflow syntax, common triggers, jobs, steps, secrets, caching, dan CI/CD best practices.
Struktur dasar workflow GitHub Actions yang terdiri dari nama, trigger, jobs, dan steps untuk menjalankan automasi.
name: Workflow Name
on: [push, pull_request]
jobs:
job-name:
runs-on: ubuntu-latest
steps:
-
Berbagai cara untuk memicu workflow berjalan, seperti push, pull request, schedule, atau manual trigger.
# Push to branches
on:
push:
branches: [ main, develop ]
tags: [ 'v*' ]
paths:
- 'src/**'
-
Runner adalah mesin tempat workflow berjalan, bisa menggunakan GitHub-hosted atau self-hosted runner.
# GitHub-hosted
runs-on: ubuntu-latest # Ubuntu (most common)
runs-on: windows-latest # Windows
runs-on: macos-latest # macOS
runs-on: ubuntu-22.04 # Specific version
# Matrix
runs-on: ${{ matrix.os }}
# Self-hosted
runs-on
Environment variables memungkinkan kita menyimpan konfigurasi yang bisa digunakan di berbagai level workflow.
# Workflow level
env:
NODE_ENV: production
jobs:
build:
# Job level
env:
API_URL: https://api.example.com
steps:
# Step level
- run: npm build
Secrets menyimpan informasi sensitif seperti API keys yang tidak boleh terlihat di kode workflow.
# Use secrets
- run: npm run deploy
env:
API_KEY: ${{ secrets.API_KEY }}
DATABASE_URL: ${{ secrets.DATABASE_URL }}
# GitHub token (auto-provided)
- run: gh api /user
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}Matrix strategy memungkinkan menjalankan workflow dengan kombinasi parameter berbeda secara paralel.
strategy:
matrix:
os: [ubuntu-latest, windows-latest, macos-latest]
node-version: [18, 20, 22]
# Creates 9 jobs (3 × 3)
fail-fast: true # Stop all if one fails
Actions adalah komponen reusable yang memudahkan setup environment dan melakukan tugas-tugas umum.
Action untuk mengambil kode dari repository ke dalam runner.
- uses: actions/checkout@v5
with:
fetch-depth: 0 # Full history
submodules: true # Include submodulesActions untuk setup bahasa pemrograman seperti Node.js, Python, Go, dan Java dengan versi tertentu.
# Node.js
- uses: actions/setup-node@v6
with:
node-version: '20'
cache: 'npm'
# Python
- uses: actions/setup-python@v5
with:
python-version: '3.12'
Caching mempercepat build dengan menyimpan dependencies yang sudah di-install sebelumnya.
# Automatic (Node.js)
- uses: actions/setup-node@v6
with:
node-version: '20'
cache: 'npm'
# Manual
- uses: actions/cache@v4
with:
path: |
~/.npm
Artifacts memungkinkan menyimpan dan berbagi file hasil build antar jobs atau workflow.
# Upload
- uses: actions/upload-artifact@v4
with:
name: build-files
path: dist/
retention-days: 7
# Download
- uses: actions/download-artifact@v4
with:
name:
Job dependencies mengatur urutan eksekusi jobs agar jobs tertentu menunggu jobs lain selesai.
jobs:
build:
runs-on: ubuntu-latest
steps:
- run: npm build
test:
needs: build # Wait for build
runs-on: ubuntu-latest
steps:
Conditionals memungkinkan menjalankan jobs atau steps berdasarkan kondisi tertentu seperti branch atau event.
# Job level
jobs:
deploy:
if: github.ref == 'refs/heads/main'
runs-on: ubuntu-latest
# Step level
steps:
- name: Deploy to production
if:
Outputs memungkinkan jobs berbagi data hasil eksekusi dengan jobs lain dalam workflow.
jobs:
build:
runs-on: ubuntu-latest
outputs:
version: ${{ steps.get-version.outputs.version }}
steps:
- id: get-version
run: echo "version=1.2.3" >> $GITHUB_OUTPUT
deploy:
Concurrency mengatur agar workflow yang sama tidak berjalan bersamaan, membatalkan yang lama saat yang baru dimulai.
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true # Cancel old runs on new pushPermissions mengatur hak akses workflow terhadap repository dan API GitHub.
permissions:
contents: write # Push to repo
pull-requests: write # Comment on PRs
issues: write # Manage issues
packages: write # Publish packages
deployments: write # Create deploymentsTimeouts membatasi waktu eksekusi jobs dan steps untuk mencegah workflow berjalan terlalu lama.
jobs:
build:
runs-on: ubuntu-latest
timeout-minutes: 10 # Job timeout
steps:
- run: npm test
timeout-minutes: 5 # Step timeoutDocker actions memungkinkan menggunakan container atau build/push Docker images dalam workflow.
# Use container
jobs:
build:
runs-on: ubuntu-latest
container:
image: node:20-alpine
env:
NODE_ENV: production
# Build & push Docker image
- uses
Reusable workflows memungkinkan membuat workflow yang bisa digunakan ulang di berbagai repository atau workflow lain.
# .github/workflows/reusable.yml
on:
workflow_call:
inputs:
environment:
required: true
type: string
outputs:
result:
value: ${{ jobs.deploy.outputs.result }}
# .github/workflows/main.yml
jobs:
call-workflow:
uses: ./.github/workflows/reusable.yml
with:
environment: productionContext variables menyediakan informasi tentang event, repository, dan environment yang bisa digunakan dalam workflow.
# GitHub context
${{ github.event_name }} # push, pull_request, etc.
${{ github.ref }} # refs/heads/main
${{ github.sha }} # Commit SHA
${{ github.actor }} # User who triggered
${{ github.repository }} # owner/repo
${{ github.workspace }} # /home/runner/work/repo/repo
# Runner context
${{ runner.os }} # Linux, Windows, macOS
Common patterns menunjukkan contoh workflow yang sering digunakan untuk berbagai jenis proyek.
Workflow standar untuk continuous integration aplikasi Node.js dengan testing dan linting.
name: Node.js CI
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [18
Workflow yang otomatis deploy aplikasi ketika ada tag baru (release) dibuat.
name: Release
on:
push:
tags: ['v*']
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5
-
Workflow untuk memberikan komentar otomatis pada pull request.
- uses: actions/github-script@v7
with:
script: |
github.rest.issues.createComment({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
body: 'Build successful!'
})Workflow untuk otomatis memberikan label pada pull request berdasarkan file yang diubah.
- uses: actions/labeler@v5
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}Teknik-teknik debugging untuk memecahkan masalah dalam workflow GitHub Actions.
# Debug step
- name: Debug
run: |
echo "Event: ${{ github.event_name }}"
echo "Ref: ${{ github.ref }}"
echo "SHA: ${{ github.sha }}"
env
# Enable debug logs
# Set repository secrets:
# ACTIONS_RUNNER_DEBUG = true
# ACTIONS_STEP_DEBUG = truePanduan praktik terbaik untuk membuat workflow GitHub Actions yang efisien dan aman.
@v4, not @main)Tabel daftar actions populer yang sering digunakan dalam workflow.
| Action | Purpose |
|---|---|
actions/checkout@v5 | Checkout code |
actions/setup-node@v6 | Setup Node.js |
actions/cache@v4 | Cache dependencies |
actions/upload-artifact@v4 | Save build outputs |
docker/build-push-action@v5 | Build & push Docker |
aws-actions/configure-aws-credentials@v4 | AWS auth |
google-github-actions/auth@v2 | GCP auth |
azure/login@v2 | Azure auth |
Link-link berguna untuk belajar GitHub Actions lebih dalam.
Happy automating!