Çekme isteği durumuyla çekme isteği iş akışlarını özelleştirme ve genişletme

Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019

Çekme istekleri, kod incelemelerini kolaylaştırmak ve bir depo içinde kod hareketini yönetmek için harika bir araçtır. Dal ilkeleri , her kod değişikliği için gerçekleştirilmesi gereken gereksinimleri oluşturarak çekme isteği işlemi sırasında kod kalitesini zorlar. Bu ilkeler ekiplerin kodu gözden geçirme ve otomatik derlemeleri çalıştırmayla ilgili birçok en iyi uygulamayı zorunlu kılabilmesini sağlar, ancak birçok ekibin kod üzerinde gerçekleştirmek için ek gereksinimleri ve doğrulamaları vardır. Azure Repos, bu bireysel ve özel gereksinimleri karşılamak için çekme isteği durumları sunar. Çekme isteği durumları çekme isteği iş akışıyla tümleştirilir ve basit başarı/hata türü bilgilerini çekme isteğiyle ilişkilendirerek dış hizmetlerin bir kod değişikliğinde program aracılığıyla oturumunu kapatmasına olanak tanır. İsteğe bağlı olarak, dış hizmet değişikliği onaylayana kadar çekme istekleri engellenebilir.

Çekme isteği iş akışıyla tümleştirme birkaç farklı kavram içerir:

  • Çekme isteği durumu - Hizmetlerin başarı/başarısızlık bilgilerini bir çekme isteğiyle ilişkilendirmesi için bir yol sağlar.
  • Durum ilkesi - Çekme isteği durumu başarılı olana kadar çekme isteğinin tamamlanmasını engellemek için bir mekanizma sağlar.
  • Özel eylemler : Azure DevOps Services uzantılarını kullanarak durum menüsünü genişletmenin bir yolunu sağlar.

Bu konu başlığında çekme isteği durumları ve çekme isteği iş akışıyla tümleştirmek için bunların nasıl kullanılabileceğini öğreneceksiniz.

Çekme isteği durumu

Çekme isteği durumu, hizmetlerin Durum API'sini kullanarak basit başarı/başarısızlık türü bilgilerini çekme isteğiyle ilişkilendirmesi için bir yol sağlar. Durum dört önemli veri parçasından oluşur:

  • Durum. Önceden tanımlanmış aşağıdaki durumlardan biri: succeeded, failed, pending, notSet, , notApplicableveya error.
  • Açıklama. Son kullanıcıya durumu açıklayan bir dize.
  • Bağlam. Durum için bir ad- genellikle durumu gönderen varlığı açıklar.
  • URL. Kullanıcıların duruma özgü daha fazla bilgi edinebileceği bir bağlantı.

Temelde durum, bir kullanıcının veya hizmetin çekme isteğiyle ilgili değerlendirmelerini gönderme ve aşağıdaki gibi soruların yanıtını sağlama şeklidir:

  • Değişiklikler gereksinimleri karşıladı mı?
  • Gereksinimleri karşılamak için ne yapmam gerektiği hakkında nereden daha fazla bilgi edinebilirim?

Bir örneğe göz atalım. Bir projedeki tüm kod değişikliklerini oluşturmak için gereken bir CI hizmetini göz önünde bulundurun. Bu hizmet bir çekme isteğindeki değişiklikleri değerlendirdiğinde derleme ve test sonuçlarını geri göndermesi gerekir. Derlemeden geçen değişiklikler için pr'ye aşağıdaki gibi bir durum gönderilebilir:

{
    "state": "succeeded",
    "description": "CI build succeeded",
    "context": {
        "name": "my-ci-system",
        "genre": "continuous-integration"
    },
    "targetUrl": "http://contoso.com/CI/builds/1"
}

Bu durum, çekme isteği ayrıntıları görünümünde son kullanıcıya görüntülenir:

Çekme isteği durumu

  • state simgesi kullanılarak kullanıcıya gösterilir (için yeşil onay işareti, için failedsucceededkırmızı X, için pendingbir saat ve için kırmızı ! ).error
  • description simgesi yanında görüntülenir ve context araç ipucunda bulunur.
  • targetUrl uygulandığında, açıklama URL'ye bağlantı olarak işlenir.

Durum güncelleştiriliyor

Bir hizmet, her benzersiz contextiçin yalnızca en son durumlarını gösteren ek durumlar göndererek tek bir çekme isteği için çekme isteği durumunu güncelleştirebilir. Birden çok durum göndermek, kullanıcıların beklentileri yönetmelerine yardımcı olur. Örneğin, durum pending göndermek, kullanıcıya sistemin bir olay aldığını ve çalışmaya başladığını kabul etmenin iyi bir yoludur. Aşağıdaki örnekler gibi bilgilendirici description bir örnek kullanmak, kullanıcının sistemin nasıl çalıştığını anlamasına daha fazla yardımcı olabilir:

  • "Derleme kuyruğa alındı"
  • "Derleme devam ediyor"
  • "Derleme başarılı oldu"

Yineleme durumu

Çekme isteğindeki kaynak dal değiştiğinde, en son değişiklikleri izlemek için yeni bir "yineleme" oluşturulur. Kod değişikliklerini değerlendiren hizmetler, çekme isteğinin her yinelemesine yeni durum göndermek isteyecektir. Çekme isteğinin belirli bir yinelemesine durum gönderme, durumun yalnızca değerlendirilen kod için geçerli olduğunu ve gelecekteki güncelleştirmelerin hiçbirinin geçerli olmadığını garanti eder.

