
WebHook adalah alat yang dapat dikonfigurasi ringan yang ditulis di Go, yang memungkinkan Anda untuk dengan mudah membuat titik akhir HTTP (kait) di server Anda, yang dapat Anda gunakan untuk menjalankan perintah yang dikonfigurasi. Anda juga dapat meneruskan data dari permintaan HTTP (seperti header, variabel payload atau kueri) ke perintah Anda. Webhook juga memungkinkan Anda untuk menentukan aturan yang harus dipenuhi agar kait dipicu.
Misalnya, jika Anda menggunakan GitHub atau Bitbucket, Anda dapat menggunakan Webhook untuk mengatur kait yang menjalankan skrip redeploy untuk proyek Anda di server pementasan Anda, setiap kali Anda mendorong perubahan ke cabang utama proyek Anda.
Jika Anda menggunakan materi atau malas, Anda dapat mengatur "integrasi webhook keluar" atau "perintah slash" untuk menjalankan berbagai perintah di server Anda, yang kemudian dapat melaporkan kembali langsung ke Anda atau saluran Anda menggunakan "integrasi webhook yang masuk", atau badan respons yang tepat.
Webhook bertujuan untuk melakukan tidak lebih dari yang seharusnya, dan itu adalah:
Yang lainnya adalah tanggung jawab penulis komando.
| Gateway Webhook yang dapat dijadikan skrip untuk menjalankan build, menggunakan, dan skrip proxy kustom Anda dengan aman di server Anda. | Sebuah gerbang acara untuk menelan, memverifikasi, mengantri, mentransformasikan, menyaring, memeriksa, memantau, dan memutar ulang webhooks. |
Untuk memulai, pertama -tama pastikan Anda telah mengatur dengan benar GO 1.21 atau lingkungan yang lebih baru dan kemudian jalankan
$ go build github.com/adnanh/webhookUntuk membangun versi terbaru dari webhook.
Jika Anda menggunakan Ubuntu Linux (17.04 atau lebih baru), Anda dapat menginstal Webhook menggunakan sudo apt-get install webhook yang akan menginstal versi kemasan komunitas.
Jika Anda menggunakan Debian Linux ("Peregangan" atau lebih baru), Anda dapat menginstal Webhook menggunakan sudo apt-get install webhook yang akan menginstal versi kemasan komunitas (terima kasih @freeakanayaka) dari https://packages.debian.org/sid/webhook
Jika Anda menggunakan FreeBSD, Anda dapat menginstal WebHook menggunakan pkg install webhook .
Binari prebuilt untuk arsitektur yang berbeda tersedia di rilis GitHub.
Langkah selanjutnya adalah mendefinisikan beberapa kait yang Anda inginkan untuk melayani webhook. WebHook mendukung file konfigurasi JSON atau YAML, tetapi kami akan fokus terutama pada JSON dalam contoh berikut. Mulailah dengan membuat file kosong bernama hooks.json . File ini akan berisi serangkaian kait yang akan dilayani oleh webhook. Periksa halaman definisi hook untuk melihat deskripsi terperinci tentang properti apa yang dapat dikandung, dan bagaimana menggunakannya.
Mari kita tentukan kait sederhana bernama redeploy-webhook yang akan menjalankan skrip redeploy yang terletak di /var/scripts/redeploy.sh . Pastikan skrip Bash Anda memiliki SHEBANG #!/bin/sh di atasnya.
File hooks.json kami sekarang akan terlihat seperti ini:
[
{
"id" : " redeploy-webhook " ,
"execute-command" : " /var/scripts/redeploy.sh " ,
"command-working-directory" : " /var/webhook "
}
] Catatan: Jika Anda lebih suka YAML, file hooks.yaml yang setara adalah:
- id : redeploy-webhook
execute-command : " /var/scripts/redeploy.sh "
command-working-directory : " /var/webhook "Anda sekarang dapat menjalankan Webhook menggunakan
$ /path/to/webhook -hooks hooks.json -verboseIni akan dimulai pada port default 9000 dan akan memberi Anda satu titik akhir HTTP
http://yourserver:9000/hooks/redeploy-webhookPeriksa halaman Parameter WebHook untuk melihat cara mengganti IP, port, dan pengaturan lainnya seperti Hook Hotreload, Verbose Output, dll, saat memulai Webhook.
Dengan melakukan permintaan HTTP Get atau Posting sederhana ke titik akhir itu, skrip redeploy yang Anda tentukan akan dieksekusi. Rapi!
Namun, Hook yang didefinisikan seperti itu dapat menimbulkan ancaman keamanan bagi sistem Anda, karena siapa pun yang mengetahui titik akhir Anda, dapat mengirim permintaan dan menjalankan perintah Anda. Untuk mencegahnya, Anda dapat menggunakan properti "trigger-rule" untuk kait Anda, untuk menentukan keadaan yang tepat di mana kait akan dipicu. Misalnya, Anda dapat menggunakannya untuk menambahkan rahasia yang harus Anda berikan sebagai parameter agar berhasil memicu kait. Silakan periksa halaman Aturan Hook untuk daftar perincian aturan yang tersedia dan penggunaannya.
WebHook menyediakan dukungan terbatas data formulir Multipart. Data formulir multipart dapat berisi dua jenis bagian: nilai dan file. Semua nilai formulir ditambahkan secara otomatis ke ruang lingkup payload . Gunakan pengaturan parse-parameters-as-json untuk menguraikan nilai yang diberikan sebagai JSON. Semua file diabaikan kecuali mereka cocok dengan salah satu kriteria berikut:
Content-Type adalah application/json .parse-parameters-as-json . Dalam kedua kasus tersebut, bagian file yang diberikan akan diuraikan sebagai JSON dan ditambahkan ke peta payload .
WebHook dapat menguraikan file konfigurasi Hooks sebagai template Go saat diberikan parameter -template CLI. Lihat halaman Template untuk detail lebih lanjut tentang penggunaan template.
Webhook secara default melayani kait menggunakan http. Jika Anda ingin Webhook melayani konten yang aman menggunakan HTTPS, Anda dapat menggunakan flag -secure saat memulai Webhook. File yang berisi sertifikat dan kunci pribadi yang cocok untuk server harus disediakan menggunakan -cert /path/to/cert.pem dan -key /path/to/key.pem flags. Jika sertifikat ditandatangani oleh otoritas sertifikat, file sertifikat harus menjadi gabungan sertifikat server diikuti oleh sertifikat CA.
Versi TLS dan bendera pemilihan cipher suite tersedia dari baris perintah. Untuk mendaftar cipher suites yang tersedia, gunakan flag -list-cipher-suites . Bendera -tls-min-version dapat digunakan dengan -list-cipher-suites .
WebHook dapat dijalankan di belakang "Proxy Terbalik" - server yang menghadap web lain seperti Apache HTTPD atau NGINX yang menerima permintaan dari klien dan meneruskannya ke [WebHook] [h]. Anda dapat meminta webhook mendengarkan di port TCP biasa atau di soket domain UNIX (dengan bendera -socket ), kemudian konfigurasikan proxy Anda untuk mengirim permintaan untuk nama host tertentu atau sub -jalur di atas port atau soket ke webhook.
Perhatikan bahwa ketika berjalan dalam mode ini aturan pemicu ip-whitelist tidak akan berfungsi seperti yang diharapkan, karena akan memeriksa alamat proxy , bukan klien . Pembatasan IP klien perlu ditegakkan dalam proxy, sebelum memutuskan apakah akan meneruskan permintaan ke Webhook.
Jika Anda ingin mengatur header CORS, Anda dapat menggunakan -header name=value Bendera saat memulai Webhook untuk mengatur header CORS yang sesuai yang akan dikembalikan dengan setiap respons.
systemdPada platform yang menggunakan SystemD, WebHook mendukung mekanisme aktivasi soket . Jika Webhook mendeteksi bahwa ia telah diluncurkan dari soket yang dikelola SystemD, ia akan secara otomatis menggunakannya alih-alih membuka port mendengarkannya sendiri. Lihat halaman SystemD untuk detail lengkap.
Anda dapat menggunakan salah satu dari gambar Docker berikut, atau membuat sendiri (silakan baca diskusi ini):
Lihat halaman contoh hook untuk contoh kait yang lebih kompleks.
Lihat repositori Webhook-Contrib untuk koleksi alat dan pembantu yang terkait dengan Webhook yang telah disumbangkan oleh komunitas Webhook.
Lihatlah masalah yang ada untuk melihat apakah orang lain juga memiliki masalah yang sama, atau buka yang baru.
DigitalOcean adalah platform komputasi awan yang sederhana dan kuat, yang dirancang untuk pengembang.
BrowserStack adalah alat pengujian cross-browser berbasis cloud yang memungkinkan pengembang untuk menguji situs web mereka di berbagai browser pada sistem operasi dan perangkat seluler yang berbeda, tanpa mengharuskan pengguna untuk menginstal mesin, perangkat, atau emulator virtual.
Dukung proyek ini dengan menjadi sponsor. Logo Anda akan muncul di sini dengan tautan ke situs web Anda.
Proyek ini ada berkat semua orang yang berkontribusi. Menyumbang!.
Terima kasih untuk semua pendukung kami!
Lisensi MIT (MIT)
Hak Cipta (C) 2015 Adnan Hajdarevic [email protected]
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
Pemberitahuan hak cipta di atas dan pemberitahuan izin ini harus dimasukkan dalam semua salinan atau bagian substansial dari perangkat lunak.
Perangkat lunak ini disediakan "sebagaimana adanya", tanpa jaminan apa pun, tersurat maupun tersirat, termasuk tetapi tidak terbatas pada jaminan dapat diperjualbelikan, kebugaran untuk tujuan tertentu dan nonpringement. Dalam hal apa pun penulis atau pemegang hak cipta tidak akan bertanggung jawab atas klaim, kerusakan atau tanggung jawab lainnya, baik dalam tindakan kontrak, gugatan atau sebaliknya, timbul dari, di luar atau sehubungan dengan perangkat lunak atau penggunaan atau transaksi lain dalam perangkat lunak.