2015-11-14 4 views
10

ワークフロースクリプトに外部コードを組み込もうとしていますが、何か不足しています。最初のステップはうまくいくようです。パスが無効である場合、これは失敗します。Jenkinsワークフローに外部コードファイルを含めるには

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

しかし、私は次のように構文上のバリエーションの数を試したし、作品呪文を発見していません。私はまた、実行(ファイル())のようなバリエーションを試してみた

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

をまたは削除:すべての試みは

def z = mycode.Wkflo() 

Wkflo.groovyが含まれているクラスmycode.Wkfloを解決することができません」にバリエーションを生産していますパッケージ宣言。

答えて

15

ジェンキンスWorkflowドキュメントは現在、「ロードスクリプトテキスト」 https://github.com/jenkinsci/workflow-plugin/blob/master/TUTORIAL.mdのセクションが含まれますが、私はそれは難しい従うことを発見しました。ここでは、外部ファイルに完全なワークフローや他の方法を作成する方法を示し単純な例ですs。

ジェンキンスのワークフローコード:

// 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; 
関連する問題