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

Azure Repos | Azure DevOps Server 2020 | Azure DevOps Server 2019 | TFS 2018

Çekme istekleri, kod incelemelerini kolaylaştırma ve depo içinde kod taşımayı yönetme için harika bir araçtır. Dal ilkeleri, her kod değişikliği için uygulanması gereken gereksinimleri kurarak çekme isteği işlemi sırasında kod kalitesini zorlar. Bu ilkeler takımların kodu gözden geçirme ve otomatik derlemeleri çalıştırmayla ilgili birçok en iyi yöntemi zorlamasını sağlar, ancak birçok ekibin kod üzerinde gerçekleştirmesi gereken ek gereksinimler ve doğrulamalar vardır. Bu bireysel ve özel ihtiyaçları karşılamak için Azure Repos istekleri durumları sunar. Çekme isteği durumları çekme isteği iş akışıyla tümleştirildi ve basit başarı/hata türü bilgilerini bir çekme isteğiyle birlikte kullanarak dış hizmetlerin program aracılığıyla bir kod değişikliğinde oturum kapatmasına olanak sağlar. İsteğe bağlı olarak, dış hizmet değişikliği onaylayana kadar çekme istekleri engellenmiş olabilir.

Not

Bu makalede belgelenmiş olan özellik için TFS 2018 Güncelleştirme 2 veya sonraki bir sürümü gerekir.

PR 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 : Uzantılar kullanarak durum menüsünü genişletmenin Azure DevOps Services sağlar.

Bu konu başlığında çekme isteği durumları ve çekme isteği iş akışıyla tümleşmek için bunların nasıl kullanılası hakkında bilgi edinmek için kullanıla kullanılmaktadır.

Çekme isteği durumu

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

  • Durumu. Önceden tanımlanmış şu eyaletlerden biri: succeeded , , , , veya failedpendingnotSetnotApplicableerror .
  • Açıklama. Son kullanıcıya durumu açıklayan bir dize.
  • Bağlam. Durum için bir ad - genellikle durumu yayına alan varlığın açıklamasıdır.
  • URL. Kullanıcıların durumla ilgili daha fazla bilgi edinen bir bağlantı.

Temelde durum, kullanıcı veya hizmetin çekme isteğiyle ilgili değerlendirmesini gönderip aşağıdaki gibi soruların yanıtını verme yolu olur:

  • Değişiklikler gereksinimleri karşılar mı?
  • Gereksinimleri karşılamak için nelere ihtiyacım olduğu hakkında nereden daha fazla bilgi edinebilirsiniz?

Bir örneğe göz atalım. Bir projede tüm kod değişikliklerini derlemek için gereken bir CI hizmetini göz önünde bulundurabilirsiniz. Bu hizmet çekme isteğinde yapılan değişiklikleri değerlendirerek derleme ve test sonuçlarını geri almak zorunda. Derlemeyi geçen değişiklikler için, pr'de bunun gibi bir durum yayın olabilir:

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

Bu durum, PR Ayrıntıları görünümünde son kullanıcıya görüntülenir:

Çekme isteği durumu

  • statesimgesi kullanılarak kullanıcıya gösterilir (yeşil onay succeeded işareti, için kırmızı failed X, için saat ve kırmızı pending ! için error ).
  • descriptionsimgesi yanında görüntülenir ve bir context araç ipucunda kullanılabilir.
  • targetUrluygulandığında, açıklama URL'nin bağlantısı olarak işlenir.

Durumu güncelleştirme

Bir hizmet, yalnızca her benzersiz için gösterilen en son durumlarını göndererek tek bir PR için bir PR durumunu context güncelleştirmektedir. Birden çok durum gönderme, kullanıcıların beklentileri yönetmeye yardımcı olur. Örneğin, durum gönderme, kullanıcıya sistemin bir olay aldığı ve çalışmaya başlayanı kabul etmek pending için iyi bir yol olabilir. Aşağıdaki örnekler gibi description bilgilendirici bir bilgi kullanmak, kullanıcının sistemin nasıl çalıştığını anlayacaktır:

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

Yineleme durumu

