Orbit

Orbit Web Kancaları

Webhooks push a signed HTTP POST to a URL of your choosing every time a deployment changes state, so your team hears about a failed build in the channel they already watch instead of finding out…

Webhook'lar bir dağıtımın durumu her değiştiğinde imzalı bir HTTP POST'u seçtiğiniz bir URL'ye gönderir, böylece ekibiniz başarısız bir derleme hakkında zaten izledikleri kanalda bilgi alır ve bunu müşteriden öğrenmek yerine.

Webhook'lar Nerede Bulunur

Orbit açın, projeyi tıklayın ve proje sekmesi şeridinde Configure grubu altında Webhooks seçeneğini seçin. Sayfa Webhooks başlıklıdır ve kendisini dağıtımlar durumu değiştiğinde HTTP POST bildirimleri alan, Slack, Discord ve genel JSON desteklenen şey olarak tanımlar.

Webhooks ve Hooks farklı şeylerdir ve aynı menüde yan yana bulunur. Webhook'lar giden: Orbit size bir şey oldu söyler. Deploy hook'ları gelen: bir şey Orbit'e dağıtmasını söyler. Bunlar için bkz. Triggering Deployments Via Deploy Hooks.

Bir Orbit projesi için Webhook'lar sayfası

Webhook Ekleme

  1. Add a webhook kartında ona bir Label verin. Gönderdiği hedef gibi bir şey.
  2. URL yapıştırın. https:// ile başlamalıdır.
  3. Trigger on altında istediğiniz olayları işaretleyin.
  4. Add webhook tıklayın.

İmza sırrı oluşturulduktan hemen sonra bir kez gösterilir, tekrar gösterilmeyeceği uyarısıyla. Uzaklaşmadan önce kopyalayın.

Bir proje en fazla on webhook tutabilir. Onbirinci eklenmesi sınırı adlandıran bir mesajla reddedilir.

Beş Olay

OlayNe zaman tetiklenir
QueuedDağıtım kuyruğa girer
BuildingDerleme başlar
SucceededDağıtım canlıdır
FailedDerleme veya dağıtım hata verdi
CancelledDağıtım tamamlanmadan önce durduruldu

Kasıtlı olarak seçin. Meşgul bir projede beşin tümüne abone olmak faydalı bir uyarı kanalını herkesin sesini kısttığı gürültüye çevirir. Çoğu takım için, Failed yalnız doğru başlangıç noktasıdır; Succeeded yalnızca üretim kanalı gibi dağıtım bildirimi gerçekten faydalı olduğu yerlerde eklenmelidir.

Slack ve Discord

URL bir Slack gelen webhook'u veya Discord webhook'u ise, Orbit bunu URL'den tespit eder ve ham JSON yerine biçimlendirilmiş bir mesaj gönderir. Sayfa bunu URL alanının altında söyler: Slack ve Discord URL'leri otomatik olarak algılanır.

Biçimlendirilmiş mesaj proje adını, olayı, dalı, kısa commiti, derleme zamanını, dağıtılan URL'yi ve bir şey başarısız olduğunda hata metnini taşır. Renk olayı takip eder, bu nedenle kanaldaki kırmızı bir kart kimse okumadan bir hatayı ifade eder.

Başka bir şey gerekli değildir. Slack veya Discord'da gelen webhook'u oluşturun, URL'yi buraya yapıştırın, olaylarınızı seçin ve işiniz bitti.

Genel JSON Yükleri

Diğer herhangi bir URL bir JSON gövdesi alır. Alanlar şunlardır:

Alanİçerik
eventBeş olay adından biri, deployment. ön ekli
projectId, projectName, projectSlugHangi proje
deploymentIdBu dağıtım hakkında
gitCommit, gitBranch, gitCommitMessageDağıtılan kod
buildDurationMsDerleme zamanı, bilindiği durumlarda
deployedUrlCanlı olduğu yer
panelUrlKPanel'e geri bir bağlantı
errorMessageHatalar üzerinde mevcut
triggeredAtISO 8601 zaman damgası
deliveryIdTeslimat başına benzersiz, çoğaltma kaldırma için

Uç noktanızı idempotent yapmak için deliveryId kullanın. Bir teslimatı yeniden denerseniz veya bir ağ aksaklığı bir çoğaltmaya neden olursa, id bunun zaten işlendiğini tanımanıza izin verir.

İmzayı Doğrulama

Her teslimat üç başlık taşır:

  • X-Orbit-Signature-256, imza sırrınızı kullanarak tam istek gövdesinin bir HMAC-SHA256'si, sha256= ve hex digest olarak biçimlendirilmiş.
  • X-Orbit-Event, olay adı.
  • X-Orbit-Delivery, teslimat id'si.

Yüke göz koymazdan önce imzayı doğrulayın. Ham gövde baytları üzerinde aynı HMAC'i hesaplayın ve string eşitliği yerine sabit zamanlı karşılaştırma kullanarak karşılaştırın.

