Skip to content

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

  1. Kural A, issue_created üzerinde tetiklenir ve durumu "Triyaj"a değiştirir.
  2. Durum değişikliği bir state_changed olayı üretir.
  3. Kural B, yeni durumun "Triyaj" olduğu state_changed üzerinde tetiklenir ve triyaj sorumlusunu atar.
  4. Atanan değişikliği bir assignee_changed olayı üretir.
  5. 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ımKuralTetikleyiciKoşulEylem
1Yeni Hata Yönlendiricisiissue_createdEtiket "Bug" içeriyorchange_state ile "Triyaj"
2Triyaj Atayıcısıstate_changedYeni durum "Triyaj"Triyaj sorumlusunu assign et
3Atama Bildiricisiassignee_changedAtanan eklendiYeni atanana send_notification
4Triyaj Zaman Asimischeduled (günlük)Durum "Triyaj" VE updated_at_age_days > 3change_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.

KorumaDavranış
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ırmaBir kural, aynı zincir içinde kendi eylemlerinin ürettiği olaylar üzerinde tetiklenmez.
Bekleme süresi penceresiBir 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:

  1. 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.

  2. 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 (actor alanını kontrol edin).

  3. 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.

  4. Test için manual tetikleyiciyi 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

  1. Projede Ayarlar > Otomasyonlar bölümüne gidin.
  2. Kurallar listesi kuralları yürütme sıralarinda gösterir.
  3. 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ıraKuralEylem
1QA'ya Yönlendirchange_state ile "QA İnceleme"
2Tamamlandiya Yönlendirchange_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

SenaryoDavranış
Zamanlanmış tetikleyicilerKural, projedeki tüm iş öğelerine karşı koşulları değerlendirir. Eylemler eşleşen her öğe üzerinde yürütülür.
Manuel tetikleyicilerZamanlanmisla aynı -- eşleşen tüm öğeler işlenir.
Toplu güncellemelerBir 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 eylemToplam eylemTahmini süre
10220< 5 saniye
1002200< 30 saniye
50031.5001-3 dakika
1.00033.0003-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ğerlerKural A önceliği "Yüksek"e, Kural B önceliği "Acil"e ayarlarSon yazan kazanir (yürütme sırasına göre)
Çelişkili eylemlerKural A Kullanıcı X'i atar, Kural B Kullanıcı X'in atamasini kaldırırHer iki eylem de sırayla yürütülür. Nihai durum sıraya bağlıdır.
Fazladan eylemlerKural A "Bug" etiketi ekler, Kural B de "Bug" etiketi eklerÇatışma yok. İkinci ekleme işlem yapmaz.
Tamamlayici eylemlerKural A durumu değiştirir, Kural B etiket eklerÇatışma yok. Her iki eylem de uygulanır.

Çatışmaları çözme

  1. 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.

  2. 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.

  3. 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.

  4. 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

İpucuGerekçe
En spesifik tetikleyici tipini kullaninstate_changed, issue_updated'dan daha ucuzdur çünkü daha az olay eşleşir
Seçici koşulları ilk sıraya koyunKisa devre değerlendirmesi en seçici koşulda erken durur
Koşulsuz issue_updated kullanmayınBu, her öğedeki her değişiklikle eşleşir, bu da çok pahalıdır
Tarih hesaplamalari yerine enum karşılaştırmalarini tercih edinpriority equals urgent, updated_at_age_days greater_than 30'dan daha hızlıdir

Eylem optimizasyonu

İpucuGerekçe
Webhook cagrilarini en aza indirinHariç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ınBir 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

İpucuGerekçe
Dar koşullar kullaninDaha az eşleşen öğe daha hızlı yürütme demektir
Yoğun olmayan saatlerde zamanlama yapinTemizlik kurallarını sabah 10:00'da değil 02:00'de çalıştırın
Minimum gerekli sıklıkta kullaninTemizlik 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

  1. Projede Ayarlar > Otomasyonlar bölümüne gidin.
  2. Çalışmayan kurala tıklayın.
  3. Yürütme Geçmişi sekmesini açın.
  4. Son yürütmeleri inceleyin.

Yürütme geçmişi sunlari gösterir:

AlanAçıklama
Zaman damgasiKuralın ne zaman tetiklendiği
Tetikleyici olayiKuralı tetikleyen olay
İş öğesiDeğerlendirilen öğe
Koşullar sonucuGeçti veya başarısız, hangi koşulun başarısız olduğunun ayrıntılarıyla
Eylemler sonucuHer 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:

  1. Eşleşmesi gereken iş öğesini açın.
  2. Mevcut alan değerlerini kuraldaki her koşulla karşılaştırın.
  3. Yaygın sorunlar:
    • Alan değeri tetikleyici olay ile koşul değerlendirmesi arasında değişti.
    • Koşul equals kullaniyor 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:

  1. Kuralın etkin olduğunu doğrulayın (durdurulmuş veya devre dışı değildir).
  2. Tetikleyici tipinin beklediğiniz olayla eşleştiğini doğrulayın. Örneğin, bir etiketi değiştirmek state_changed'i tetiklemez.
  3. Zamanlanmış tetikleyiciler için sonraki çalışma zamanını ve saat dilimini kontrol edin.
  4. 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

  1. Kuralı düzenleyin ve tetikleyiciyi geçici olarak manual olarak değiştirin.
  2. Kuralda Çalıştır'a tıklayın.
  3. Sonuçlar için yürütme geçmişini kontrol edin.
  4. Manuel çalıştırma çalışıyorsa, sorun tetikleyici yapılandırmasındadır, koşullar veya eylemler değildir.
  5. 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:

  1. Bu kuraldan sonra çalışan ve değişikliği üzerine yazan başka bir kural olup olmadığını kontrol edin.
  2. Aynı olay üzerinde tetiklenen diğer kurallar için yürütme geçmişini inceleyin.
  3. Çatışmayi ortadan kaldırmak için kuralları yeniden sıralayın veya koşullar ekleyin.

Yaygın hata ayıklama senaryolari

BelirtiMuhtemel nedenÇözüm
Kural hiç tetiklenmiyorYanlış 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ızAlan değerleri koşul beklentileriyle eşleşmiyorHer 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ıyorYürütme sırasını ve çatışan kuralları kontrol edin
Kural çok sık tetikleniyorGeniş koşullarla issue_updated tetikleyicisiSpesifik bir tetikleyiciye geçin veya daha dar koşullar ekleyin
Zamanlanmış kural tetiklenmiyorYanlış 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ızHedef 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