2017-08-25 12 views
0

私はJenkinsファイルでGroovyを使用しています。 appName-1.0.0-ua67435.jarを、私は今、変数内の文字列1.0.0-ua67435のこの部分を取得したいJenkinsfile(グルーヴィー)で/opt/appNameGroovyは、パスを知っている特定の終了を持つファイル名を取得します。

にコピーされます:Gradleのビルドは、次のように見ているjarファイルを作成します。私はこの正規表現が仕事をしてくれることを願っています:-(.*?).jar$

私のファイルはどこにあるのか分かりますが、その名前はわかりません。 /opt/appName/の唯一の.jarがあります。

私のファイル名の部分文字列を取得するには、その場所と名前パターンしか知りません。

+0

あなたは文字列から文字列 'appNameの-1.0.0-ua67435.jar'を取得したいわけ' /opt/appName/appName-1.0 .0-ua67435.jar'? – Gurman

+0

'appName - ****************。jar'の正確な名前を知らないうちにはい。私は未知の部分だけを好むだろうが。 – SWiggels

+0

答えを確認できます。 – Rao

答えて

1

はこれを試してみてください:

new File("/opt/appName/").eachFileMatch(FileType.FILES, ~/^.*-.*?.jar$/, { println it.name }) 

それはあなたがドキュメントのリンクからより多くの例を見ることができ、特定のパターンと名前を一致させるためにeachFileMatchを使用しています。


インポートが許可されていない場合は、このような完全修飾名を使用してください。

...eachFileMatch(groovy.io.FileType.FILES,...

+0

変数でその名前を取得するにはどうすればよいですか? – SWiggels

+0

@SWiggels 'it.name'はあなたが望む名前です。 – aristotll

+0

FileType.FILESでインポートの問題が発生しました。ジェンキンスは輸入が好きではないようだ。 – SWiggels

1

あなたは、文字列の末尾にappName-.jar間だけ可変部分を取得します

def names = [] 
new File("/opt/appName/").eachFileMatch groovy.io.FileType.FILES, ~/(?<=appName-).*(?=[.]jar$)/, { names << it.name } 

(?<=appName-).*(?=[.]jar$)正規表現を使用することができます。 appNameの前に^を追加すると、ファイル名の先頭にあるときにのみ一致します。

regex demoを参照してください。

詳細

  • (?<=appName-)からappNameは、現在の場所
  • .*のすぐ左に存在することを確認します - 任意の0+改行文字以外の文字など、多くの(?=[.]jar$)
  • できるだけ - .jar部分文字列に続けて、現在の位置のすぐ右に文字列位置の終わりがあることを確認します。

さらに詳しい情報eachFileMatch hereについては、

+0

Jenkinsは静的インポートを許可していません。さらに、 'baseDir'は知られていません。 – SWiggels

+0

@SWiggelsこれは、ドキュメントのスニペットです。私はそこで正規表現を変更したばかりです。 'baseDir'は'/opt/appName/"'で初期化してください。 –

+0

'org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException:staticMethodを使用することを許可されていないスクリプトが実行中のものです。 – SWiggels

0

することはできFileNameFinder簡単にそれを見つけるためのクラス:

println new FileNameFinder().getFileNames(folderPath, '**/appName*.jar').collect{ it.substring(it.lastIndexOf('/')+1, it.size())} 
関連する問題