2015-08-06 8 views
7

Tak, skonfigurowałem zadanie Jnkins, które sprawdza główną gałąź od 3 transakcji. Teraz chcę uzyskać najnowsze zmiany dla wszystkich trzech transakcji.Nie można uzyskać zatwierdzenia git dla wielu transakcji przy użyciu wtyczki wielokrotnej SCM w Jenkins

Obecnie zmienna env GIT_COMMIT daje tylko zatwierdzenie dla ostatniego repo dodanego w konfiguracji, a nie dla wszystkich trzech.

Czy istnieje sposób na uzyskanie poprzedniego zatwierdzenia i bieżącego zatwierdzenia git dla wszystkich trzech repozytoriów?

Odpowiedz

2

wpadłem na ten sam problem i postanowił widelec Multiple wtyczki SCM, aby go naprawić: https://github.com/JakeStoeffler/multiple-scms-plugin

Jeśli chcesz, po prostu sklonować mojego repo i prowadzonym mvn zbudować plik HPI (znajdujący się w target/multiple-scms.hpi) , które można przesłać ręcznie i zainstalować w Jenkins. Jeśli wolisz zrobić to szczypanie siebie, klon the original repo bezpośrednio otworzyć MultiSCM.java i zastąpić kod w metodzie buildEnvVars() z czymś, co następuje:

@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) {} 
    } 
} 

Mam nadzieję, że komentarze są dość oczywiste tam. Zasadniczo błąd w oryginalnym kodzie jest taki, że gdy masz wiele SCM z tymi samymi nazwami zmiennych środowiskowych, zmienne zostają nadpisane podczas ich iteracji. Pracujemy nad tym, zapobiegając tym zastąpieniom i zamiast tego dodajemy indeks do nazwy zmiennej.

Oto przykład, w jaki sposób z niego korzystać: jeśli nasz projekt ma 3 Git SCM skonfigurowany, możemy teraz dostęp do najnowszych popełnić hash każdego repo Git indywidualnie za pomocą env vars GIT_COMMIT, GIT_COMMIT_1 i GIT_COMMIT_2. Dołączone indeksy odpowiadają porządkowi SCM w konfiguracji projektu w Jenkins.

Oczywiście jest to szybkie i brudne rozwiązanie, ale działa na to, co muszę zrobić. Możesz go dostosować do swoich potrzeb.

+0

Dzięki, że popatrzę. – Jason

+0

Dlaczego ta prośba nie została skierowana do Jenkinsa? – Will

+0

@Will Zostało scalone - patrz [PR] (https://github.com/jenkinsci/multiple-scms-plugin/pull/12). –