2017-12-05 32 views
1

私はgroovyの正規表現から一致する文字列を取得しようとしています。問題なくコンソールに文字列のプリントをマッチしたが、私はgitのコマンドにマッチした文字列を使用しようとすると、私は次のエラーを取得する:Jenkins groovy regex match string:エラー:java.io.NotSerializableException:java.util.regex.Matcher

   def binaryName = "298_application_V2_00_Build_07.hex" 

       def matches = (binaryName =~ /(V)(\d+)(_)(\d+)(_)(Build)(_)(\d+)/) 
       versionTag = ""+matches[0].getAt(0)     
       echo "${matches}" 
       echo "$versionTag" 
       bat("git tag $versionTag") 
       bat("git push origin --tags") 

どのようにすることができます:ここで

Err: Incremental Build failed with Error: java.io.NotSerializableException: java.util.regex.Matcher 

コードです正規表現から一致する文字列を取得しますか?

答えて

3

この問題はJenkinsのCPSによって発生します。これは、すべてのパイプライン実行をシリアル化して再開可能状態として保存します。非直列化可能な方法へ

コール@NonCPSでアノテート方法に包まれる必要があります:

@NonCPS 
String getVersion(String binaryName) { 
    def matches = (binaryName =~ /(V)(\d+)(_)(\d+)(_)(Build)(_)(\d+)/) 
    versionTag = ""+matches[0].getAt(0) 
    versionTag 
} 

この方法は、今、あなたのパイプラインから呼び出すことができます。このメソッドの実行中にJenkinsのマスタが再起動した場合、完全に実行されます。多くの場合、あなたのように、問題はありません。

+0

ありがとう、私はこれで何時間も苦労してきました。どのようにこれについて知っているはずです:\ –