Pendahuluan
GitHub Actions adalah platform yang kuat yang memungkinkan pengembang untuk mengotomatiskan alur kerja perangkat lunak mereka dengan membuat pipa kustom yang didorong oleh event. Memicu workflows merupakan inti dari GitHub Actions, yang memungkinkan Anda untuk melakukan tugas secara otomatis sebagai respons terhadap berbagai event. Dalam artikel ini, saya akan menjelajahi berbagai cara untuk memicu workflows di GitHub Actions, termasuk event dan trigger, workflows terjadwal, dan workflows manual.
Event dan Trigger
Event dan trigger merupakan dasar dari GitHub Actions. Workflows diinisiasi oleh event spesifik yang terjadi dalam repositori GitHub. Event ini dapat berkisar dari push dan pull request hingga repositori dan issue event, di antara yang lain. Dengan memahami cara memanfaatkan event ini, Anda dapat membuat workflows yang efisien dan fleksibel untuk proyek Anda.
Event Push dan Pull Request
Event push dan pull request adalah trigger yang paling umum di GitHub Actions. Ketika commit di-push ke repositori atau pull request dibuat atau diperbarui, event ini secara otomatis memicu workflows yang terkait.
- Push Event
Event ini dipicu ketika commit di-push ke repositori. Anda dapat mengkonfigurasi workflow untuk berjalan hanya untukbranches
atautags
tertentu dengan menggunakan filter branches atau tags.
on:
push:
branches:
- main
- develop
- Pull Request Event
Event ini dipicu ketika pull request dibuat, disinkronkan (diperbarui), atau dibuka kembali. Mirip dengan event push, Anda juga dapat menentukan cabang untuk menjalankan workflow menggunakan filterbranches
.
on:
pull_request:
branches:
- main
Repositori dan Issue Event
Repositori dan issue event memberikan kontrol yang lebih rinci atas workflows Anda, memungkinkan Anda untuk mengotomatiskan tugas berdasarkan perubahan spesifik dalam repositori Anda.
- Repositori Event
Beberapa contoh repositori event termasuk create, delete, fork, dan star. Event ini dipicu ketika tindakan seperti membuat atau menghapus cabang, melakukan fork repositori, atau memberi bintang pada repositori terjadi.
on:
create:
branches:
- feature/*
- Issue Event
Issue event dipicu ketika issue dibuat, diedit, dihapus, atau statusnya berubah (mis., dibuka atau ditutup). Anda dapat menggunakan event ini untuk mengotomatiskan tugas seperti pelabelan atau penugasan issue.
on:
issues:
types:
- opened
- reopened
Event Lainnya
Ada banyak event lain yang tersedia di GitHub Actions, seperti deployment
, workflow_run
, release
, dan check_run
. Event ini menawarkan opsi tambahan untuk memicu workflows Anda berdasarkan berbagai aktivitas repositori.
on:
release:
types:
- published
Untuk daftar lengkap event yang tersedia dan deskripsi mereka, merujuk ke dokumentasi GitHub Actions:
Workflows Terjadwal
Workflows terjadwal memungkinkan Anda untuk menjalankan workflows GitHub Actions Anda pada interval tertentu, seperti setiap hari atau mingguan. Fitur ini sangat berguna untuk tugas seperti pengujian otomatis, analisis kode, dan pelaporan.
Mengatur Jadwal
Untuk mengatur workflow terjadwal, Anda perlu menggunakan kata kunci schedule
dalam file konfigurasi workflow Anda (.github/workflows/workflow.yml
). Kata kunci schedule harus diikuti oleh daftar ekspresi cron
yang menentukan kapan workflow harus dijalankan.
on:
schedule:
- cron: '0 0 * * *'
Dalam contoh ini, workflow dijadwalkan untuk dijalankan setiap hari pada tengah malam (00:00).
Menggunakan Sintaks Cron
Sintaks cron digunakan untuk menentukan jadwal untuk workflow Anda. Ekspresi cron terdiri dari lima bidang, yang mewakili menit (0-59), jam (0-23), hari dalam sebulan (1-31), bulan (1-12), dan hari dalam seminggu (0-7, di mana 0 dan 7 mewakili Minggu).
Karakter khusus berikut dapat digunakan dalam ekspresi cron:
*
: Mewakili nilai apa pun (mis.,*
dalam bidang jam berarti "setiap jam"),
: Menentukan daftar nilai (mis.,1,15
dalam bidang hari dalam sebulan berarti "tanggal 1 dan 15")-
: Menentukan rentang nilai (mis.,1-5
dalam bidang hari dalam seminggu berarti "Senin hingga Jumat")/
: Menentukan interval (mis.,*/2
dalam bidang jam berarti "setiap 2 jam")
on:
schedule:
- cron: '30 2 * * 1-5'
Dalam contoh ini, workflow dijadwalkan untuk dijalankan pada pukul 2:30 pagi, Senin hingga Jumat.
Contoh Workflows Terjadwal
Berikut beberapa contoh workflows terjadwal lainnya:
- Jalankan workflow setiap 15 menit:
on:
schedule:
- cron: '*/15 * * * *'
- Jalankan workflow setiap Senin pukul 9:00 pagi:
on:
schedule:
- cron: '0 9 * * 1'
- Jalankan workflow pada tanggal 1 dan 15 setiap bulan pukul 6:00 sore:
on:
schedule:
- cron: '0 18 1,15 * *'
Workflows Manual
Workflows manual memungkinkan pengembang menjalankan workflows GitHub Actions sesuai permintaan, daripada mengandalkan event. Ini memberi Anda lebih banyak kontrol atas kapan tindakan tertentu harus dijalankan dan memudahkan pengujian dan debugging workflows Anda.
Event workflow_dispatch
Untuk membuat workflow manual, Anda perlu menggunakan event workflow_dispatch
dalam file konfigurasi workflow Anda (.github/workflows/workflow.yml
). Event ini memungkinkan Anda untuk memicu workflow secara manual dari antarmuka GitHub Actions.
on:
workflow_dispatch:
Dengan konfigurasi ini, workflow dapat dipicu kapan saja dengan mengunjungi tab "Actions" di repositori GitHub Anda, memilih workflow yang spesifik, dan mengklik tombol "Run workflow".
Mengkonfigurasi Input Manual
Anda juga dapat mengkonfigurasi parameter input untuk workflows manual Anda. Ini memungkinkan Anda untuk meneruskan data kustom ke workflow saat memicunya secara manual. Untuk mengkonfigurasi parameter input, tambahkan bidang inputs
di bawah event workflow_dispatch
dalam file konfigurasi workflow Anda.
on:
workflow_dispatch:
inputs:
environment:
description: 'Target environment'
required: true
default: 'staging'
Dalam contoh ini, parameter input bernama environment
telah ditambahkan ke workflow. Parameter memiliki deskripsi, ditandai sebagai wajib, dan memiliki nilai default 'staging'. Anda dapat mengakses parameter input dalam langkah-langkah workflow Anda menggunakan konteks github.event.inputs
.
steps:
- name: Deploy to environment
run: echo Deploying to ${{ github.event.inputs.environment }}
Menjalankan Workflows Manual
Setelah Anda mengkonfigurasi workflow manual dengan event workflow_dispatch
(dan parameter input opsional), Anda dapat memicunya dari tab "Actions" di repositori GitHub.
- Arahkan ke tab "Actions" di repositori GitHub Anda.
- Pilih workflow yang ingin Anda jalankan dari daftar workflows yang tersedia.
- Klik tombol "Run workflow".
- Jika workflow memiliki parameter input, Anda akan diminta untuk memasukkan nilainya. Setelah menyediakan nilai yang diperlukan, klik tombol "Run workflow" lagi untuk memicu workflow.
Menggabungkan Pemicu
Dalam banyak kasus, Anda mungkin ingin memicu workflow berdasarkan beberapa event atau kondisi. Dalam bab ini, saya akan menjelajahi cara menggabungkan pemicu yang berbeda untuk membuat workflows yang lebih kompleks yang sesuai dengan kebutuhan spesifik proyek Anda.
Untuk menggabungkan pemicu, Anda hanya perlu mencantumkannya di bawah kata kunci on
dalam file konfigurasi workflow Anda (.github/workflows/workflow.yml
). Dengan melakukan ini, workflow akan dipicu saat salah satu event yang terdaftar terjadi.
on:
push:
branches:
- main
pull_request:
branches:
- main
workflow_dispatch:
Dalam contoh ini, workflow dipicu ketika terjadi event push pada cabang main
, terjadi event pull request yang menargetkan cabang main
, atau workflow dipicu secara manual menggunakan event workflow_dispatch
.
Berikut beberapa contoh pemicu gabungan lainnya:
- Memicu workflow pada event push untuk cabang tertentu dan pada pembuatan rilis baru:
on:
push:
branches:
- main
- develop
release:
types:
- created
- Memicu workflow pada event masalah (dibuka atau dibuka kembali) dan pada jadwal (setiap hari pada tengah malam):
on:
issues:
types:
- opened
- reopened
schedule:
- cron: '0 0 * * *'
- Memicu workflow pada event pull request untuk cabang tertentu dan pada pemicu manual dengan parameter input:
on:
pull_request:
branches:
- main
workflow_dispatch:
inputs:
environment:
description: 'Target environment'
required: true
default: 'staging'
Referensi