Cheatsheet GitHub Actions - Struktur Standar dan Daftar Aksi yang Paling Berguna
Sedikit tentang GitHub Actions yang umum dan struktur mereka.
GitHub Actions
adalah platform otomatisasi dan CI/CD dalam GitHub, digunakan untuk membangun, menguji, dan mendeploy kode Anda berdasarkan kejadian seperti push, pull request, atau jadwal tertentu.
Selain penggunaan standar GitHub, Anda juga dapat menggunakan GitHub Actions pada server Gitea self-hosted.
Ringkasan ini mencakup struktur GitHub Actions, deskripsi singkat, dan aksi paling umum yang digunakan dalam alur kerja open source maupun komersial.
Aksi mencakup alat resmi, komunitas, dan pihak ketiga, mendukung otomatisasi dari pembuatan dan pengujian hingga penerapan,
manajemen rilis, QA, dan notifikasi.
Struktur Konfigurasi Dasar
GitHub Actions Workflows didefinisikan dalam file YAML yang berada di direktori .github/workflows
dalam repositori.
name: Nama Workflow
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
- Blok on menentukan kejadian pemicu.
- Setiap job berjalan di runner sendiri.
- steps dapat menjalankan perintah shell atau memanggil aksi yang dapat digunakan kembali.
Komponen Utama Workflow
Komponen | Deskripsi |
---|---|
Workflow | Proses otomatis (YAML) yang dipicu oleh suatu kejadian |
Event | Aktivitas yang memicu workflow (push, pull_request, dll.) |
Job | Serangkaian langkah yang dieksekusi di runner, dapat berjalan berurutan atau paralel |
Step | Setiap perintah atau aksi dalam sebuah job |
Runner | VM atau container di mana job dijalankan |
Action | Ekstensi/penambahan yang dapat digunakan kembali yang mengemas tugas tertentu |
Kejadian Pemicu
- push
- pull_request
- schedule (menggunakan sintaks cron)
- workflow_dispatch (pemicu manual, memungkinkan parameter input)
- release, issue, dll.
Contoh:
on:
push:
branches: [ main ]
workflow_dispatch:
inputs:
environment:
description: 'Lingkungan Deployment'
required: true
default: 'production'
type: string
Aksi Bawaan yang Berguna
Aksi | Tujuan | Parameter Umum |
---|---|---|
actions/checkout | Memeriksa kode repositori | ref, token, submodules, persist-credentials |
actions/setup-node | Menyiapkan lingkungan Node.js | node-version, cache, architecture, check-latest |
actions/setup-python | Menyiapkan Python | python-version, architecture |
actions/cache | Meng-cache dependensi | path, key, restore-keys |
docker/build-push-action | Membangun & mendorong gambar Docker | context, file, platforms, tags, push, build-args |
actions/upload-artifact | Mengunggah artefak pembangunan | name, path, if-no-files-found |
actions/download-artifact | Mengunduh artefak | name, path |
github/email-actions | Mengirim notifikasi email | to, subject, content, attachments |
peter-evans/create-pull-request | Membuat PR melalui workflow | branch, title, body, labels, base |
actions/github-script | Menjalankan JavaScript acak dalam workflow | script, github-token |
Parameter Aksi
Parameter Umum untuk Setiap Panggilan Aksi:
- name: Beberapa Aksi atau Langkah
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: argumen yang diberikan ke aksi (lihat dokumen aksi untuk semua opsi)
- env: variabel lingkungan untuk langkah
- if: eksekusi kondisional
- run: perintah shell (jika tidak menggunakan aksi)
- shell: shell yang digunakan untuk menjalankan langkah
- continue-on-error: tetap melanjutkan bahkan jika langkah gagal
Mendefinisikan Input Aksi Kustom
Dalam metadata aksi Anda (action.yml):
inputs:
example-input:
description: 'Contoh input'
required: false
default: 'default-value'
Ketika digunakan dalam workflow:
- uses: my/action@v1
with:
example-input: 'custom-value'
Diakses sebagai variabel lingkungan INPUT_EXAMPLE_INPUT
ketika aksi dijalankan.
Contoh: Workflow dengan Parameter Manual
name: Deploy
on:
workflow_dispatch:
inputs:
environment:
description: 'Lingkungan Deployment'
required: true
default: 'production'
type: string
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Deploy to environment
run: echo "Deploying to ${{ github.event.inputs.environment }}"
Pasar Aksi
- Ribuan aksi yang dapat digunakan kembali tersedia di GitHub Marketplace.
- Kategori mencakup: deployment cloud, alat notifikasi, kerangka pengujian, analisis kode, dan lainnya.
- Eksplorasi: actions/checkout, actions/setup-node, docker/build-push-action, actions/cache, actions/upload-artifact, dan banyak lainnya.
Tips Cepat
- Letakkan file workflow di
.github/workflows
. - Gunakan workflow_dispatch dengan inputs untuk eksekusi manual dan berparameter.
- Gunakan aksi cache untuk mempercepat instalasi dependensi.
- Gunakan matriks job untuk menguji berbagai versi OS/runtime.
- Gunakan rahasia untuk data sensitif, dirujuk sebagai
${{ secrets.SECRET_NAME }}
.
Cheatsheet ini mencakup esensial penggunaan, konfigurasi, dan ekstensi GitHub Actions untuk otomatisasi, CI/CD, dan lainnya. Untuk detail dan pembaruan lebih lanjut, selalu periksa dokumentasi resmi GitHub dan repositori aksi.
GitHub Actions Umum
Berikut adalah daftar praktis aksi GitHub yang sering digunakan untuk membantu mengotomatisasi CI/CD, pengujian, pembuatan, deployment, dan tugas alur kerja:
Aksi Resmi Inti
Aksi | Tujuan | Parameter Kunci |
---|---|---|
actions/checkout | Memeriksa kode repositori | ref, submodules |
actions/setup-node | Menyiapkan lingkungan Node.js | node-version, cache |
actions/setup-python | Menyiapkan lingkungan Python | python-version |
actions/setup-java | Menyiapkan JDK Java | distribution, java-version |
actions/cache | Meng-cache dependensi dan output pembangunan | path, key, restore-keys |
actions/upload-artifact | Mengunggah artefak pembangunan | name, path |
actions/download-artifact | Mengunduh artefak dari workflow | name, path |
actions/github-script | Menjalankan JavaScript menggunakan konteks GitHub dan API | script |
actions/create-release | Membuat rilis GitHub | tag_name, release_name |
actions/upload-release-asset | Mengunggah aset ke rilis | upload_url, asset_path |
actions/labeler | Otomatis menerapkan label ke issues/PRs | repo-token, configuration-path |
Aksi Komunitas & Pihak Ketiga Populer
Aksi | Tujuan |
---|---|
docker/build-push-action | Membangun dan mendorong gambar Docker |
actions/setup-go | Menyiapkan lingkungan Go |
super-linter/super-linter | Pemeriksaan otomatis kode universal |
trufflesecurity/trufflehog | Memindai rahasia dan kredensial |
peaceiris/actions-gh-pages | Mendeploy situs statis ke GitHub Pages |
JamesIves/github-pages-deploy-action | Mendeploy proyek ke GitHub Pages |
peter-evans/create-pull-request | Membuat pull request secara otomatis |
softprops/action-gh-release | Membuat dan mengunggah rilis GitHub |
ad-m/github-push-action | Mengirim perubahan kembali ke repositori GitHub |
actions/setup-dotnet | Menyiapkan SDK .NET |
azure/login | Mengautentikasi ke Azure |
google-github-actions/auth | Mengautentikasi ke Google Cloud |
Aksi Pengujian, QA, dan Pelaporan
Aksi | Tujuan |
---|---|
actions/setup-ruby | Menyiapkan lingkungan Ruby |
codecov/codecov-action | Mengunggah laporan cakupan kode ke Codecov |
coverallsapp/github-action | Mengunggah hasil cakupan ke Coveralls |
dorny/test-reporter | Menambahkan hasil pengujian ke GitHub Checks |
stefanzweifel/git-auto-commit-action | Mengkomit dan mendorong perubahan file secara otomatis |
Aksi Deployment & Notifikasi
Aksi | Tujuan |
---|---|
appleboy/scp-action | Mengunggah file menggunakan SCP |
SamKirkland/FTP-Deploy-Action | Mendeploy file melalui FTP/FTPS |
cypress-io/github-action | Menjalankan pengujian akhir ujung Cypress |
slackapi/slack-github-action | Mengirim pesan ke Slack |
dawidd6/action-send-mail | Mengirim email selama eksekusi workflow |
Aksi Utilitas & Manajemen Workflow
Aksi | Tujuan |
---|---|
peter-evans/repository-dispatch | Memicu workflow repositori eksternal |
fregante/setup-git-user | Menetapkan kredensial pengguna Git |
andymckay/labeler | Memberi label issues dan PR berdasarkan jalur |
actions/configure-pages | Mengonfigurasi penerbitan ke GitHub Pages |
EndBug/add-and-commit | Menambahkan & mengkomit file dalam workflow |
dangoslen/changelog-enforcer | Memeriksa apakah changelog diperbarui untuk PRs |
Cara Mencari Lebih Lanjut
Ada banyak GurHub Actions yang memungkinkan otomatisasi workflow seperti pengujian otomatis, deployment ke produksi, notifikasi, dan integrasi dengan layanan lainnya. Github Marketplace menyediakan ribuan aksi di berbagai kategori seperti pengujian, keamanan, deployment, notifikasi, kualitas kode, dan integrasi. Daftar yang disusun seperti “Awesome Actions” juga sangat berguna untuk inspirasi dan penemuan.
Tautan Berguna
- 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 - menginstal dan menguji
- Backup dan restore server Gitea
- Menggunakan Gitea Actions untuk mendeploy situs Hugo ke AWS S3
- Gitflow: Langkah-langkah, Alternatif, Kelebihan, dan Kekurangan
- DevOps dengan GitOps - Argo CD, Flux, Jenkins X, Weave GitOps dan lainnya