2016-06-08 65 views
6

Utilizziamo Jenkins per l'integrazione continua per un po 'di tempo. Un tipico processo di compilazione specifica il repository SVN e le credenziali nella sezione "Gestione codice sorgente", quindi nella sezione "Build Triggers" abilitiamo "Poll SCM" con un programma di polling ogni 10 minuti (H/10 * * * *). Abbiamo aggiornato all'ultima versione di Jenkins e stiamo cercando di creare build di pipeline. Uno script tipico gasdotto assomiglia:Come configurare una pipeline Jenkins per essere attivata dal polling di 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'] 
    ] 
} 

Quando il lavoro gasdotto viene attivato manualmente allora tutto funziona bene, ma vorremmo questo gasdotto per essere eseguito ogni volta che una nuova revisione viene controllato al repository SVN. La configurazione della pipeline ha un'opzione di attivazione build "poll SCM", ma non ha una sezione "Gestione codice sorgente" in cui è possibile specificare il repository. Come possiamo raggiungere questo risultato?

risposta

2

La soluzione che ho trovato al lavoro è:

  1. Spostare lo script gasdotto in un file (il default è JenkinsFile) e memorizzarla nella radice del mio progetto in Subversion.
  2. Impostare l'origine della definizione del lavoro della pipeline su "Script pipeline da SCM", immettere i dettagli su dove trovare il mio progetto in SubVersion come per un normale lavoro di compilazione di Jenkins e impostare il percorso dello script in modo che punti al JenkinsFile che contiene lo script della pipeline .
  3. Impostare il trigger di generazione del lavoro della pipeline su "Poll SCM" e immettere una pianificazione.
  4. eseguire manualmente il lavoro gasdotto

Sembrava essere il punto 4, in esecuzione manualmente il lavoro di oleodotto che ha causato il grilletto sondaggio per raccogliere il repository corretto per il polling. Prima non sembrava sapere dove guardare.

+0

hai la linea groovy utilizzata per impostare la proprietà del trigger build nel passaggio 3? Immagino che sarebbe annidato all'interno del metodo 'properties();'? – tarabyte

+0

Penso che funzionerà solo quando c'è una modifica nello stesso Jenkinsfile ... – Philippe

3

penso che hai bisogno di una fase Checkout prima prima della Corporatura fase, che consiste delle informazioni SCM. Ciò consente al lavoro di effettuare il polling SCM all'intervallo desiderato ed eseguire la pipeline.

È anche possibile utilizzare lo script Pipeline, senza che i codici della pipeline vengano archiviati come JenkinsFile in SCM.

Qui di seguito è la mia SVN Checkout codice di condotta stadio prima del mio costruire stadio:

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

Opere per il mio lavoro gasdotto però. Spero che questo ti aiuti.

+0

Nel tuo frammento di codice come ottieni le credenziali? – DavidA

+0

Vai a '$ (Jenkins_URL)/credenziali /' e seleziona l'ID dall'elenco di credenziali configurate. – zionyx

2

Utilizzando un Declarative Pipeline sceneggiatura Jenkins, è possibile configurare un lavoro per interrogare un URL repository SVN ogni 10 minuti nel modo seguente:

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

Il pollSCM trigger deve interrogare automaticamente tutti gli URL Repository SCM associati con la costruzione, tra cui URL specificati dai passaggi checkout, dall'URL dello script della pipeline dichiarativa da SCM e dall'URL delle librerie della pipeline globale. Se vuoi veramente che la pipeline venga eseguita per ogni singola revisione, devi invece impostare uno post-commit hook.

+0

Questo sonderà l'intera fase della pipeline? – Akki

+0

@Akki Credo che ricordi gli URL una volta che sono stati eseguiti da un passaggio in qualsiasi fase. – heenenee

+0

Sembra che le "incluseRegioni" (che non hanno testato altre opzioni) vengano ignorate durante il polling. Indipendentemente da ciò che "InclusoRegioni" è impostato su qualsiasi check-in per le posizioni specificate, verrà attivata una build. Eventuali suggerimenti? – Adam

0

In alternativa a quando lo script della pipeline non fa parte del progetto o è definito nel lavoro, è possibile aggiungere poll: true alla fase di checkout.

Esempio:

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

Dopo la prima esecuzione inizierà il polling da questo SCM anche dalla SCM in cui la pipeline è se è il caso.

Questa opzione è documentata allo https://jenkins.io/doc/pipeline/steps/workflow-scm-step/#code-checkout-code-general-scm, nella parte finale della pagina senza dettagli.

Problemi correlati