Gelişmiş Otomasyon Kalıpları
Otomasyon kütüphaneniz büyüdükçe, kurallar birbirleriyle karmaşık şekillerde etkileşir. Bu sayfa, güvenilir çoklu kural iş akışları oluşturma, sonsuz döngüleri önleme, çatışmaları ele alma, performansı optimize etme ve başarısızlıkları teşhis etme konularındaki gelişmiş kalıpları kapsar.
Çoklu kural zincirleme
Kural zincirleme, bir kuralın eyleminin başka bir kuralı tetikleyen bir olay ürettiğinde meydana gelir. Bu, çok adımlı iş akışları oluşturmak için güçlü bir kalıptır.
Zincirleme nasıl çalışır
- Kural A,
issue_createdüzerinde tetiklenir ve durumu "Triyaj"a değiştirir. - Durum değişikliği bir
state_changedolayı üretir. - Kural B, yeni durumun "Triyaj" olduğu
state_changedüzerinde tetiklenir ve triyaj sorumlusunu atar. - Atanan değişikliği bir
assignee_changedolayı üretir. - Kural C,
assignee_changedüzerinde tetiklenir ve atanana bildirim gönderir.
Her kural bağımsız ve yeniden kullanılabilirdır. Kural B, durum değişikliğinin Kural A'dan, bir insandan veya API'den gelmesi farketmeksizin çalışır.
Zincir örneği: hata triyaj iş akışı
| Adım | Kural | Tetikleyici | Koşul | Eylem |
|---|---|---|---|---|
| 1 | Yeni Hata Yönlendiricisi | issue_created | Etiket "Bug" içeriyor | change_state ile "Triyaj" |
| 2 | Triyaj Atayıcısı | state_changed | Yeni durum "Triyaj" | Triyaj sorumlusunu assign et |
| 3 | Atama Bildiricisi | assignee_changed | Atanan eklendi | Yeni atanana send_notification |
| 4 | Triyaj Zaman Asimi | scheduled (günlük) | Durum "Triyaj" VE updated_at_age_days > 3 | change_priority ile "Yüksek", add_comment "Triyaj süresi aştı" |
Zincirler için tasarım ilkeleri
- Her kuralı tek bir sorumluluğa odaklayın. Çok fazla iş yapan bir kuralın hatasını ayıklamak ve yeniden kullanmak daha zordur.
- Kuralları zincirdeki rollerini belirtecek şekilde adlandırın. Örneğin: "Adım 1: Yeni hataları yönlendir" veya "Hata Triyajı -- Sorumlu Ata".
- Zinciri belgeleyin. Her kuralın açıklamasına hangi kurallarla zincirlendiği hakkında bir not ekleyin.
İPUCU
Uygulamadan önce kural zincirinizi kağıt üzerinde veya beyaz tahtada çizin. Her eylemin üreten her olayı belirleyin ve istenmeyen zincirlerin olmadığını doğrulayın.
Yeniden giriş koruması
Otomasyondaki en tehlikeli kalıp sonsuz döngüdür: Kural A bir sorunu değiştirir, bu Kural B'yi tetikler, Kural B sorunu tekrar değiştirir, bu Kural A'yi tetikler ve sonsuza kadar devam eder.
SetGet döngüleri nasıl önler
SetGet, kural zincirlerinin derinligini sınırlandiran yerleşik bir yeniden giriş koruması içerir.
| Koruma | Davranış |
|---|---|
| Zincir derinlik sınırı | Tek bir kaynak olay, maksimum 5 kural derinliginde bir zinciri tetikleyebilir. Kural yürütme 5. derinliğe ulasirsa, sonraki tetiklenen kurallar bastırılır. |
| Aynı-kural bastırma | Bir kural, aynı zincir içinde kendi eylemlerinin ürettiği olaylar üzerinde tetiklenmez. |
| Bekleme süresi penceresi | Bir kural belirli bir iş öğesi üzerinde tetiklendikten sonra, yeni olaylardan bağımsız olarak 60 saniye içinde aynı iş öğesi üzerinde tekrar tetiklenmez. |
Koruma etkinleştiğinde
Yeniden giriş koruması bir kuralı bastırdığında Yürütme Geçmişi sayfasına bir uyarı kaydeder:
"Yükseltme İşleyicisi" kuralı bastırıldı: zincir derinlik sınırı (5) aşıldı.
Kaynak olay: PROJ-142 üzerinde state_changed.Döngüye karşı güvenli kurallar tasarlama
Yerleşik korumayla bile, sınıra ulaşmayı önlemek için şu uygulamaları izleyin:
Dairesel durum geçişlerinden kaçının. Kural A'nin bir sorunu X durumuna taşıdığı ve Kural B'nin X durumundayken önceki duruma geri taşıdığı kurallar oluşturmayın.
Döngüleri kırmak için koşullar kullanın. Kural A bir etiket ekliyorsa ve Kural B
label_changedüzerinde tetikleniyorsa, Kural B'ye etiketin bir otomasyon tarafından eklenip eklenmediğini kontrol eden bir koşul ekleyin (actoralanını kontrol edin).Kendi çıktıniz üzerinde tetiklenmeyin. Bir kural yorum ekliyorsa,
comment_addedüzerinde tetiklenen ve başka bir yorum ekleyen başka bir kural oluşturmayın.Test için
manualtetikleyiciyi kullanın. Bir kuralı otomatik bir tetikleyiciye bağlamadan önce, istenmeyen yan etkilere neden olmadığı doğrulamak için manuel tetikleyiciyle test edin.
UYARI
Yeniden giriş koruması bir güvenlik ağı, tasarım aracı değildir. Üretimde döngüleri yakalamak için ona güvenmeyin. Kurallarınızı yapısal olarak döngüsüz olacak şekilde tasarlayın.
Kural yürütme sırası
Tek bir olay birden fazla kuralla eşleştiğinde, yürütme sırası belirlidir.
Kuralları sıralama
| Faktor | Öncelik |
|---|---|
| Kural oluşturma sırası | Daha önce oluşturulan kurallar ilk yürütülür |
| Açık sıralama (yapılandırıldıysa) | Daha düşük sıra numarasi olan kurallar ilk yürütülür |
Bir kural içinde, eylemler listelendikleri sırada yürütülür.
Yürütme sırasını görüntüleme
- Projede Ayarlar > Otomasyonlar bölümüne gidin.
- Kurallar listesi kuralları yürütme sıralarinda gösterir.
- Yeniden sıralamak için kuralları sürükleyip bırakın (açık sıralama etkinse).
Sıranin neden önemli olduğu
İki kural aynı olayla eşleşir ve her ikisi de aynı alanı değiştirirse (örneğin, her ikisi de durumu değiştirir), en son yürütülen kural "kazanir" çünkü eylemi öncekinin üzerine yazar.
Sıra çatışmasi örneği:
| Sıra | Kural | Eylem |
|---|---|---|
| 1 | QA'ya Yönlendir | change_state ile "QA İnceleme" |
| 2 | Tamamlandiya Yönlendir | change_state ile "Tamamlandı" |
Her iki kural da eşleşirse, nihai durum "Tamamlandı" olur çünkü Kural 2, Kural 1'den sonra yürütülür.
İPUCU
İki kural aynı alan üzerinde çatışıyorsa, herhangi bir olay için yalnızca birinin eşleşeceği şekilde daha spesifik koşullar ekleyerek çatışmayi çözün.
Toplu yürütme
Bazi tetikleyiciler ve senaryolar, bir kuralın aynı anda birden fazla iş öğesiyle eşleşmesine neden olur.
Toplu yürütme ne zaman gerçekleşir
| Senaryo | Davranış |
|---|---|
| Zamanlanmış tetikleyiciler | Kural, projedeki tüm iş öğelerine karşı koşulları değerlendirir. Eylemler eşleşen her öğe üzerinde yürütülür. |
| Manuel tetikleyiciler | Zamanlanmisla aynı -- eşleşen tüm öğeler işlenir. |
| Toplu güncellemeler | Bir kullanıcı aynı anda 20 öğeyi güncellerse (örneğin, toplu durum değişikliği), her öğe kendi olayini üretir ve kurallar her biri için bağımsız olarak değerlendirilir. |
Toplu yürütme davranışı
- Eylemler eşleşen öğeler arasında sırayla yürütülür (öğe 1 eylemleri, ardından öğe 2 eylemleri vb.).
- Bir öğe için bir eylem başarısız olursa, işleme sonraki öğeyle devam eder.
- Yürütme geçmişi her öğe için sonuçları ayri ayri kaydeder.
- Öğeler arasında global bir işlem yoktur. Her öğenin eylemleri bağımsız olarak kesinleşir.
Performans etkisi
Büyük sonuç kümelerinde toplu yürütme zaman alabilir. 500 öğeyle eşleşen ve öğe başına üç eylem gerçekleştiren zamanlanmış bir kural için toplam yürütme 1.500 eylem çağrısını içerir.
| Eşleşen öğeler | Öğe başına eylem | Toplam eylem | Tahmini süre |
|---|---|---|---|
| 10 | 2 | 20 | < 5 saniye |
| 100 | 2 | 200 | < 30 saniye |
| 500 | 3 | 1.500 | 1-3 dakika |
| 1.000 | 3 | 3.000 | 3-6 dakika |
UYARI
Zamanlanmış bir kural çok fazla sayıda öğeyle eşleşiyorsa, kapsamı daraltmak için daha spesifik koşullar eklemeyi düşünün. Tek bir yürütmede binlerce öğeyi işlemek diğer zamanlanmış kuralları geçıktırebilir.
Çatışma çözümü
Birden fazla kural aynı olayla eşleşip aynı iş öğesini değiştirdiğinde çatışmalar ortaya çıkabilir.
Çatışma türleri
| Çatışma | Örnek | Çözüm |
|---|---|---|
| Aynı alan, farklı değerler | Kural A önceliği "Yüksek"e, Kural B önceliği "Acil"e ayarlar | Son yazan kazanir (yürütme sırasına göre) |
| Çelişkili eylemler | Kural A Kullanıcı X'i atar, Kural B Kullanıcı X'in atamasini kaldırır | Her iki eylem de sırayla yürütülür. Nihai durum sıraya bağlıdır. |
| Fazladan eylemler | Kural A "Bug" etiketi ekler, Kural B de "Bug" etiketi ekler | Çatışma yok. İkinci ekleme işlem yapmaz. |
| Tamamlayici eylemler | Kural A durumu değiştirir, Kural B etiket ekler | Çatışma yok. Her iki eylem de uygulanır. |
Çatışmaları çözme
Koşullara özgünlük ekleyin. Çatışan kuralların birbirini dışlayan koşullara sahip olmasını sağlayarak herhangi bir olay için yalnızca birinin eşleşmesini sağlayın.
Kuralları yeniden sıralayın. İki kural da eşleşmeli ise, sonucu "kazanması" gereken kuralı yürütme sırasında daha sonraya koyun.
Tek bir kuralda birleştirin. İki kural her zaman aynı olaylarla eşleşiyorsa, bunları birden fazla eyleme sahip tek bir kurala birleştirmeyi düşünün.
Etiketleri gecit olarak kullanın. Kural A'nin bir etiket eklemesini ve Kural B'nin koşulunun o etiketi kontrol etmesini sağlayin. Bu, hangi kuralların yürütülecegi üzerinde açık kontrol sağlar.
Performans ipuçları
Verimli otomasyon kuralları yürütme süresini ve sunucu yükünü azaltir.
Koşul optimizasyonu
| İpucu | Gerekçe |
|---|---|
| En spesifik tetikleyici tipini kullanin | state_changed, issue_updated'dan daha ucuzdur çünkü daha az olay eşleşir |
| Seçici koşulları ilk sıraya koyun | Kisa devre değerlendirmesi en seçici koşulda erken durur |
Koşulsuz issue_updated kullanmayın | Bu, her öğedeki her değişiklikle eşleşir, bu da çok pahalıdır |
| Tarih hesaplamalari yerine enum karşılaştırmalarini tercih edin | priority equals urgent, updated_at_age_days greater_than 30'dan daha hızlıdir |
Eylem optimizasyonu
| İpucu | Gerekçe |
|---|---|
| Webhook cagrilarini en aza indirin | Hariçi HTTP çağrıları geçıkme ekler ve başarısız olabilir |
| İlişkili değişiklikleri tek bir kuralda toplayın | Üç eylemli bir kural, birer eylemli üç kuraldan daha hızlıdir çünkü yeniden değerlendirmeyi önler |
| Fazladan bildirimlerden kaçının | Bir durum değişikliği zaten aboneleri bilgilendiriyorsa, aynı alıcılar için ayri bir send_notification eylemi eklemek tekrar bildirimler oluşturur |
Zamanlanmış kural optimizasyonu
| İpucu | Gerekçe |
|---|---|
| Dar koşullar kullanin | Daha az eşleşen öğe daha hızlı yürütme demektir |
| Yoğun olmayan saatlerde zamanlama yapin | Temizlik kurallarını sabah 10:00'da değil 02:00'de çalıştırın |
| Minimum gerekli sıklıkta kullanin | Temizlik için günlük genellikle yeterlidir; gerçekten gerekmedikçe her 15 dakikada zamanlamayın |
Başarısız kuralların hata ayıklaması
Bir kural beklenen sonucu üretmediginde, bu sistematik hata ayıklama sürecini izleyin.
Adım 1: Yürütme geçmişini kontrol edin
- Projede Ayarlar > Otomasyonlar bölümüne gidin.
- Çalışmayan kurala tıklayın.
- Yürütme Geçmişi sekmesini açın.
- Son yürütmeleri inceleyin.
Yürütme geçmişi sunlari gösterir:
| Alan | Açıklama |
|---|---|
| Zaman damgasi | Kuralın ne zaman tetiklendiği |
| Tetikleyici olayi | Kuralı tetikleyen olay |
| İş öğesi | Değerlendirilen öğe |
| Koşullar sonucu | Geçti veya başarısız, hangi koşulun başarısız olduğunun ayrıntılarıyla |
| Eylemler sonucu | Her eylem için başarı veya başarısızlık, hata mesajlariyla |
Adım 2: Koşulları doğrulayın
Yürütme geçmişi "Koşullar başarısız" gösteriyorsa, her koşulu kontrol edin:
- Eşleşmesi gereken iş öğesini açın.
- Mevcut alan değerlerini kuraldaki her koşulla karşılaştırın.
- Yaygın sorunlar:
- Alan değeri tetikleyici olay ile koşul değerlendirmesi arasında değişti.
- Koşul
equalskullaniyor ama değerde fazladan boşluk veya farklı büyük/küçük harf var. - Koşul yeniden adlandırılmış veya silinmiş bir etikete veya duruma referans veriyor.
- VE/VEYA mantıği istediğiniz gibi değil.
Adım 3: Tetikleyiciyi doğrulayın
Kural yürütme geçmişinde hiç görüntülenmiyorsa:
- Kuralın etkin olduğunu doğrulayın (durdurulmuş veya devre dışı değildir).
- Tetikleyici tipinin beklediğiniz olayla eşleştiğini doğrulayın. Örneğin, bir etiketi değiştirmek
state_changed'i tetiklemez. - Zamanlanmış tetikleyiciler için sonraki çalışma zamanını ve saat dilimini kontrol edin.
- Yeniden giriş korumasınin kuralı bastırıp bastırmadıgini kontrol edin (geçmişte bastırma uyarılarini arayın).
Adım 4: Manuel tetikleyiciyle test edin
- Kuralı düzenleyin ve tetikleyiciyi geçici olarak
manualolarak değiştirin. - Kuralda Çalıştır'a tıklayın.
- Sonuçlar için yürütme geçmişini kontrol edin.
- Manuel çalıştırma çalışıyorsa, sorun tetikleyici yapılandırmasındadır, koşullar veya eylemler değildir.
- Testten sonra orijinal tetikleyiciyi geri yükleyin.
Adım 5: Çatışmaları kontrol edin
Kural yürütülür ama beklenen sonuç kalıcı olmazsa:
- Bu kuraldan sonra çalışan ve değişikliği üzerine yazan başka bir kural olup olmadığını kontrol edin.
- Aynı olay üzerinde tetiklenen diğer kurallar için yürütme geçmişini inceleyin.
- Çatışmayi ortadan kaldırmak için kuralları yeniden sıralayın veya koşullar ekleyin.
Yaygın hata ayıklama senaryolari
| Belirti | Muhtemel neden | Çözüm |
|---|---|---|
| Kural hiç tetiklenmiyor | Yanlış tetikleyici tipi, kural devre dışı veya yeniden giriş koruması | Tetikleyici tipini ve kural durumunu doğrulayın |
| Kural tetikleniyor ama koşullar başarısız | Alan değerleri koşul beklentileriyle eşleşmiyor | Her koşulu gerçek öğe verileriyle inceleyin |
| Kural tetikleniyor, eylemler başarılı ama sonuç yanlış | Başka bir kural değişikliği üzerine yazıyor | Yürütme sırasını ve çatışan kuralları kontrol edin |
| Kural çok sık tetikleniyor | Geniş koşullarla issue_updated tetikleyicisi | Spesifik bir tetikleyiciye geçin veya daha dar koşullar ekleyin |
| Zamanlanmış kural tetiklenmiyor | Yanlış saat dilimi, cron sözdizimi hatası veya kural durdurulmuş | Saat dilimini ve cron ifadesini doğrulayın; sonraki çalışma zamanını kontrol edin |
| Webhook eylemi başarısız | Hedef URL'ye erişilemez, kimlik doğrulama hatası veya zaman aşımı | URL'yi, başlıkları ve sunucu kullanılabilirliğini kontrol edin |
İPUCU
Kural adıni ve zaman damgasini yazan bir add_comment eylemi ekleyerek bir kural için geçici olarak ayrıntıli kaydı etkinleştirin. Bu, inceleyebileceginiz, iş öğesinin aktivite günlüğünde görünür bir iz oluşturur.
İlgili sayfalar
- Otomasyon Kuralları -- Kuralları oluşturma ve yönetme
- Tetikleyiciler -- Tüm tetikleyici tipleri
- Koşullar -- Koşul mantıği oluşturma
- Eylemler -- Tüm eylem tipleri
- Zamanlama -- Zaman tabanlı kural yapılandırması
- Yürütme Geçmişi -- Geçmiş yürütmeleri inceleme
- Yerleşik Otomasyonlar -- Otomatik Arşivleme ve Otomatik Kapatma