const expected = 'sha256=' + crypto
  .createHmac('sha256', process.env.ORBIT_WEBHOOK_SECRET)
  .update(rawBody)
  .digest('hex');

if (!crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(received))) {
  return res.status(401).end();
}

HMAC'i ham istek gövdesi üzerinde, herhangi bir JSON ayrıştırması ve yeniden serileştirmeden önce hesaplayın. Ayrıştırılmış ve tekrar stringleştirilmiş bir gövde genellikle bayt açısından farklıdır ve imza kodunuz ne kadar doğru görünse de asla eşleşmeyecektir.

Webhook'u Test Etme

Her webhook satırında Send test delivery bulunur. Bu, uç noktanıza gerçek bir teslimat gönderir ve aldığı HTTP kodunu rapor eder veya başarısızlık detayını rapor eder.

Bir webhook ekledikten hemen sonra kullanın, buna güvenmeden önce. Bir güvenlik duvarı kuralı veya yalnızca GET'i kabul eden bir rota bir olay sırasından çok daha kolay bulunur.

Teslimat Geçmişi

Her satır son yedi günün bir sparkbar'ını teslimat sayısı, başarı yüzdesi ve ortalama süre ile birlikte taşır; artı son tetiklenme zamanı ve sonucu.

Bireysel teslimatlar için Show delivery history öğesini genişletin: olay, yanıt kodu, süre ve varsa hata metni. Herhangi bir teslimat Retry delivery ile yeniden gönderilebilir, bu da aldığı kodu rapor eder.

Teslimatlar on iki saniye sonra zaman aşımına uğrar. Uç noktanız yavaş çalışma yaparsa, bağlantıyı açık tutmak yerine 200 ile yanıtlayın ve daha sonra işleyin.

Sırrı Döndürme

Rotate secret tıklayın. Yeni sır bir kez gösterilir ve ipucu eski sırrın hemen geçersiz olduğunu açıkça belirtir.

Bu, teslimatların uç noktanızın bilmediği bir sırla imzalandığı kısa bir pencere anlamına gelir. Buna hazırlık yapın: sessiz bir anda döndürün ve uç noktanızı sonraki çok hareket olarak güncelleyin.

Sırrına erişim hakkı olan birisi ayrıldığında veya paylaşılan bir kanala veya bir bilette yapıştırıldığında döndürün.

Devre Dışı Bırakma ve Silme

Disable webhook teslimatları durdurur ancak yapılandırma ve geçmişi tutar ve satır bir Disabled rozeti gösterir. Bu, planlı bir geçiş sırasında uyarıları duraklatırken olduğu gibi uygun seçimdir ve bu da çok fazla gürültü üretecektir.

Delete webhook tamamını kaldırır. Emin olmadığınız sürece devre dışı bırakmayı kullanın.

Bildirim Almak İçin Diğer Yollar

Webhook'lar esnek seçenektir. İki daha hafif alternatif Settings'te bulunur:

  • Deploy email notifications, üç ayarla: tüm dağıtımlar, yalnızca hatalar veya kapalı.
  • Notification channels, dağıtım başarısı veya başarısızlığında, derleme regresyonlarında ve paket regresyonlarında bir webhook URL'sine gönderir; kendi teslimat geçmişi ve test düğmesiyle.

Her ikisi için bkz. Orbit Project Settings.

Sorun Giderme

Teslimatlar bir HTTP kodu ile başarısız olarak gösterilir. Uç noktanız bir hata döndürdü. Kod size hangi olduğunu söyler: 404 yolu yanlış anlamına gelir, 401 veya 403 genellikle kendi imza kontrolünüzün reddettiği anlamına gelir ve 500 işleyicinizin attığı anlamına gelir.

Teslimatlar zaman aşımı ile başarısız olur. Uç noktanız on iki saniyeden uzun sürdü. 200'ü hemen döndürün ve işi asenkron olarak yapın.

Hiçbir şey teslim edilmez. Webhook'un etkinleştirildiğini ve beklediğiniz olayın işaretlendiğini kontrol edin. Asla sıraya girmemiş bir derleme kuyruklanmış bir olay tetiklemez.

İmza asla doğrulamamıştır. Hemen hemen her zaman yukarıda açıklanan ham gövde sorunu. Karma yaptığınız tam baytları kaydedin ve uzunluklarını Content-Length başlığıyla karşılaştırın.

Slack URL'si ham JSON gönderiliyor. Slack gelen webhook'ları hooks.slack.com altında bulunur. Farklı bir Slack URL'si biri olarak algılanmayacaktır.

Sonra Nereye Gidilir

Hala yardıma mı ihtiyacınız var?

Bize şu adresinden e-posta gönderin: support@kapsulehost.com ya da KPanel'de sohbet açın.

KPanel'i Aç
Orbit Web Kancaları