2012-06-19 22 views
6

Araçlar:
Jenkins ver. 1,470
Maven 2
SubversionJenkins Kısmi Yapılandırma/Modüler Yapılandırma Kancasında Oluşturma

benim yapı projelerinde çok sayıda A-D sahiptir varsayalım

Çevre. Bağımlılık grafiği gösterildiği gibi var. Yani: B, A'daki sınıflara bağlıdır, B, B'deki sınıflara bağlıdır. D, A'daki sınıflara bağlıdır. Jenkins, inşaa edildikleri yapıya, kendilerine bağımlı bir yapı olarak adlandırdıkları şekilde derlerler.

A
| -> B -> C
| -> D

Her gece Jenkins (A, inşa tetikler tam yapı tetiklemek B (C) D tetikler tetikler). Bu, A'ya her gece ve dinlenme kaskadlarının yapılmasını söyleyerek kolaylıkla yapılabilir.

Sorun bir kez taahhüt edilmiş projeler inşa etmek isteyen taahhüt üzerine Ancak

.

  • Durum 1: Biz depo anket (veya commit hooks kullanın hiç fark etmez) ve bir B taahhüt olduğunu bulmak, sonra da B inşa edecek ve C inşa edecek. Başarı!

  • Durum 2: Biz depo yoklamak ve bu B bulmak ve C tek işlemek içinde olmaya kararlı olduklarını, daha sonra Jenkins (ikinci yapı C B (C yapı tetikleme) oluşturmak ve inşa etmeye çalışacağız). Arızası. Bakın neler oluyor? C, iki kez inşa edildi ve değerli bir inşa süresine kavuştu. Binayı hızlı tut!

herkes sadece her taahhüt inşa boru hattında en yüksek proje tetiklemek için bir yol biliyor mu? bir taahhüt B C ve D taahhütlü:

Ben

  • Durum 3 ... tek çözüm her boru hattında en yüksek projeyi belirleyen karmaşık bir SVN kanca olurdu herhalde. SVN kancası, C'nin B'ye bağlı olduğunu bulur. Kanca, B ve D için başlatılacak projeye özgü bağlantıları çağırır.

Tuzaklar: Çok karmaşık SVN bağlantı kancası. Boru hattını SVN kancasında tutmalısınız.

Bunun başkalarının içine girdiği bir sorun olduğunu hissediyorum. Bu konuda yardımcı olan bir Jenkins eklentisi var mı?

+0

Durum 2'de, jenkins C & B projeleri aynı svn projesine mi bakıyor? – thekbb

cevap

1

Yapılması gereken bir yapıya sahip oluncaya kadar jenkins'un yapı ile birlikte beklemesini söylemek bir fikir olur. Bunu yapmak için iş yapılandırmasında bir bayrak var. Ama her iş için bunu yapmak zorundasın. Btw ...Ayrıca, bir bağımlı iş bitirilinceye kadar jenkins'un yapım ile birlikte beklemesini gerektiren başka bir bayrak da vardır.

0

Ayrıca bu soruna etkili bir çözüm arıyorum. Birkaç öneri gördüm, ancak şimdiye kadar sadece yapıları Locks & Mandallar eklentisini kullanarak serileştirerek tuzaklardan birini önlemeyi başardık. Bir projenin tek bir kontrolden birden çok kez inşa edilmesini engellemez, ancak proje, proje akışı tamamlandıktan sonra sırayla yeniden yapılmasını sağlayacaktır.

Genelde çözmek karmaşık bir sorundur ama bununla ilgilenmek için bir eklenti yazmayı düşünüyorum. Basit bir çözüm, bir üst akım projesinin şu anda kurulu olup olmadığını kontrol etmektir ve eğer varsa, kendinizi oluşturma kuyruğundan çıkarın. Hazır iş, tamamlandığında yapınızı başlatacağından, bu bir seçenektir.

Daha iyi bir seçenek, bağımlılık grafiğinize dayanarak yapı kuyruğunu otomatik olarak yöneten bir eklentidir. Bu karmaşık olabilir, çünkü tüm bağımlılıkları tamamlanana kadar hiçbir yapının başlatılmamasını sağlamalısınız. Esasen bu, her bir kontrolün eklentinin, yönetilen tüm yapıları otomatik olarak kuyruğa ekleyebilmesini sağlaması ve böylece bunları yönetebilmesi anlamına gelir. Bu, mevcut yukarı/aşağı akım tetikleyicileri ile bunun gerçekleşmesini sağlamak için daha akıllı ve daha kolay bir yol olabilir, ancak bunun nasıl gerçekleşeceği henüz net değil. Halihazırda bu durumun üstesinden geldiği iddia edilen inşaat boru hattı eklentileri var, ancak aşağı yönde bir yapı, bir giriş inşası olarak aynı kontrol tarafından tetiklenebilecek yarış koşullarını engellemek için hiçbir şey yapmıyorlar.