Not

Oluşturulan çekme isteği 100.000'den fazla değiştirilmiş dosya içeriyorsa, performans ve kararlılık nedeniyle bu çekme isteği yinelemeleri desteklemez. Başka bir deyişle, bu tür çekme isteğinde yapılan ek değişiklikler dahil edilecek ancak bu değişiklik için yeni yineleme oluşturulmayacak. Ayrıca, mevcut olmayan bir yineleme için durum oluşturma girişimleri bir hata döndürür.

Buna karşılık, gönderilen durum koddan bağımsız olarak çekme isteğinin tamamı için geçerliyse yinelemeye göndermek gereksiz olabilir. Örneğin, yazarın (sabit bir PR özelliği) belirli bir gruba ait olup olmadığını denetlemenin yalnızca bir kez değerlendirilmesi gerekir ve yineleme durumu gerekli olmaz.

Durum ilkesi yapılandırılırken, yineleme durumu kullanılıyorsa, yeni değişiklikler olduğunda Sıfırlama koşulları Durumu sıfırla olarak ayarlanmalıdır. Bu, en son yinelemenin durumu succeededolana kadar çekme isteğinin birleştirilemeyeceğini de garanti eder.

Durum ilkesi sıfırlama koşulları

Bir yinelemede ve çekme isteğinde durum göndermeye yönelik REST API örneklerine bakın.

Durum ilkesi

Yalnızca durumu kullanarak, bir dış hizmetten gelen ayrıntılar çekme isteği deneyimindeki kullanıcılara sağlanabilir. Bazen, çekme isteğiyle ilgili bilgilerin paylaşılması gereken tek şey olsa da, diğer durumlarda gereksinimler karşılanıncaya kadar PR'lerin birleştirilmesi engellenmelidir. Yerleşik ilkeler gibi Durum ilkesi de dış hizmetlerin gereksinimler karşılanıncaya kadar çekme isteği tamamlanmasını engellemesi için bir yol sağlar. İlke gerekiyorsa, çekme isteğini tamamlamak için geçmesi gerekir. İlke isteğe bağlıysa, yalnızca bilgilendirme amaçlıdır ve çekme isteğini tamamlamak için durumu succeeded gerekli değildir.

Durum ilkeleri, diğer dal ilkeleri gibi yapılandırılır. Yeni bir durum ilkesi eklerken, durum ilkesinin adı ve türü girilmelidir. Durum daha önce deftere nakledilmişse listeden seçebilirsiniz; Bu yeni bir ilkeyse, ilkenin adını biçim türü/adına yazabilirsiniz.

Durum ilkesi

Durum ilkesi belirtildiğinde, bu ilkenin succeeded geçirilebilmesi için seçili adla context eşleşen bir durumunun mevcut olmasını gerektirir.

Yetkili bir hesap, belirli bir hesabın ilkeyi onaylayacak durumu gönderme yetkisine sahip olmasını gerektirecek şekilde de seçilebilir.

İlke uygulanabilirliği

İlke uygulanabilirliği seçenekleri, bu ilkenin çekme isteği oluşturulduğunda geçerli olup olmadığını veya ilkenin yalnızca çekme isteğine ilk durum gönderildikten sonra uygulanıp uygulanmayacağını belirler.

İlke uygulanabilirliği

  1. Varsayılan olarak uygula - İlke, çekme isteği oluşturulur oluşturulmaz uygulanır. Bu seçenekle, durum gönderilene kadar succeeded çekme isteği oluşturulduktan sonra ilke geçirilmez. Çekme isteği, durumunun notApplicabledeftere nakledilmesiyle ilkeden muaf olarak işaretlenebilir ve bu da ilke gereksinimini kaldırır.

  2. Koşullu : İlk durum çekme isteğine gönderilene kadar ilke uygulanmaz.

Bu seçenekler birlikte bir dinamik ilke paketi oluşturmak için kullanılabilir. Pr geçerli ilkeler için değerlendirilirken varsayılan olarak uygulanacak en üst düzey bir "düzenleme" ilkesi ayarlanabilir. Daha sonra, ek koşullu ilkelerin uygulanacağı belirlendikçe (belki de belirli bir derleme çıkışına göre), gerekli hale getirmek için durum gönderilebilir. Bu düzenleme ilkesi değerlendirme tamamlandığında işaretlenebilir succeeded veya ilkenin uygulanmadığını pr'ye gösterecek şekilde işaretlenebilir notApplicable .

Özel eylemler

Çekme isteği durumunu güncelleştirmek için hizmeti tetikleyebilen önceden tanımlanmış hizmet kancası olaylarına ek olarak, son kullanıcıya tetikleyici eylemleri vermek için Azure DevOps Services uzantılarını kullanarak durum menüsünü genişletmek mümkündür. Örneğin, durum son kullanıcı tarafından yeniden başlatılabilir bir test çalıştırmasına karşılık geliyorsa, testlerin çalıştırılmasını tetikleyebilecek durum menüsünde yeniden başlat menü öğesinin olması mümkündür. Durum menüsü eklemek için katkı modelini kullanmanız gerekir. Daha fazla bilgi için bkz . Azure DevOps uzantısı örneği.

Durum menüsü

Sonraki adımlar

Çekme İsteği Durumu API'si hakkında daha fazla bilgi edinin ve nasıl yapılır kılavuzlarına göz atın: