2017-12-05 19 views
0

共有ジェンキンライブラリを使用し、そこから別のgit repoをクローンします。Jenkinsパイプライン:別のjenkinsfileから値を読み取る

#!/usr/bin/env groovy 
@Library('mylib') 
import jLib.* 

someStage{ 
    myparam = someValue 
} 

が、私は "someValueのを" 読みたい:それレポはfollwingに似jenkinsfileが含まれています。 現在、私はregexpでこれをやっていますが、このようにして、Stringのような複雑な値は検索できません。 documentation of Shared jenkins libs値で

がjenkinsfileから次のようにロードされます。

def call(body) { 
    // evaluate the body block, and collect configuration into the object 
    def config = [:] 
    body.resolveStrategy = Closure.DELEGATE_FIRST 
    body.delegate = config 
    body() 
} 

どのように私は同様の方法でワークスペース内Jenkinsfileから値を抽出することができますか?体はどこから来たの?

ありがとうございました

+0

私はあなたがしていることを理解しているとは思わない - 'myparam'の価値を読む? 'call(body)'メソッドは、関数を呼び出して呼び出しているGroovyメソッドです。署名は、 'call(Closure body)'のように考えることができます。 – mkobit

+0

はい私はmyparamの値を読んでいます。 – herm

+0

私は基本的に私のワークスペース内のこのファイルをClosureに変えて、2番目のスニペットに示されている方法と同様の方法で含まれている値を読みたいと思います。しかし、私はどのように知りません。 – herm

答えて

0

解決策が見つかりました。

Map configFromJenkinsfile(jenkinsfile){ 
    def jenkinsfileConfig = [:] 
    def matches = jenkinsfile =~ /(?s)\{(.*?)\}/ 
    def exec = new GroovyShell(new Binding(jenkinsfileConfig)).evaluate(matches[0][1]) 
    return jenkinsfileConfig; 
} 

私は私とgroovyshellに

String projectJenkinsFile = readFile "Jenkinsfile"を使用した後)私は(「{」と「}」との間)は、すべての割り当てでjenkinsfileで一部を実行して文字列としてjenkinsFileを通過するとそれをテストバインディングとしてマップする。タイプのないすべての割り当てはバインディングに捕捉され、アクセスできます。

関連する問題