Bir PR'nin kaynak dalı değişirse, en son değişiklikleri izlemek için yeni bir "yineleme" oluşturulur. Kod değişikliklerini değerlendiren hizmetler, bir PR'nin her yinelemesinde yeni durum gönderisi yapmak ister. Bir PR'nin belirli bir yinelemesinde durum gönderme, durumun yalnızca değerlendirilen kod için geçerli olduğunu ve gelecekteki güncelleştirmelerden hiçbirinin geçerli olamayacağı garantisini sağlar.

Buna karşılık, gönderilen durum kodun tamamına uygulanırsa, koddan bağımsız olarak yinelemeye gönderme gereksiz olabilir. Örneğin, yazarın (sabit bir PR özelliği) belirli bir gruba ait olduğunu denetlemenin yalnızca bir kez değerlendirilmesi gerekir ve yineleme durumu gerekli olmaz.

Durum ilkesi yapılandırken, yineleme durumu kullanılıyorsa, yeni değişiklikler olduğunda Sıfırlama koşulları Durumu olarak ayarlanacaktır. Bu, en son yineleme durumuna sahip olana kadar PR'nin birleştirilemayacaklarını succeeded garantiler.

Durum ilkesi sıfırlama koşulları

Bir REST API ve çekme isteğinde gönderme durumu içinaşağıdaki örneklere bakın.

Durum ilkesi

Yalnızca durum kullanılarak, bir dış hizmetten ayrıntılar PR deneyimi içindeki kullanıcılara sağlanmalıdır. Bazen, tek gereken bir PR hakkında bilgi paylaşmaktır, ancak diğer durumlarda gereksinimler karşı bulana kadar PR'lerin birleştirilmesi engellenmiş olur. İlkeler gibi Durum ilkesi de gereksinimler karşılandıktan sonra dış hizmetlerin PR tamamlanmasını engellemesi için bir yol sağlar. İlke gerekli ise, çekme isteğini tamamlamak için ilkenin başarılı olması gerekir. İlke isteğe bağlı ise yalnızca bilgilendirmedir 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 ilkesi adı ve türü girilir. Durum daha önce gönderildiyse listeden seçebilirsiniz; Yeni bir ilke ise, ilkenin adını tür adı biçiminde yazabilirsiniz.

Durum ilkesi

Bir durum ilkesi belirtildikten sonra, bu ilkenin başarılı olması için seçilen adla eşleşen succeededcontext bir durumunun var olması gerekir.

Ayrıca, belirli bir hesabın ilkeyi onaylayan durumu yayın yetkisine sahip olması için yetkili bir hesap da seçilebilir.

İlke uygulanabilirliği

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

İlke uygulanabilirliği

  1. Varsayılan olarak uygula - İlke, çekme isteği oluşturulur oluşturulmaz uygulanır. Bu seçenekle, bir durum gönderilene kadar ilke çekme isteği oluşturmanın succeeded ardından geçmez. Bir PR, ilke gereksinimini kaldıracak bir durum göndererek notApplicable ilkeden muaf olarak işaretlenir.

  2. Koşullu - İlk durum çekme isteğine gönderilene kadar ilke geçerli değildir.

Bu seçenekler birlikte bir dinamik ilke paketi oluşturmak için kullanılabilir. Pr geçerli ilkeler için değerlendirilirken, üst düzey bir "düzenleme" ilkesi varsayılan olarak uygulanacak şekilde ayarlanmış olabilir. Daha sonra, ek koşullu ilkelerin (belki de belirli derleme çıkışına göre) uygulanacak şekilde belirlendi olarak, bunları gerekli hale getirdiniz durumu da yayınlanmıştır. Değerlendirme tamamlandığında bu düzenleme ilkesi işaretlendi veya ilkenin geçerli olmadığını succeedednotApplicable PR'ye belirtmek için işaretlendi.

Özel eylemler

Pr durumunu güncelleştirmek için hizmeti tetikleyilebilecek ö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ılacak bir test çalıştırmasına karşılık gelse, testleri çalıştırmak için tetikleyen durum menüsüne Bir Yeniden Başlat menü öğesinin olması mümkündür. Durum menüsü eklemek için katkı modelini kullanabilirsiniz. Github'daki Katkılar kılavuzu örneğine göz atın. Burada durum menüsüne aşağıdaki örnek öğeleri ekleyen kod bölümlerini bulabilirsiniz.

Durum menüsü

Sonraki Adımlar

PR Durumu API'si hakkında daha fazla bilgi edinin ve aşağıdaki nasıl kılavuzlarına göz atabilirsiniz: