Webhook Events
GitHub Actions’ı “dış dünyadan” bir HTTP isteği ile tetiklemek istiyorsan, repository_dispatch
event’ini kullanırsın. Yani GitHub harici bir sistemden, senin GitHub repo’na özel bir endpoint’e istek atarak, bir iş akışını başlatabilir.
Örnek Workflow:
name: Workflow on Repository Dispatch
on:
repository_dispatch:
types: [webhook]
jobs:
respond-to-dispatch:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v2
- name: Run a script
run: echo "Event of type ${GITHUB_EVENT_NAME}"
on.repository_dispatch.types: [webhook]
diyerek,event_type
değeriwebhook
olan dış istekleri yakalıyoruz.GITHUB_EVENT_NAME
gibi değişkenlerle, gelen isteğin türünü veya payload verisini Workflow içinde kullanabiliriz.
HTTP isteği (curl) örneği:
curl -X POST \
-H "Accept: application/vnd.github+json" \
-H "Authorization: token PERSONAL_ACCESS_TOKEN" \
-d '{"event_type": "webhook", "client_payload": {"key": "value"}}' \
https://api.github.com/repos/OWNER/REPO/dispatches
https://api.github.com/repos/{owner}/{repo}/dispatches
GitHub’ın “repository dispatch” endpoint’i.-H "Authorization: token ..."
kısmına, repo’ya yazma izni olan bir Personal Access Token eklememiz gerekiyor.-d '{"event_type": "webhook", ...}'
ile,event_type
değeriniwebhook
(veya istediğin başka bir isim) verip, ek payload gönderebiliyoruz.Bu istek başarıyla yapılırsa, GitHub Actions senin tanımladığın
repository_dispatch
Workflow’unu tetikler.
-d
parametresinde yer alan "client_payload": {"key": "value"}
kısmı, GitHub Actions’a dış dünyadan ek veri (parametre) yollamak içindir. Yani bu sayede repository_dispatch
event’ine istediğin kadar “anahtar-değer” çifti ekleyebilirsin ve GitHub Actions içinde bu verilere ulaşabilirsin.
Workflow Dosyası Örneği,
name: Handle External Dispatch (Webhook Example)
on:
repository_dispatch:
types: [webhook] # Dışarıdan tetiklemede 'event_type' olarak "webhook" beklendiğini ifade eder
jobs:
handle_webhook:
runs-on: ubuntu-latest
steps:
- name: Show Payload
run: |
echo "Verilen versiyon: ${{ github.event.client_payload.version }}"
echo "Çalışma ortamı: ${{ github.event.client_payload.environment }}"
echo "Herhangi başka bir değer: ${{ github.event.client_payload.anyOtherKey }}"
on.repository_dispatch.types: [webhook]
:event_type
değeri “webhook” olan bir dış çağrı geldiğinde bu Workflow tetiklenecek.github.event.client_payload.*
:repository_dispatch
ile gelen ek parametreleri okuyabileceğimiz yerdir. Örneğin yukarıdaversion
,environment
,anyOtherKey
gibi alanlara değer girersek, Workflow bunları terminale yazacak.
Aşağıdaki komutu kendi terminalinde çalıştırarak (öncesinde PERSONAL_ACCESS_TOKEN
, OWNER
, REPO
değerlerini kendine göre düzenleyerek) bu Workflow’u tetikleyebiliriz:
curl -X POST \
-H "Accept: application/vnd.github+json" \
-H "Authorization: token PERSONAL_ACCESS_TOKEN" \
-d '{
"event_type": "webhook",
"client_payload": {
"version": "1.2.3",
"environment": "staging",
"anyOtherKey": "örnek bir değer"
}
}' \
https://api.github.com/repos/OWNER/REPO/dispatches
"event_type": "webhook"
: Buradaki değer, Workflow’datypes: [webhook]
satırıyla eşleştiği için tetikleme gerçekleşir."client_payload": {...}
: Bu alana eklediğin anahtar-değer çiftleri, GitHub Actions içindegithub.event.client_payload
üzerinden okunabilir. Örnekte"version": "1.2.3"
,"environment": "staging"
,"anyOtherKey": "örnek bir değer"
gönderiyoruz.Token Gereksinimi:
PERSONAL_ACCESS_TOKEN
’ın repo’ya yazma (write) erişimi olması gerekir. Aksi takdirderepository_dispatch
event’ini tetikleyemeyiz.
Özetle, "client_payload"
altındaki {"key": "value"}
kısımları tamamen workflow’muza göndermek istediğimiz ek veriyi temsil eder. Bu verileri Actions içinde okuyup istediğin gibi kullanabiliriz.
Last updated
Was this helpful?