2016-07-07 33 views

Odpowiedz

-3

Trzeba przechowywać url git wewnątrz zadania nadrzędnego i przekazać parametr do fazy dziecięcej

lub po prostu można sklonować projektu na zadania głównego i formy pracy tam.

Użyj https://wiki.jenkins-ci.org/display/JENKINS/Git+Plugin jego plugin git Jenkins

+2

To więcej dla zadań freestyle niż dla wielu gałęzi. – BitwiseMan

+0

Tak pracuję z jenkinami – CodeWizard

+1

Uzgodniono, że praca freestyle to, co opisujesz, jest poprawne. Ale pipeplina wielopanowa działa inaczej. Ponieważ pytanie dotyczy zadań z wieloma potokami, odpowiedź nie ma zastosowania. – BitwiseMan

11

Masz rację, obiekt scm ma potrzebne informacje.

Podczas korzystania z git jako formantu źródłowego w projekcie Pipeline (lub projekcie Multibranch Pipeline), zmienna globalna scm będzie instancją GitSCM. Oznacza to, że `scm.getUserRemoteConfigs() 'zwróci listę instancji UserRemoteConfig. Te instancje mają nazwę zdalnego kontrolera git, adres url i refspec. Możesz iterować po tej liście, aby znaleźć pasującego pilota, lub po prostu zabrać pierwszą, jeśli na pewno masz tylko jeden adres URL.

def scmUrl = scm.getUserRemoteConfigs()[0].getUrl() 

UWAGI

  • RejectedAccessException - The getUserRemoteConfigs i getUrl metody będą zarówno rzucać org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException aż ręcznie je zatwierdza, w ramach "Zarządzanie Jenkins -> W procesie Approval Script". Jedynym sposobem, jaki udało mi się to zrobić, jest uruchomienie skryptu, wysłanie wyjątku dostępu, zatwierdzenie jedynej metody, która spowodowała wyjątek, i powtarzanie dla każdej metody, dopóki nie zostaną zgłoszone żadne wyjątki dostępu. Na szczęście ustawienie jest dla całego serwera, więc musisz to zrobić tylko raz na kontroler Jenkins, a nie dla każdego zadania z potokiem.

  • GitHub - Podczas testowania z GitHub, mając na uwadze wielobranżowy rurociągu getUserRemoteConfigs powrócił dwie instancje UserRemoteConfig, jeden dla regularnych oddziałów, a drugi do wniosków ciągnąć. Miały ten sam URL, więc nic wielkiego, ale coś, o czym trzeba pamiętać. Na przykład w projekcie za pomocą połączenia HTTPS opartej:

    echo scm.getUserRemoteConfigs() 
    
    "[ 
        +refs/heads/*:refs/remotes/origin/* => https://github.com/bitwiseman/project.git (origin), 
        +refs/pull/*/head:refs/remotes/origin/pr/* => https://github.com/bitwiseman/project.git (origin) 
    ]" 
    
+0

Dzięki, właśnie tego szukałem. –

+3

Twoja odpowiedź również uświadomiła mi, że adres URL będzie dostępny, parsując plik '' '.git/config'''. Ma to zaletę uniknięcia problemu RejectedAccessException, ale powoduje większą złożoność skryptu budowania. –

+0

skąd jenkins otrzymuje adres URL https? 'git remote -v' wyświetla zgodnie z oczekiwaniami adres URL SSH. Jestem raczej rozczarowany tym, jak trywialne rzeczy, takie jak aktualizacja modułowa, wymagają olbrzymich obejść. Wieloprzekrojowy potok nie jest w ogóle gotowy do pracy w prime-time ... – andsens

8

Zainspirowany komentarz w odpowiedzi przez @BitwiseMan, Znalazłem (hacky) sposób, aby uzyskać adres URL bez RejectedAccessException:

checkout scm 
def url = sh(returnStdout: true, script: 'git config remote.origin.url').trim() 

Należy pamiętać, że należy to zrobić po checkout scm. Zasadniczo, musisz być w repozytorium git sprawdzonym (tj. Ma w nim plik .git/config)

+0

To działa. W moim przypadku używam tego, aby uniknąć konfiguracji adresu URL w pom.xml projektu maven. Powiedziałbym, że automatyczne odkrywanie adresu URL w ten sposób jest znacznie mniej hackowate niż konieczność utrzymywania adresu URL w projekcie maven (co może dać mylące błędy, jeśli jest błędne). – drrob