Mengonfigurasi alur kerja GitHub Actions

Selesai

Di sini, Anda mempelajari beberapa konfigurasi umum dalam file alur kerja. Anda juga menjelajahi kategori jenis peristiwa, menonaktifkan dan menghapus alur kerja, dan menggunakan versi tindakan tertentu untuk praktik terbaik keamanan.

Mengonfigurasi alur kerja yang akan dijalankan untuk peristiwa terjadwal

Seperti disebutkan sebelumnya, Anda dapat mengonfigurasi alur kerja untuk dijalankan saat aktivitas tertentu terjadi pada GitHub, saat peristiwa di luar GitHub terjadi, atau pada waktu yang dijadwalkan. Kejadian ini schedule memungkinkan Anda memicu alur kerja untuk berjalan pada waktu UTC tertentu menggunakan sintaksis cron POSIX. Sintaks cron ini memiliki lima bidang *, dan setiap bidang mewakili satuan waktu.

Diagram lima bidang satuan waktu untuk menjadwalkan peristiwa dalam file alur kerja.

Misalnya, jika Anda ingin menjalankan alur kerja setiap 15 menit, schedule peristiwa akan terlihat seperti contoh berikut:

on:
  schedule:
    - cron:  '*/15 * * * *'

Dan jika Anda ingin menjalankan alur kerja setiap hari Minggu pukul 03.00, peristiwa schedule akan terlihat seperti ini:

on:
  schedule:
    - cron:  '0 3 * * SUN'

Anda juga dapat menggunakan operator untuk menentukan rentang nilai atau untuk memanggil alur kerja terjadwal Anda. Interval terpendek Anda dalam menjalankan alur kerja terjadwal adalah sekali setiap lima menit, dan alur kerja terjadwal berjalan pada penerapan terbaru di cabang default atau dasar.

Mengonfigurasi alur kerja yang akan dijalankan untuk peristiwa manual

Selain peristiwa terjadwal, Anda dapat memicu alur kerja secara manual menggunakan peristiwa workflow_dispatch tersebut. Kejadian ini memungkinkan Anda menjalankan alur kerja dengan menggunakan GitHub REST API atau dengan memilih tombol Jalankan alur kerja di tab Tindakan dalam repositori Anda di GitHub. Menggunakan workflow_dispatch, Anda dapat memilih cabang mana yang Anda inginkan untuk dijalankan alur kerja, dan mengatur opsional inputs yang disajikan GitHub sebagai elemen formulir di UI.

on:
  workflow_dispatch:
    inputs:
      logLevel:
        description: 'Log level'     
        required: true
        default: 'warning'
      tags:
        description: 'Test scenario tags'  

Selain workflow_dispatch, Anda dapat menggunakan GitHub API untuk memicu peristiwa webhook yang disebut repository_dispatch. Kejadian ini memungkinkan Anda memicu alur kerja untuk aktivitas yang terjadi di luar GitHub. Ini pada dasarnya berfungsi sebagai permintaan HTTP ke repositori Anda yang meminta GitHub untuk memicu alur kerja dari tindakan atau webhook. Menggunakan peristiwa manual ini mengharuskan Anda melakukan dua hal: mengirim permintaan POST ke titik akhir GitHub /repos/{owner}/{repo}/dispatches dengan nama peristiwa webhook di isi permintaan, dan mengonfigurasi alur kerja Anda untuk menggunakan peristiwa repository_dispatch.

curl \
  -X POST \
  -H "Accept: application/vnd.github.v3+json" \
  https://api.github.com/repos/octocat/hello-world/dispatches \
  -d '{"event_type":"event_type"}'
on:
  repository_dispatch:
    types: [opened, deleted]

Mengonfigurasi alur kerja yang akan dijalankan untuk peristiwa webhook

Terakhir, Anda dapat mengonfigurasi alur kerja untuk dijalankan saat peristiwa webhook tertentu terjadi pada GitHub. Anda dapat memicu sebagian besar peristiwa webhook dari lebih dari satu aktivitas untuk webhook. Jika ada beberapa aktivitas untuk webhook, Anda dapat menentukan jenis aktivitas untuk memicu alur kerja. Misalnya, Anda dapat menjalankan alur kerja untuk acara check_run, tetapi hanya untuk jenis aktivitas rerequested atau requested_action.

on:
  check_run:
    types: [rerequested, requested_action]

Pengiriman Repository

repository_dispatch adalah peristiwa kustom di GitHub Actions yang memungkinkan sistem eksternal (atau bahkan alur kerja GitHub lainnya) untuk memicu alur kerja secara manual dengan mengirim permintaan POST ke API GitHub. Ini memungkinkan otomatisasi dan integrasi yang fleksibel dengan alat, skrip, atau sistem luar yang perlu memulai alur kerja di repositori Anda.

Kasus penggunaan

  • Mengaktifkan alur kerja dari alat CI/CD eksternal.

  • Mengoordinasikan penyebaran pada beberapa repositori (misalnya, Repo A menyelesaikan build dan memicu proses di Repo B).

  • Mulai otomatisasi berdasarkan peristiwa eksternal (webhook, pemberitahuan pemantauan, pekerjaan CRON di luar GitHub).

  • Eksekusi alur kerja rantai antara repositori atau dalam monorepos.

Contoh alur kerja yang mendengarkan repository_dispatch

name: Custom Dispatch Listener

on:
  repository_dispatch:
    types: [run-tests, deploy-to-prod]  # Optional filtering

jobs:
  run:
    runs-on: ubuntu-latest
    steps:
      - name: Echo the payload
        run: |
          echo "Event type: ${{ github.event.action }}"
          echo "Payload value: ${{ github.event.client_payload.env }}"

Elemen kunci:

  • tipe: Opsional. Menentukan jenis peristiwa kustom seperti run-tests, deploy-to-prod, dll.

  • github.event.client_payload: Akses ke data kustom lain yang diteruskan dalam peristiwa pengiriman.

  • github.event.action: Nama event_type dikirim.

Memicu peristiwa melalui API

Anda harus mengirim permintaan POST ke titik akhir GitHub REST API v3:

POST https://api.github.com/repos/OWNER/REPO/dispatches

Otorisasi

  • Memerlukan token akses pribadi (PAT) dengan cakupan repositori.
  • Untuk organisasi, pastikan pengaturan akses yang tepat untuk token Anda.

Sampel struktur perintah

curl -X POST \
  -H "Accept: application/vnd.github+json" \
  -H "Authorization: token YOUR_GITHUB_TOKEN" \
  https://api.github.com/repos/OWNER/REPO/dispatches \
  -d '{"event_type":"run-tests","client_payload":{"env":"staging"}}'

Struktur muatan

{
  "event_type": "run-tests",
  "client_payload": {
    "env": "staging"
  }
}

Parameter-parameternya

Bidang Tipe Deskripsi Diperlukan
event_type string Nama kustom untuk peristiwa tersebut. Nama ini dihubungkan dengan nilai tipe dalam pemicu alur kerja Anda Ya
client_payload objek Payload JSON sembarang untuk mengirim data kustom ke alur kerja (github.event.client_payload) Tidak.

Perincian parameter Repository_dispatch

Saat membuat permintaan POST ke titik akhir GITHub API, Anda harus meneruskan isi JSON dengan dua parameter utama:

  • jenis_acara
  • client_payload
jenis_acara

String kustom yang diperlukan yang Anda tentukan. GitHub memperlakukan nilai ini sebagai "tindakan" atau "jenis" pengiriman. Ini digunakan untuk mengidentifikasi apa yang memicu alur kerja dan memfilter alur kerja yang mendengarkan jenis tertentu.

  • Format (tata letak):

    • Jenis: teks
    • Contoh: "deploy", "menjalankan-tes", "sinkronisasi-db", "membangun-docker"
  • Gunakan dalam Alur Kerja: Digunakan dalam mendengarkan jenis peristiwa tertentu dan mengakses nilai di dalam alur kerja. Ini membantu penggunaan kembali satu alur kerja untuk beberapa tujuan dan membuat otomatisasi lebih terorganisir dan berbasis peristiwa.

  • Contoh:

- name: Print event type
  run: echo "Event type: ${{ github.event.action }}"
client_payload

Objek JSON bentuk bebas yang memungkinkan Anda mengirim data kustom bersama dengan pengiriman. Anda menentukan struktur, dan dapat diakses di dalam alur kerja.

  • Format (tata letak):

    • Jenis: objek
    • Kunci dan nilai kustom
  • Gunakan dalam Alur Kerja: Objek ini digunakan untuk penyebaran di berbagai lingkungan, pelepasan terverifikasi, atau penerusan konteks dari sistem atau jalur lain dan memungkinkan alur kerja dengan parameter, mirip dengan argumen input.

  • Contoh:

- name: Show payload values
  run: |
    echo "Environment: ${{ github.event.client_payload.env }}"
    echo "Version: ${{ github.event.client_payload.version }}"

Contoh perincian muatan
{
  "event_type": "deploy-to-prod",
  "client_payload": {
    "env": "production",
    "build_id": "build-456",
    "initiator": "admin_user",
    "services": ["web", "api", "worker"]
  }
}

Menggunakan kata kunci kondisional

Dalam file alur kerja, Anda dapat mengakses informasi konteks dan mengevaluasi ekspresi. Meskipun ekspresi umumnya digunakan dengan kata kunci if kondisional dalam file alur kerja untuk menentukan apakah langkah harus berjalan atau tidak, Anda dapat menggunakan konteks dan ekspresi yang didukung untuk membuat kondisional. Penting untuk diketahui bahwa saat menggunakan kondisi di alur kerja Anda, Anda perlu menggunakan sintaks ${{ <expression> }}tertentu . Sintaks ini memberi tahu GitHub untuk mengevaluasi ekspresi daripada memperlakukannya sebagai string.

Misalnya, alur kerja yang menggunakan if kondisional untuk memeriksa apakah github.ref (ref cabang atau tag yang memicu eksekusi alur kerja) cocok refs/heads/main. Untuk melanjutkan, alur kerja akan terlihat seperti ini:

name: CI
on: push
jobs:
  prod-check:
    if: github.ref == 'refs/heads/main'
    runs-on: ubuntu-latest
    steps:
      ...

Perhatikan bahwa di contoh ini, ${{ }} hilang dari sintaks. Dengan beberapa ekspresi, seperti ekspresi kondisional if, Anda dapat menghilangkan sintaks ekspresi. GitHub secara otomatis mengevaluasi beberapa ekspresi umum ini, tetapi Anda selalu dapat menyertakan ekspresi umum jika Anda lupa ekspresi mana yang dievaluasi secara otomatis oleh GitHub.

Untuk informasi selengkapnya tentang sintaks dan ekspresi alur kerja, lihat Sintaks alur kerja untuk Tindakan GitHub.

Menonaktifkan dan menghapus alur kerja

Setelah menambahkan alur kerja ke repositori, Anda mungkin menemukan situasi di mana Anda ingin menonaktifkan alur kerja untuk sementara waktu. Anda dapat menghentikan alur kerja agar tidak dipicu tanpa harus menghapus file dari repositori, baik di GitHub atau melalui REST API GitHub. Saat ingin mengaktifkan alur kerja lagi, Anda dapat dengan mudah melakukannya menggunakan metode yang sama.

Cuplikan layar menonaktifkan alur kerja di GitHub.

Menonaktifkan alur kerja dapat berguna dalam beberapa situasi berikut:

  • Kesalahan di alur kerja menghasilkan terlalu banyak atau permintaan yang salah yang berdampak pada layanan eksternal secara negatif.
  • Anda ingin menjeda alur kerja untuk sementara waktu yang tidak penting dan mengonsumsi terlalu banyak menit di akun Anda.
  • Anda ingin menjeda alur kerja yang mengirim permintaan ke layanan yang tidak berfungsi.
  • Anda sedang mengerjakan sebuah fork, dan Anda tidak memerlukan semua fungsi dari beberapa alur kerja yang terdapat di dalamnya (seperti alur kerja terjadwal).

Anda juga dapat membatalkan eksekusi alur kerja yang sedang berlangsung di UI GitHub dari tab Tindakan atau dengan menggunakan titik DELETE /repos/{owner}/{repo}/actions/runs/{run_id}akhir GITHub API . Perlu diingat bahwa saat Anda membatalkan eksekusi alur kerja, GitHub membatalkan semua pekerjaan dan langkah-langkahnya dalam eksekusi tersebut.

Menggunakan alur kerja yang di-template organisasi

Jika Anda memiliki alur kerja yang digunakan beberapa tim dalam organisasi, Anda tidak perlu membuat ulang alur kerja yang sama untuk setiap repositori. Sebagai gantinya, Anda dapat mempromosikan konsistensi di seluruh organisasi Anda dengan menggunakan templat alur kerja yang ditentukan dalam repositori organisasi .github . Setiap anggota dalam organisasi dapat menggunakan alur kerja template organisasi, dan setiap repositori dalam organisasi tersebut memiliki akses ke alur kerja template tersebut.

Anda dapat menemukan alur kerja ini dengan menavigasi ke tab Tindakan dari repositori dalam organisasi, memilih Alur kerja baru, lalu menemukan bagian templat alur kerja organisasi berjudul "Alur Kerja yang dibuat oleh nama organisasi". Misalnya, organisasi bernama Mona memiliki alur kerja templat seperti yang ditunjukkan di sini.

Cuplikan layar alur kerja organisasi templat yang disebut salam dan triase oleh Mona.

Menggunakan versi tindakan tertentu

Saat mereferensikan tindakan dalam alur kerja Anda, kami sarankan Anda merujuk ke versi tertentu dari tindakan tersebut daripada hanya tindakan itu sendiri. Dengan mereferensikan versi tertentu, Anda menempatkan perlindungan dari perubahan tak terduga yang didorong ke tindakan yang berpotensi merusak alur kerja Anda. Berikut adalah beberapa cara Anda dapat mereferensikan versi tindakan tertentu:

steps:    
  # Reference a specific commit
  - uses: actions/setup-node@c46424eee26de4078d34105d3de3cc4992202b1e
  # Reference the major version of a release
  - uses: actions/setup-node@v1
  # Reference a minor version of a release
  - uses: actions/setup-node@v1.2
  # Reference a branch
  - uses: actions/setup-node@main

Beberapa referensi lebih aman daripada yang lain. Misalnya, mengacu pada cabang tertentu akan menjalankan tindakan tersebut sesuai perubahan terbaru dari cabang tersebut, yang bisa jadi Anda inginkan atau tidak. Dengan mereferensikan nomor versi tertentu atau menerapkan hash SHA, Anda menjadi lebih spesifik tentang versi tindakan yang Anda jalankan. Untuk stabilitas dan keamanan yang lebih baik, sebaiknya Anda menggunakan sha penerapan tindakan yang dirilis dalam alur kerja Anda.