2015-08-06 33 views
7

'da Birden Çok SCM Eklentisi'ni kullanarak birden fazla veri için git taahhütleri alınamıyor Bu nedenle, ana dalı 3 depodan denetleyen bir jenkins işi yapılandırdım. Şimdi tüm üç repos için en son değişiklikleri almak istiyorum.Jenkins

Şu anda, GIT_COMMIT env değişkeni, yalnızca üçü için değil, yapılandırmada eklenen son repo için taahhüt vermiştir.

Bir önceki işlemi ve geçerli tüm gitme işlemlerini üç depo için almanın bir yolu var mı?

cevap

2

Aynı sorunu koştum ve bunu düzeltmek için Çoklu SCMS eklentisi çatal karar: (target/multiple-scms.hpi bulunan) HPI dosyası oluşturmak için mvn İsterseniz https://github.com/JakeStoeffler/multiple-scms-plugin

, sadece benim repo klonlamak ve çalıştırmak manuel olarak yükleyebilir ve Jenkins'e yükleyebilirsiniz. Yerine kendi verdiği yapardım lütfen doğrudan klon the original repo, MultiSCM.java açsın, aşağıdaki gibi bir şeyle buildEnvVars() yönteminde kodunu değiştirmek:

@Override 
public void buildEnvVars(AbstractBuild<?,?> build, Map<String, String> env) { 
    // Add each SCM's env vars, appending indices where needed to avoid collisions 
    for (int i = 0; i < scms.size(); i++) { 
     try { 
      EnvVars currScmVars = new EnvVars(); 
      scms.get(i).buildEnvVars(build, currScmVars); 
      for (Entry<String, String> entry : currScmVars.entrySet()) { 
       if (env.containsKey(entry.getKey())) { 
        // We have a collision; append the index of this SCM to the env var name 
        env.put(entry.getKey() + "_" + i, entry.getValue()); 
       } else { 
        // No collision; just put the var as usual 
        env.put(entry.getKey(), entry.getValue()); 
       } 
      } 
     } 
     catch(NullPointerException npe) {} 
    } 
} 

Umarım yorumlar yeterince açıklayıcı vardır. Temel olarak, orijinal koddaki hata, aynı ortam değişken adlarına sahip birden çok SCM'ye sahip olduğunuzda, değişkenlerin yinelenmekte oldukları şekilde üzerine yazılmasıdır. Bu yazımların önüne geçerek ve bunun yerine değişken adına bir dizin ekleyerek bu şekilde çalışırız.

İşte nasıl kullanılacağına ilişkin bir örnek: projemizin 3 Git SCMS yapılandırılmış varsa, şimdi tek tek env kullanarak her Git repo taahhüt son karmasını erişmek GIT_COMMIT, GIT_COMMIT_1 ve GIT_COMMIT_2 vars olabilir. Eklenen indeksler, Jenkins'deki proje yapılandırmasında SCM'lerin sırasına karşılık gelir.

Açıkçası bu hızlı ve kirli bir çözümdür, ancak yapmam gerekeni yerine getirir. İhtiyaçlarınıza uyacak şekilde özelleştirmekten çekinmeyin.

+0

Teşekkürler Bir göz atacağım. – Jason

+0

Neden bu neden yukarı akış yukarı Jenkins için bir istek yapılmadı? – Will

+0

@Will Birleştirilmiş - bkz. [PR] (https://github.com/jenkinsci/multiple-scms-plugin/pull/12). –