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
- Kural A,
issue_createduzerinde tetiklenir ve durumu "Triyaj"a degistirir. - Durum degisikligi bir
state_changedolayi uretir. - Kural B, yeni durumun "Triyaj" oldugu
state_changeduzerinde tetiklenir ve triyaj sorumlusunu atar. - Atanan degisikligi bir
assignee_changedolayi uretir. - Kural C,
assignee_changeduzerinde 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
| Adim | Kural | Tetikleyici | Kosul | Eylem |
|---|---|---|---|---|
| 1 | Yeni Hata Yonlendiricisi | issue_created | Etiket "Bug" iceriyor | change_state ile "Triyaj" |
| 2 | Triyaj Atayicisi | 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 (gunluk) | Durum "Triyaj" VE updated_at_age_days > 3 | change_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.
| Koruma | Davranis |
|---|---|
| Zincir derinlik siniri | Tek bir kaynak olay, maksimum 5 kural derinliginde bir zinciri tetikleyebilir. Kural yurutme 5. derinlige ulasirsa, sonraki tetiklenen kurallar bastirilir. |
| Ayni-kural bastirma | Bir kural, ayni zincir icinde kendi eylemlerinin urundugu olaylar uzerinde tetiklenmez. |
| Bekleme suresi penceresi | Bir 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:
Dairesel durum gecislerinden kacinin. Kural A'nin bir sorunu X durumuna tasidigi ve Kural B'nin X durumundayken onceki duruma geri tasidigi kurallar olusturmayin.
Donguleri kirmak icin kosullar kullanin. Kural A bir etiket ekliyorsa ve Kural B
label_changeduzerinde tetikleniyorsa, Kural B'ye etiketin bir otomasyon tarafindan eklenip eklenmedigini kontrol eden bir kosul ekleyin (actoralanini kontrol edin).Kendi ciktiniz uzerinde tetiklenmeyin. Bir kural yorum ekliyorsa,
comment_addeduzerinde tetiklenen ve baska bir yorum ekleyen baska bir kural olusturmayin.Test icin
manualtetikleyiciyi 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
| Faktor | Oncelik |
|---|---|
| Kural olusturma sirasi | Daha 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
- Projede Ayarlar > Otomasyonlar bolumine gidin.
- Kurallar listesi kurallari yurutme siralarinda gosterir.
- 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:
| Sira | Kural | Eylem |
|---|---|---|
| 1 | QA'ya Yonlendir | change_state ile "QA Inceleme" |
| 2 | Tamamlandiya Yonlendir | change_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
| Senaryo | Davranis |
|---|---|
| Zamanlanmis tetikleyiciler | Kural, projedeki tum is ogelerine karsi kosullari degerlendirir. Eylemler eslesen her oge uzerinde yurutulur. |
| Manuel tetikleyiciler | Zamanlanmisla ayni -- eslesen tum ogeler islenir. |
| Toplu guncellemeler | Bir 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 ogeler | Oge basina eylem | Toplam eylem | Tahmini sure |
|---|---|---|---|
| 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 |
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
| Catisma | Ornek | Cozum |
|---|---|---|
| Ayni alan, farkli degerler | Kural A onceligi "Yuksek"e, Kural B onceligi "Acil"e ayarlar | Son yazan kazanir (yurutme sirasina gore) |
| Celiskili eylemler | Kural A Kullanici X'i atar, Kural B Kullanici X'in atamasini kaldirir | Her iki eylem de sirayla yurutulur. Nihai durum siraya baglidir. |
| Fazladan eylemler | Kural A "Bug" etiketi ekler, Kural B de "Bug" etiketi ekler | Catisma yok. Ikinci ekleme islem yapmaz. |
| Tamamlayici eylemler | Kural A durumu degistirir, Kural B etiket ekler | Catisma yok. Her iki eylem de uygulanir. |
Catismalari cozme
Kosullara ozgunluk ekleyin. Catisan kurallarin birbirini dislayan kosullara sahip olmasini saglayarak herhangi bir olay icin yalnizca birinin eslesmesini saglayin.
Kurallari yeniden siralayin. Iki kural da eslesmeli ise, sonucu "kazanmasi" gereken kurali yurutme sirasinda daha sonraya koyun.
Tek bir kuralda birlestirin. Iki kural her zaman ayni olaylarla eslesiyorsa, bunlari birden fazla eyleme sahip tek bir kurala birlestirmeyi dusunun.
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
| Ipucu | Gerekce |
|---|---|
| En spesifik tetikleyici tipini kullanin | state_changed, issue_updated'dan daha ucuzdur cunku daha az olay eslesir |
| Secici kosullari ilk siraya koyun | Kisa devre degerlendirmesi en secici kosulda erken durur |
Kosulsuz issue_updated kullanmayin | Bu, her ogedeki her degisiklikle eslesir, bu da cok pahalidir |
| Tarih hesaplamalari yerine enum karsilastirmalarini tercih edin | priority equals urgent, updated_at_age_days greater_than 30'dan daha hizlidir |
Eylem optimizasyonu
| Ipucu | Gerekce |
|---|---|
| Webhook cagrilarini en aza indirin | Harici HTTP cagrilari gecikme ekler ve basarisiz olabilir |
| Iliskili degisiklikleri tek bir kuralda toplayin | Uc eylemli bir kural, birer eylemli uc kuraldan daha hizlidir cunku yeniden degerlendirmeyi onler |
| Fazladan bildirimlerden kacinin | Bir durum degisikligi zaten aboneleri bilgilendiriyorsa, ayni alicilar icin ayri bir send_notification eylemi eklemek tekrar bildirimler olusturur |
Zamanlanmis kural optimizasyonu
| Ipucu | Gerekce |
|---|---|
| Dar kosullar kullanin | Daha az eslesen oge daha hizli yurutme demektir |
| Yogun olmayan saatlerde zamanlama yapin | Temizlik kurallarini sabah 10:00'da degil 02:00'de calistirin |
| Minimum gerekli siklikta kullanin | Temizlik 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
- Projede Ayarlar > Otomasyonlar bolumine gidin.
- Calismayan kurala tiklayin.
- Yurutme Gecmisi sekmesini acin.
- Son yurutmeleri inceleyin.
Yurutme gecmisi sunlari gosterir:
| Alan | Aciklama |
|---|---|
| Zaman damgasi | Kuralin ne zaman tetiklendigi |
| Tetikleyici olayi | Kurali tetikleyen olay |
| Is ogesi | Degerlendirilen oge |
| Kosullar sonucu | Gecti veya basarisiz, hangi kosulun basarisiz oldugunun ayrintilariyla |
| Eylemler sonucu | Her eylem icin basari veya basarisizlik, hata mesajlariyla |
Adim 2: Kosullari dogrulayin
Yurutme gecmisi "Kosullar basarisiz" gosteriyorsa, her kosulu kontrol edin:
- Eslesmesi gereken is ogesini acin.
- Mevcut alan degerlerini kuraldaki her kosulla karsilastirin.
- Yaygin sorunlar:
- Alan degeri tetikleyici olay ile kosul degerlendirmesi arasinda degisti.
- Kosul
equalskullaniyor 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:
- Kuralin etkin oldugunu dogrulayin (durdurulmus veya devre disi degildir).
- Tetikleyici tipinin beklediginiz olayla eslestigini dogrulayin. Ornegin, bir etiketi degistirmek
state_changed'i tetiklemez. - Zamanlanmis tetikleyiciler icin sonraki calisma zamanini ve saat dilimini kontrol edin.
- Yeniden giris korumasinin kurali bastirip bastirmadigini kontrol edin (gecmiste bastirma uyarilarini arayin).
Adim 4: Manuel tetikleyiciyle test edin
- Kurali duzenleyin ve tetikleyiciyi gecici olarak
manualolarak degistirin. - Kuralda Calistir'a tiklayin.
- Sonuclar icin yurutme gecmisini kontrol edin.
- Manuel calistirma calisiyorsa, sorun tetikleyici yapilandirmasindadir, kosullar veya eylemler degildir.
- Testten sonra orijinal tetikleyiciyi geri yukleyin.
Adim 5: Catismalari kontrol edin
Kural yurutulur ama beklenen sonuc kalici olmazsa:
- Bu kuraldan sonra calisan ve degisikligi uzerine yazan baska bir kural olup olmadigini kontrol edin.
- Ayni olay uzerinde tetiklenen diger kurallar icin yurutme gecmisini inceleyin.
- Catismayi ortadan kaldirmak icin kurallari yeniden siralayin veya kosullar ekleyin.
Yaygin hata ayiklama senaryolari
| Belirti | Muhtemel neden | Cozum |
|---|---|---|
| Kural hic tetiklenmiyor | Yanlis tetikleyici tipi, kural devre disi veya yeniden giris korumasi | Tetikleyici tipini ve kural durumunu dogrulayin |
| Kural tetikleniyor ama kosullar basarisiz | Alan degerleri kosul beklentileriyle eslesmiyor | Her kosulu gercek oge verileriyle inceleyin |
| Kural tetikleniyor, eylemler basarili ama sonuc yanlis | Baska bir kural degisikligi uzerine yaziyor | Yurutme sirasini ve catisan kurallari kontrol edin |
| Kural cok sik tetikleniyor | Genis kosullarla issue_updated tetikleyicisi | Spesifik bir tetikleyiciye gecin veya daha dar kosullar ekleyin |
| Zamanlanmis kural tetiklenmiyor | Yanlis saat dilimi, cron sozdizimi hatasi veya kural durdurulmus | Saat dilimini ve cron ifadesini dogrulayin; sonraki calisma zamanini kontrol edin |
| Webhook eylemi basarisiz | Hedef URL'ye erisilemez, kimlik dogrulama hatasi veya zaman asimi | URL'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
- Otomasyon Kurallari -- Kurallari olusturma ve yonetme
- Tetikleyiciler -- Tum tetikleyici tipleri
- Kosullar -- Kosul mantigi olusturma
- Eylemler -- Tum eylem tipleri
- Zamanlama -- Zaman tabanli kural yapilandirmasi
- Yurutme Gecmisi -- Gecmis yurutmeleri inceleme
- Yerlesik Otomasyonlar -- Otomatik Arsivleme ve Otomatik Kapatma