Skip to content

Gelismis Otomasyon Kaliplari

Otomasyon kutuphaneniz buyudukce, kurallar birbirleriyle karmasik sekillerde etkilesir. Bu sayfa, guvenilir coklu kural is akislari olusturma, sonsuz donguleri onleme, catismalari ele alma, performansi optimize etme ve basarisizliklari teshis etme konularindaki gelismis kaliplari kapsar.

Coklu kural zincirleme

Kural zincirleme, bir kuralin eyleminin baska bir kurali tetikleyen bir olay urettiginde meydana gelir. Bu, cok adimli is akislari olusturmak icin guclu bir kaliptir.

Zincirleme nasil calisir

  1. Kural A, issue_created uzerinde tetiklenir ve durumu "Triyaj"a degistirir.
  2. Durum degisikligi bir state_changed olayi uretir.
  3. Kural B, yeni durumun "Triyaj" oldugu state_changed uzerinde tetiklenir ve triyaj sorumlusunu atar.
  4. Atanan degisikligi bir assignee_changed olayi uretir.
  5. Kural C, assignee_changed uzerinde tetiklenir ve atanana bildirim gonderir.

Her kural bagimsiz ve yeniden kullanilabilirdir. Kural B, durum degisikliginin Kural A'dan, bir insandan veya API'den gelmesi farketmeksizin calisir.

Zincir ornegi: hata triyaj is akisi

AdimKuralTetikleyiciKosulEylem
1Yeni Hata Yonlendiricisiissue_createdEtiket "Bug" iceriyorchange_state ile "Triyaj"
2Triyaj Atayicisistate_changedYeni durum "Triyaj"Triyaj sorumlusunu assign et
3Atama Bildiricisiassignee_changedAtanan eklendiYeni atanana send_notification
4Triyaj Zaman Asimischeduled (gunluk)Durum "Triyaj" VE updated_at_age_days > 3change_priority ile "Yuksek", add_comment "Triyaj suresi asti"

Zincirler icin tasarim ilkeleri

  • Her kurali tek bir sorumluluga odaklayin. Cok fazla is yapan bir kuralin hatasini ayiklamak ve yeniden kullanmak daha zordur.
  • Kurallari zincirdeki rollerini belirtecek sekilde adlandirin. Ornegin: "Adim 1: Yeni hatalari yonlendir" veya "Hata Triyaji -- Sorumlu Ata".
  • Zinciri belgeleyin. Her kuralin aciklamasina hangi kurallarla zincirlendigi hakkinda bir not ekleyin.

TIP

Uygulamadan once kural zincirinizi kagit uzerinde veya beyaz tahtada cizin. Her eylemin ureten her olayi belirleyin ve istenmeyen zincirlerin olmadigini dogrulayin.

Yeniden giris korumasi

Otomasyondaki en tehlikeli kalip sonsuz dongudur: Kural A bir sorunu degistirir, bu Kural B'yi tetikler, Kural B sorunu tekrar degistirir, bu Kural A'yi tetikler ve sonsuza kadar devam eder.

SetGet donguleri nasil onler

SetGet, kural zincirlerinin derinligini sinirlandiran yerlesik bir yeniden giris korumasi icerir.

KorumaDavranis
Zincir derinlik siniriTek bir kaynak olay, maksimum 5 kural derinliginde bir zinciri tetikleyebilir. Kural yurutme 5. derinlige ulasirsa, sonraki tetiklenen kurallar bastirilir.
Ayni-kural bastirmaBir kural, ayni zincir icinde kendi eylemlerinin urundugu olaylar uzerinde tetiklenmez.
Bekleme suresi penceresiBir kural belirli bir is ogesi uzerinde tetiklendikten sonra, yeni olaylardan bagimsiz olarak 60 saniye icinde ayni is ogesi uzerinde tekrar tetiklenmez.

Koruma etkinlestiginde

Yeniden giris korumasi bir kurali bastirdiginda Yurutme Gecmisi sayfasina bir uyari kaydeder:

"Yukseltme Isleyicisi" kurali bastirildi: zincir derinlik siniri (5) asildi.
Kaynak olay: PROJ-142 uzerinde state_changed.

Donguye karsi guvenli kurallar tasarlama

