2017-11-16 49 views
0

操作(、外部のGroovyスクリプトをロードし、ノーなどshステップに呼び出していないしてください)Jenkinsfileで関数を定義して呼び出す方法は?

を、私はこのテーマに関連した質問の束を見てきたが、それらのどれもが受け入れ可能な解決策になるものを提供しています私は追加または削除するかどうかに応じて、

@NonCPS 
def encodeProperties(Map properties) { 
    properties.collect { k, v -> "$k=$v" }.join('|') 
} 

node('dockerized') { 
    stage('Whatever') { 
     properties = [foo: 123, bar: "foo"] 
     echo encodeProperties(properties) 
    } 
} 

:私はここに、最小限の例ですので、onelinerですが、パイプラインの制限は、それが不可能なことウンター言語で有用何かを書くために作られた...

実行する必要があります@NonCPS注釈、またはty引数のpe宣言、エラーは変更されますが、何が起こったのかについて何らかの理由を与えることはありません。それは基本的にはランダムなノイズであり、状況の現実と矛盾します(時には、無関係なオブジェクトにはメソッドencodePropertiesがないと主張します)。誰も試していなかったシグニチャのメソッドencodePropertiesを見つけることができない

悲惨な品質の文書を読んだことで、一般的な関数がシリアライズ可能ではない可能性があることが理解されています。これをGroovyインタプリタに明示的に説明する...申し訳ありませんが、これは意味をなさないですが、これはおおまかにドキュメントに書かれています。collect内部でstage creatを使用しようとしています。新しいエラーのロード...少なくとも、GroovyのバージョンがGroovy標準の大部分を実装していないことを著者が告白しているということで、少なくとも理解できます...

答えて

1

これは単なる誤字です。 encodeProp を定義しましたが、encodeProprtiesと呼ばれています。

+0

私はSOにコピーして編集した例ではタイプミスです。実際のスクリプトで私はそれが正しい実行しています。 – wvxvw

+0

@wvxvw次に、そのコードを実行しようとしたときにどんな例外が発生したのかを明確にしてください。それは私のためにうまく動作します。 –