2016-06-08 40 views
6

Od pewnego czasu używamy Jenkinsa do ciągłej integracji. Typowe zadanie kompilacji określa repozytorium SVN i dane uwierzytelniające w sekcji "Zarządzanie kodowaniem źródłowym", a następnie w sekcji "Tworzenie wyzwalaczy" włączamy "Odpytywanie SCM" z harmonogramem odpytywania co 10 minut (H/10 * * * *). Zaktualizowaliśmy do najnowszej wersji Jenkinsa i zamierzamy skonfigurować kompilacje potokowe. Typowy scenariusz wygląda rurociągu:Jak skonfigurować potok Jenkinsa do uruchomienia przez sondowanie SubVersion?

node { 
    stage 'Build' 
    build job: 'MyApplication Build' 
    stage 'Deploy to test environment' 
    build job: 'MyApplication Deploy', parameters: [ 
     [$class: 'StringParameterValue', name: 'DatabaseServer', value: 'DatabaseServer1'], 
     [$class: 'StringParameterValue', name: 'WebServer', value: 'WebServer1'] 
    ] 
    stage 'RunIntegrationTests' 
    build job: 'MyApplication Test', parameters: [ 
     [$class: 'StringParameterValue', name: 'DatabaseServer', value: 'DatabaseServer1'], 
     [$class: 'StringParameterValue', name: 'WebServer', value: 'WebServer1'] 
    ] 
} 

Gdy praca rurociąg jest wyzwalany ręcznie wtedy wszystko działa poprawnie, jednak chcielibyśmy ten rurociąg być uruchamiany za każdym razem, gdy nowa wersja jest sprawdzany w celu repozytorium SVN. Konfiguracja potoku ma opcję wyzwalacza budowania "poll SCM", ale nie ma sekcji "Zarządzanie kodami źródłowymi", w której możesz określić swoje repozytorium. Jak możemy to osiągnąć?

Odpowiedz

2

Rozwiązanie, które znalazłem do pracy jest:

  1. Przenieś skrypt rurociągu do pliku (domyślnie jest to JenkinsFile) i zapisać to w katalogu głównym mojego projektu w Subversion.
  2. Ustaw moje źródło definicji zadania dla pipeline na "Skrypt rurociągu z SCM", wprowadź szczegóły, gdzie można znaleźć mój projekt w SubVersion, jak w normalnym zadaniu kompilacji Jenkinsa, i ustaw ścieżkę skryptu tak, aby wskazywała plik JenkinsFile zawierający skrypt potoku .
  3. Ustaw wyzwalacz budowania zadania rurociągu na "Odpytywanie SCM" i wprowadź harmonogram.
  4. ręcznie uruchomić zadanie rurociągu

wydawało się to być krok 4, ręcznie uruchamiając pracę rurociągu, który spowodował spust poll odebrać prawidłowy repozytorium do odpytywania. Wcześniej nie wiedział, gdzie szukać.

+0

Czy masz linię groovy używane do ustawienia właściwości wyzwalacza budowania w kroku 3? wyobrażam sobie, że byłoby zagnieżdżone w metodzie 'properties();' – tarabyte

+0

Myślę, że to będzie działać tylko wtedy, gdy nastąpi zmiana w samym Jenkinsfile ... – Philippe

3

myślę, że trzeba etap Zamówienie przed przed Budowa etapu, który składa się z informacji SCM. Pozwala to na zadanie do Ankieta SCM w wymaganym odstępie czasu i uruchomienie potoku.

Można nawet użyć skryptu potoku, bez konieczności przechowywania kodów potoku jako pliku JenkinsFile w SCM.

Poniżej jest moje SVN Zamówienie etap kod rurociąg przed moim Budowanie etap:

stage('Checkout') { 
    checkout([$class: 'SubversionSCM', 
     additionalCredentials: [], 
     excludedCommitMessages: '', 
     excludedRegions: '', 
     excludedRevprop: '', 
     excludedUsers: 'buildbot', 
     filterChangelog: false, 
     ignoreDirPropChanges: false, 
     includedRegions: '', 
     locations: [[credentialsId: 'b86bc2b6-994b-4811-ac98-0f35e9a9b114', 
      depthOption: 'infinity', 
      ignoreExternalsOption: true, 
      local: '.', 
      remote: "http://svn/something/trunk/"]], 
     workspaceUpdater: [$class: 'UpdateUpdater']]) 
} 

dla swojej pracy rurociągu chociaż. Mam nadzieję że to pomoże.

+0

W swoim fragmencie kodu, jak uzyskać poświadczenieId? – DavidA

+0

Przejdź do '$ (Jenkins_URL)/credentials /' i wybierz identyfikator z listy skonfigurowanych poświadczeń. – zionyx

2

Korzystanie Jenkins Declarative Pipeline skrypt, można skonfigurować zadanie do sondowania URL repozytorium SVN co 10 minut, co następuje:

pipeline { 
    agent any 
    triggers { 
     pollSCM 'H/10 * * * *' 
    } 
    stages { 
     stage('checkout') { 
      steps { 
       checkout([$class: 'SubversionSCM', additionalCredentials: [], excludedCommitMessages: '', excludedRegions: '', excludedRevprop: '', excludedUsers: '', filterChangelog: false, ignoreDirPropChanges: false, includedRegions: '', locations: [[credentialsId: 'mySvnCredentials', depthOption: 'infinity', ignoreExternalsOption: true, local: '.', remote: 'http://example.com/svn/url/trunk']], workspaceUpdater: [$class: 'CheckoutUpdater']]) 
      } 
     } 
    } 
} 

pollSCM spustowy powinien automatycznie odpytywać wszystkie SCM repozytorium za adresy związane z kompilacji, w tym Adresy URL określone przez kroki checkout, adres URL skryptu Deklaratywny potok z SCM i adres URL twoich globalnych bibliotek Pipeline. Jeśli naprawdę chcesz, aby potok był uruchamiany dla każdej wersji, musisz zamiast tego ustawić post-commit hook.

+0

Czy przeprowadzi to cały etap gazociągu? – Akki

+0

@Akki Wierzę, że zapamiętuje adresy URL po wykonaniu ich krok po kroku na dowolnym etapie. – heenenee

+0

Wygląda na to, że 'includedRegions' (nie testowałem innych opcji) jest ignorowane podczas odpytywania. Bez względu na to, co "includedRegions" jest ustawione na dowolne zaznaczenia w określonych lokalizacjach, spowoduje to uruchomienie kompilacji. Jakieś sugestie? – Adam

0

Jako alternatywę dla sytuacji, gdy skrypt rurociągu nie jest częścią projektu lub jest zdefiniowany w zadaniu, możesz dodać poll: true do etapu realizacji transakcji.

przykład:

stage('checkout') { 
    checkout(
     changelog: true, 
     poll: true, /*This is the important option*/ 
     scm: [ 
      $class: 'SubversionSCM', 
      filterChangelog: false, 
      ignoreDirPropChanges: false, 
      locations: [...], /*ommited for obvious reasons*/ 
      workspaceUpdater: [$class: 'CheckoutUpdater'] 
     ]) 
} 

Po pierwszym okresie rozpocznie na sondowanie z tego SCM również z SCM gdzie rurociąg znajduje się, czy jest to przypadek.

Ta opcja jest udokumentowana na https://jenkins.io/doc/pipeline/steps/workflow-scm-step/#code-checkout-code-general-scm, na samym końcu strony bez szczegółów.