2015-11-14 34 views
10

Próbuję dołączyć kod zewnętrzny do skryptu Workflow, ale czegoś brakuje. Pierwszy krok wydaje się działać. Jeśli ścieżka jest nieprawidłowa to się nie powiedzie:Jak dołączyć zewnętrzny plik kodu do Jenkins Workflow

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

Ale Próbowałem szereg składniowych wariacji na następujących i nie znalazłem zaklęcie, które działa. Wszystkie próby przyniosły wariantów na „nie można rozwiązać klasy mycode.Wkflo

def z = mycode.Wkflo() 

Wkflo.groovy zawiera:.

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

Próbowałem zostały również wariacje jak metę (File()) lub usunięcie deklaracja pakietu:

Odpowiedz

15

Dokumentacja Jenkins Workflow zawiera teraz sekcję "Ładowanie tekstu skryptu" https://github.com/jenkinsci/workflow-plugin/blob/master/TUTORIAL.md, ale trudno mi było z niej skorzystać. Oto prosty przykład demonstrujący tworzenie kompletnych przepływów pracy i innych metod w pliku zewnętrznym s.

kod Workflow w 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;