Traffine I/O

Bahasa Indonesia

2023-03-03

Memicu Workflows di GitHub Actions

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 untuk branches atau tags tertentu dengan menggunakan filter branches atau tags.
.github/workflows/example.yaml
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 filter branches.
.github/workflows/example.yaml
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.
.github/workflows/workflow.yml
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.
.github/workflows/workflow.yml
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.

.github/workflows/workflow.yml
on:
  release:
    types:
      - published

Untuk daftar lengkap event yang tersedia dan deskripsi mereka, merujuk ke dokumentasi GitHub Actions:

https://docs.github.com/en/actions/reference/events-that-trigger-workflows

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.

.github/workflows/workflow.yml
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")
.github/workflows/workflow.yml
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:
.github/workflows/workflow.yml
on:
  schedule:
    - cron: '*/15 * * * *'
  • Jalankan workflow setiap Senin pukul 9:00 pagi:
.github/workflows/workflow.yml
on:
  schedule:
    - cron: '0 9 * * 1'
  • Jalankan workflow pada tanggal 1 dan 15 setiap bulan pukul 6:00 sore:
.github/workflows/workflow.yml
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.

.github/workflows/workflow.yml
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.

.github/workflows/workflow.yml
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.

.github/workflows/workflow.yml
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.

  1. Arahkan ke tab "Actions" di repositori GitHub Anda.
  2. Pilih workflow yang ingin Anda jalankan dari daftar workflows yang tersedia.
  3. Klik tombol "Run workflow".
  4. 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.

.github/workflows/workflow.yml
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:
.github/workflows/workflow.yml
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):
.github/workflows/workflow.yml
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:
.github/workflows/workflow.yml
on:
  pull_request:
    branches:
      - main
  workflow_dispatch:
    inputs:
      environment:
        description: 'Target environment'
        required: true
        default: 'staging'

Referensi

https://docs.github.com/en/actions/reference/events-that-trigger-workflows

Ryusei Kakujo

researchgatelinkedingithub

Focusing on data science for mobility

Bench Press 100kg!