Yerlesik korumayla bile, sinira ulasmayi onlemek icin su uygulamalari izleyin:

  1. Dairesel durum gecislerinden kacinin. Kural A'nin bir sorunu X durumuna tasidigi ve Kural B'nin X durumundayken onceki duruma geri tasidigi kurallar olusturmayin.

  2. Donguleri kirmak icin kosullar kullanin. Kural A bir etiket ekliyorsa ve Kural B label_changed uzerinde tetikleniyorsa, Kural B'ye etiketin bir otomasyon tarafindan eklenip eklenmedigini kontrol eden bir kosul ekleyin (actor alanini kontrol edin).

  3. Kendi ciktiniz uzerinde tetiklenmeyin. Bir kural yorum ekliyorsa, comment_added uzerinde tetiklenen ve baska bir yorum ekleyen baska bir kural olusturmayin.

  4. Test icin manual tetikleyiciyi kullanin. Bir kurali otomatik bir tetikleyiciye baglamadan once, istenmeyen yan etkilere neden olmadigi dogrulamak icin manuel tetikleyiciyle test edin.

WARNING

Yeniden giris korumasi bir guvenlik agi, tasarim araci degildir. Uretimde donguleri yakalamak icin ona guvenmeyin. Kurallarinizi yapisal olarak dongusuz olacak sekilde tasarlayin.

Kural yurutme sirasi

Tek bir olay birden fazla kuralla eslestiginde, yurutme sirasi belirlidir.

Kurallari siralama

FaktorOncelik
Kural olusturma sirasiDaha once olusturulan kurallar ilk yurutulur
Acik siralama (yapilandirildiysa)Daha dusuk sira numarasi olan kurallar ilk yurutulur

Bir kural icinde, eylemler listelendikleri sirada yurutulur.

Yurutme sirasini goruntuleme

  1. Projede Ayarlar > Otomasyonlar bolumine gidin.
  2. Kurallar listesi kurallari yurutme siralarinda gosterir.
  3. Yeniden siralamak icin kurallari surukleyip birakin (acik siralama etkinse).

Siranin neden onemli oldugu

Iki kural ayni olayla eslesir ve her ikisi de ayni alani degistirirse (ornegin, her ikisi de durumu degistirir), en son yurutulen kural "kazanir" cunku eylemi oncekinin uzerine yazar.

Sira catismasi ornegi:

SiraKuralEylem
1QA'ya Yonlendirchange_state ile "QA Inceleme"
2Tamamlandiya Yonlendirchange_state ile "Tamamlandi"

Her iki kural da eslesirse, nihai durum "Tamamlandi" olur cunku Kural 2, Kural 1'den sonra yurutulur.

TIP

Iki kural ayni alan uzerinde catisiyorsa, herhangi bir olay icin yalnizca birinin eslesecegi sekilde daha spesifik kosullar ekleyerek catismayi cozun.

Toplu yurutme

Bazi tetikleyiciler ve senaryolar, bir kuralin ayni anda birden fazla is ogesiyle eslesmesine neden olur.

Toplu yurutme ne zaman gerceklesir

SenaryoDavranis
Zamanlanmis tetikleyicilerKural, projedeki tum is ogelerine karsi kosullari degerlendirir. Eylemler eslesen her oge uzerinde yurutulur.
Manuel tetikleyicilerZamanlanmisla ayni -- eslesen tum ogeler islenir.
Toplu guncellemelerBir kullanici ayni anda 20 ogeyi guncellerse (ornegin, toplu durum degisikligi), her oge kendi olayini uretir ve kurallar her biri icin bagimsiz olarak degerlendirilir.

Toplu yurutme davranisi

  • Eylemler eslesen ogeler arasinda sirayla yurutulur (oge 1 eylemleri, ardindan oge 2 eylemleri vb.).
  • Bir oge icin bir eylem basarisiz olursa, isleme sonraki ogeyle devam eder.
  • Yurutme gecmisi her oge icin sonuclari ayri ayri kaydeder.
  • Ogeler arasinda global bir islem yoktur. Her ogenin eylemleri bagimsiz olarak kesinlesir.

Performans etkisi

Buyuk sonuc kumelerinde toplu yurutme zaman alabilir. 500 ogeyle eslesen ve oge basina uc eylem gerceklestiren zamanlanmis bir kural icin toplam yurutme 1.500 eylem cagrisini icerir.

Eslesen ogelerOge basina eylemToplam eylemTahmini sure
10220< 5 saniye
1002200< 30 saniye
50031.5001-3 dakika
1.00033.0003-6 dakika

WARNING

Zamanlanmis bir kural cok fazla sayida ogeyle eslesiyorsa, kapsami daraltmak icin daha spesifik kosullar eklemeyi dusunun. Tek bir yurutmede binlerce ogeyi islemek diger zamanlanmis kurallari geciktirebilir.

Catisma cozumu

Birden fazla kural ayni olayla eslesip ayni is ogesini degistirdiginde catismalar ortaya cikabilir.

Catisma turleri

CatismaOrnekCozum
Ayni alan, farkli degerlerKural A onceligi "Yuksek"e, Kural B onceligi "Acil"e ayarlarSon yazan kazanir (yurutme sirasina gore)
Celiskili eylemlerKural A Kullanici X'i atar, Kural B Kullanici X'in atamasini kaldirirHer iki eylem de sirayla yurutulur. Nihai durum siraya baglidir.
Fazladan eylemlerKural A "Bug" etiketi ekler, Kural B de "Bug" etiketi eklerCatisma yok. Ikinci ekleme islem yapmaz.
Tamamlayici eylemlerKural A durumu degistirir, Kural B etiket eklerCatisma yok. Her iki eylem de uygulanir.

Catismalari cozme

  1. Kosullara ozgunluk ekleyin. Catisan kurallarin birbirini dislayan kosullara sahip olmasini saglayarak herhangi bir olay icin yalnizca birinin eslesmesini saglayin.

  2. Kurallari yeniden siralayin. Iki kural da eslesmeli ise, sonucu "kazanmasi" gereken kurali yurutme sirasinda daha sonraya koyun.

  3. Tek bir kuralda birlestirin. Iki kural her zaman ayni olaylarla eslesiyorsa, bunlari birden fazla eyleme sahip tek bir kurala birlestirmeyi dusunun.

  4. Etiketleri gecit olarak kullanin. Kural A'nin bir etiket eklemesini ve Kural B'nin kosulunun o etiketi kontrol etmesini saglayin. Bu, hangi kurallarin yurutulecegi uzerinde acik kontrol saglar.

Performans ipuclari

Verimli otomasyon kurallari yurutme suresini ve sunucu yukunu azaltir.

Kosul optimizasyonu

IpucuGerekce
En spesifik tetikleyici tipini kullaninstate_changed, issue_updated'dan daha ucuzdur cunku daha az olay eslesir
Secici kosullari ilk siraya koyunKisa devre degerlendirmesi en secici kosulda erken durur
Kosulsuz issue_updated kullanmayinBu, her ogedeki her degisiklikle eslesir, bu da cok pahalidir
Tarih hesaplamalari yerine enum karsilastirmalarini tercih edinpriority equals urgent, updated_at_age_days greater_than 30'dan daha hizlidir

Eylem optimizasyonu

IpucuGerekce
Webhook cagrilarini en aza indirinHarici HTTP cagrilari gecikme ekler ve basarisiz olabilir
Iliskili degisiklikleri tek bir kuralda toplayinUc eylemli bir kural, birer eylemli uc kuraldan daha hizlidir cunku yeniden degerlendirmeyi onler
Fazladan bildirimlerden kacininBir durum degisikligi zaten aboneleri bilgilendiriyorsa, ayni alicilar icin ayri bir send_notification eylemi eklemek tekrar bildirimler olusturur

Zamanlanmis kural optimizasyonu

IpucuGerekce
Dar kosullar kullaninDaha az eslesen oge daha hizli yurutme demektir
Yogun olmayan saatlerde zamanlama yapinTemizlik kurallarini sabah 10:00'da degil 02:00'de calistirin
Minimum gerekli siklikta kullaninTemizlik icin gunluk genellikle yeterlidir; gercekten gerekmedikce her 15 dakikada zamanlamayin

Basarisiz kurallarin hata ayiklamasi

Bir kural beklenen sonucu uretmediginde, bu sistematik hata ayiklama surecini izleyin.

Adim 1: Yurutme gecmisini kontrol edin

  1. Projede Ayarlar > Otomasyonlar bolumine gidin.
  2. Calismayan kurala tiklayin.
  3. Yurutme Gecmisi sekmesini acin.
  4. Son yurutmeleri inceleyin.

Yurutme gecmisi sunlari gosterir:

AlanAciklama
Zaman damgasiKuralin ne zaman tetiklendigi
Tetikleyici olayiKurali tetikleyen olay
Is ogesiDegerlendirilen oge
Kosullar sonucuGecti veya basarisiz, hangi kosulun basarisiz oldugunun ayrintilariyla
Eylemler sonucuHer eylem icin basari veya basarisizlik, hata mesajlariyla

Adim 2: Kosullari dogrulayin

Yurutme gecmisi "Kosullar basarisiz" gosteriyorsa, her kosulu kontrol edin:

  1. Eslesmesi gereken is ogesini acin.
  2. Mevcut alan degerlerini kuraldaki her kosulla karsilastirin.
  3. Yaygin sorunlar:
    • Alan degeri tetikleyici olay ile kosul degerlendirmesi arasinda degisti.
    • Kosul equals kullaniyor ama degerde fazladan bosluk veya farkli buyuk/kucuk harf var.
    • Kosul yeniden adlandirilmis veya silinmis bir etikete veya duruma referans veriyor.
    • VE/VEYA mantigi istediginiz gibi degil.

Adim 3: Tetikleyiciyi dogrulayin

Kural yurutme gecmisinde hic goruntulenmiyorsa:

  1. Kuralin etkin oldugunu dogrulayin (durdurulmus veya devre disi degildir).
  2. Tetikleyici tipinin beklediginiz olayla eslestigini dogrulayin. Ornegin, bir etiketi degistirmek state_changed'i tetiklemez.
  3. Zamanlanmis tetikleyiciler icin sonraki calisma zamanini ve saat dilimini kontrol edin.
  4. Yeniden giris korumasinin kurali bastirip bastirmadigini kontrol edin (gecmiste bastirma uyarilarini arayin).

Adim 4: Manuel tetikleyiciyle test edin

  1. Kurali duzenleyin ve tetikleyiciyi gecici olarak manual olarak degistirin.
  2. Kuralda Calistir'a tiklayin.
  3. Sonuclar icin yurutme gecmisini kontrol edin.
  4. Manuel calistirma calisiyorsa, sorun tetikleyici yapilandirmasindadir, kosullar veya eylemler degildir.
  5. Testten sonra orijinal tetikleyiciyi geri yukleyin.

Adim 5: Catismalari kontrol edin

Kural yurutulur ama beklenen sonuc kalici olmazsa:

  1. Bu kuraldan sonra calisan ve degisikligi uzerine yazan baska bir kural olup olmadigini kontrol edin.
  2. Ayni olay uzerinde tetiklenen diger kurallar icin yurutme gecmisini inceleyin.
  3. Catismayi ortadan kaldirmak icin kurallari yeniden siralayin veya kosullar ekleyin.

Yaygin hata ayiklama senaryolari

BelirtiMuhtemel nedenCozum
Kural hic tetiklenmiyorYanlis tetikleyici tipi, kural devre disi veya yeniden giris korumasiTetikleyici tipini ve kural durumunu dogrulayin
Kural tetikleniyor ama kosullar basarisizAlan degerleri kosul beklentileriyle eslesmiyorHer kosulu gercek oge verileriyle inceleyin
Kural tetikleniyor, eylemler basarili ama sonuc yanlisBaska bir kural degisikligi uzerine yaziyorYurutme sirasini ve catisan kurallari kontrol edin
Kural cok sik tetikleniyorGenis kosullarla issue_updated tetikleyicisiSpesifik bir tetikleyiciye gecin veya daha dar kosullar ekleyin
Zamanlanmis kural tetiklenmiyorYanlis saat dilimi, cron sozdizimi hatasi veya kural durdurulmusSaat dilimini ve cron ifadesini dogrulayin; sonraki calisma zamanini kontrol edin
Webhook eylemi basarisizHedef URL'ye erisilemez, kimlik dogrulama hatasi veya zaman asimiURL'yi, basliklari ve sunucu kullanilabilirligini kontrol edin

TIP

Kural adini ve zaman damgasini yazan bir add_comment eylemi ekleyerek bir kural icin gecici olarak ayrintili kaydi etkinlestirin. Bu, inceleyebileceginiz, is ogesinin aktivite gunlugunde gorunur bir iz olusturur.

Ilgili sayfalar