2016-06-08 7 views
6

Wir verwenden Jenkins seit einiger Zeit für Continuous Integration. Ein typischer Build-Job gibt das SVN-Repository und die Anmeldeinformationen im Abschnitt "Quellcodeverwaltung" an, dann aktivieren wir im Abschnitt "Auslöser erstellen" die Option "Poll SCM" mit einem Abrufplan alle 10 Minuten (H/10 * * * *). Wir haben die neueste Version von Jenkins aktualisiert und möchten Pipeline-Builds einrichten. Ein typisches Pipeline-Skript wie folgt aussieht:Wie konfiguriere ich eine Jenkins-Pipeline, die durch Abfragen von SubVersion ausgelöst werden soll?

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'] 
    ] 
} 

Wenn die Pipeline Job manuell ausgelöst wird, dann läuft alles gut, aber wir würden dieses Pipeline gerne jedes Mal eine neue Revision in der SVN-Repository geprüft ausgeführt werden. Die Pipeline-Konfiguration verfügt über eine Build-Trigger-Option "Poll SCM", verfügt jedoch nicht über einen Abschnitt "Quellcodeverwaltung", in dem Sie Ihr Repository angeben können. Wie können wir das erreichen?

Antwort

2

Die Lösung, die ich Arbeit gefunden habe, ist:

    den Pipeline-Skript in eine Datei verschieben
  1. (die Standardeinstellung ist JenkinsFile) und das mein Projekt in SubVersion im Stamm speichern.
  2. Legen Sie meine Pipeline-Jobdefinitionsquelle auf "Pipeline-Skript von SCM" fest, geben Sie die Details für das Projekt in SubVersion nach einem normalen Jenkins-Buildjob ein, und legen Sie den Skriptpfad auf JenkinsFile mit dem Pipelineskript fest .
  3. Legen Sie den Build-Trigger des Pipeline-Jobs auf "Poll SCM" fest und geben Sie einen Zeitplan ein.
  4. laufen manuell die Pipeline Job

Es schien, Schritt 4, manuell ausgeführt wird, die Pipeline Job zu sein, dass die Umfrage Auslöser verursacht die richtige Repository zu holen abzufragen. Davor schien es nicht zu wissen, wo es hinschauen sollte.

+0

Haben Sie die groovige Zeile, die verwendet wird, um die Build-Trigger-Eigenschaft in Schritt 3 festzulegen? Ich stelle mir vor, dass in der 'properties();' Methode verschachtelt wäre? – tarabyte

+0

Ich denke, das wird nur funktionieren, wenn es eine Änderung in der Jenkinsfile selbst gibt ... – Philippe

3

Ich glaube, Sie brauchen eine Kasse Stufe vor, bevor Sie Build- Stufe, die der SCM Informationen besteht. Dies ermöglicht den Job Poll SCM im gewünschten Intervall und führen Sie die Pipeline.

Sie können sogar Pipeline-Skript verwenden, ohne dass die Pipeline-Codes als JenkinsFile in SCM gespeichert werden müssen.

Unten ist mein SVN Kasse stufigen Pipeline-Code vor meiner Bühne Körperbau:

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']]) 
} 

Works für meine Pipeline Job though. Hoffe das hilft.

+0

In Ihrem Code-Snippet wie erhalten Sie die credentialsId? – DavidA

+0

Gehen Sie zu '$ (Jenkins_URL)/credentials /' und wählen Sie die ID aus der Liste der konfigurierten Anmeldeinformationen aus. – zionyx

2

einen Jenkins Declarative Pipeline Skript verwenden, können Sie einen Job konfigurieren, dass eine SVN-Repository URL alle 10 Minuten abgefragt wird, wie folgt:

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']]) 
      } 
     } 
    } 
} 

Der Auslöser pollSCM automatisch all SCM Repository URLs mit Ihrer Build einschließlich dazugehörige abfragen soll, URLs, die von checkout Schritten angegeben werden, die URL Ihres Deklarativen Pipeline-Skripts von SCM und die URL Ihrer globalen Pipeline-Bibliotheken. Wenn Sie jedoch wirklich möchten, dass die Pipeline für jede einzelne Revision ausgeführt wird, müssen Sie stattdessen eine post-commit hook einrichten.

+0

Wird die gesamte Pipeline-Phase abgefragt? – Akki

+0

@Akki Ich glaube, es merkt sich URLs, sobald sie in einem Schritt von einem Schritt ausgeführt werden. – heenenee

+0

Es scheint, dass 'includedRegions' (andere Optionen wurden nicht getestet) beim Polling ignoriert wird. Egal, was 'includedRegions' auf alle Checkins an den angegebenen Orten setzt, löst einen Build aus. Irgendwelche Vorschläge? – Adam

0

Als Alternative dazu, wenn das Pipeline-Skript nicht Teil des Projekts ist oder im Job definiert ist, können Sie poll: true zu Ihrer Checkout-Phase hinzufügen.

Beispiel:

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'] 
     ]) 
} 

Nach dem ersten Lauf es Abfrage von diesem SCM auch aus dem SCM startet, wo die Pipeline ist, wenn es der Fall ist.

Diese Option ist bei https://jenkins.io/doc/pipeline/steps/workflow-scm-step/#code-checkout-code-general-scm, am Ende der Seite ohne Details dokumentiert.

Verwandte Themen