2015-11-14 32 views
10

Sto cercando di includere codice esterno nel mio script del flusso di lavoro, ma mi manca qualcosa. Il primo passo sembra funzionare. Se il percorso non è valido questo non riesce:Come includere un file di codice esterno in Jenkins Workflow

evaluate(new File('/home/larry.fast/Wkflo.groovy')) 

Ma ho provato una serie di variazioni sintattiche sulla seguente e non hanno trovato un incantesimo che funziona. Tutti i tentativi hanno prodotto le varianti sul tema "in grado di risolvere classe mycode.Wkflo

def z = mycode.Wkflo() 

Wkflo.groovy contiene:.

package mycode; 
def hello() { 
    echo "Hello from workflow" 
} 

Ho anche provato varianti come run (File()) o la rimozione della pacchetto di dichiarazione.

documentazione

risposta

15

Jenkins flusso di lavoro comprende ora una sezione su "Caricamento Scrittura testo" https://github.com/jenkinsci/workflow-plugin/blob/master/TUTORIAL.md ma ho trovato difficile da seguire. Ecco un semplice esempio che illustra come creare flussi di lavoro completi e altri metodi in file esterno S.

codice del flusso di lavoro in Jenkins:

// Loading code requires a NODE context 
// But we want the code accessible outside the node Context 
// So declare extcode (object created by the LOAD operation) outside the Node block. 
def extcode 

node { 
    // paths are relative to your workspace 
    // you may need to run git to populate your workspace 
    git url: 'ssh://mygitrepo' 
    extcode = load 'myExtCode.wkflo' 

    // or you can directly access the file system 
    // Eg. when developing your code in a local git clone 
    extcode = load '/some/absolute/path/myExtCode.wkflo' 

    // extcode is now a groovy object containing everything declared in the file 
    extcode.hello('world') 
} 
// If your code contains Stage and Node blocks, 
// you'll want to initiate that code outside of the node() block above 
extcode.extMain() 

------ myExtCode.wkflo

// Any command placed at the root of the file get executed during the load operation 
echo "hello from loading myExtCode" 

// Methods declared in external code are accessible 
// directly from other code in the external file 
// indirectly via the object created by the load operation 
// eg. extcode.hello('use this syntax from your main code') 
def hello(whom) { 
    echo "Hello ${whom}" 
} 

// Complete workflows should be created inside a controlling method 
// else they will run nested inside the node() block when the load takes place (edit: added missing "def" keyword 
def extMain() { 
    stage 'External Code is running' 
    node() { 
     hello('from external node block') 
    } 
} 

// !!Important Boilerplate!!  
// The external code must return it's contents as an object 
return this;