Gradle SSH Plugin 2.3.0をリリースした
Gradle SSH Plugin 2.3.0、Groovy SSH 2.3.0をリリースしました。
2.3.0の変更点
リモートコマンドを実行する時にコマンドラインを簡単にエスケープする構文を追加しました。これまでは自分でエスケープする(シングルクォートで囲む、もしくはバックスラッシュを付ける)必要がありましたが、2.3.0からは execute
メソッドにリストが渡された場合は自動的にエスケープされて実行されます。
例えば、以下のようにLLのスクリプトをワンライナーで実行したい場合は便利でしょう。
execute(['perl', '-e', /print 'current: ', time, "\n"/])
また、2.3.0から複数の known_hosts
ファイルを指定できるようになりました。地味な改善ですが、実行時に別の known_hosts
をマージしたい場合などに役に立つと思います。
おまけ
5月中旬に入ってからダウンロード数が伸びています。2.0.0をリリースしてからだいぶ伸びているので、メジャーバージョンアップは効果があるということでしょうか。
ちなみに、Gradleで一度キャッシュされたら再びダウンロードされることはないので、新規ユーザがプラグインを使い始めたか、既存ユーザがバージョンを上げた場合にカウントされます。
Gradle SSH Plugin 2.2.0をリリースした
Gradle SSH Plugin/Groovy SSH 2.2.0をリリースしました。
2.2.0の変更点
authentications
でユーザ認証方式を指定できるようになりました。通常の使い方(パスワード認証、公開鍵認証)ではユーザ認証方式を指定する必要はありませんが、Kerberos認証などの特殊な認証方式を利用する場合は自分で指定します。
Stanford University LibrariesのJohnathan Martin氏から提案をいただいた機能追加なのですが、残念ながらKerberos認証は動作しなかったようです。JSchでKerberos認証をざっと調べてみましたが、ほとんど事例がないみたいです。
あと、 ssh.version
でバージョン情報を取得できるようにしました。バージョン情報にはJSchやGroovyなどのバージョンも含まれます。Issueのやり取りでバージョンを教えてくれということが多いので、簡単に調べられるように改善しました。
おまけ
Gradle - How do I get my plugin into the portal? で説明されている新方式でプラグインをpublishしたいのですが、Bintrayを使う旧方式ですでに公開済みの場合はコンフリクトしてしまうようです。Plugins PortalのマイページからReclaimできないので1週間ほど前に問合せしてみましたが回答なし。ちゃんと届いてないのかな。
Gradle SSH Plugin 2.1.1をリリースした
Gradle SSH Plugin/Groovy SSH 2.11をリリースしました。
2.1.1の変更点
SCP GET/PUTの性能を改善しました。
2.1.0でSCPサポートを追加しましたが、非効率な実装が残っていたため、2.1.1で性能を改善しました。
Test Item | scp vs sftp (2.1.0) | scp vs sftp (2.1.1) |
---|---|---|
get a large file | 419% | 132% |
get many files | 75% | 74% |
put a large file | 144% | 114% |
put many files | 1025% | 143% |
2.1.0ではSCPはSFTPに比べて4〜10倍も遅い結果になっていましたが、2.1.1では若干遅いレベルまで改善しています。
改善点は以下です。
- Stream Interactionのバッファサイズを1kBから1MBに変更しました。大容量のファイルを扱う際の処理効率が改善しました。
- 1つのSCPコマンドで複数のファイルやディレクトリをまとめて作成するように変更しました。もともとは、ファイルやディレクトリごとにSCPコマンドを実行していたため、通信遅延やコマンド実行のコストがかかっていました。
おまけ
Groovy 2.xでコンパイルしたコードをGroovy 1.xで実行すると様々な問題が起こるのですが、また新たに1つ見つけてしまいました。Groovy 2.xの @groovyx.transform.Immutable
で生成されるコンストラクタはGroovy 1.xで動作しないようです。
Caused by: java.lang.IncompatibleClassChangeError: the number of constructors during runtime and compile time for org.hidetake.groovy.ssh.extension.helper.ScpPutHelper$EnterDirectory do not match. Expected -1 but got 3
代わりに、フィールドをすべてfinalにして自分でコンストラクタを書けばOKです。
Gradle 1.xサポートを早く外したいなぁ。