読者です 読者をやめる 読者になる 読者になる

GeekFactory

int128.hatenablog.com

Gradle SSH Plugin 0.4.4 released

gradle

デプロイなどでGradleからSSHアクセスするためのプラグインGradle SSH Pluginのバージョン0.4.4をリリースしました。

build.gradleでプラグインを読み込めばすぐに使えます。以下はreloading Tomcatのサンプルです。

plugins {
  id 'org.hidetake.ssh' version '0.4.4'
}

remotes {
  webServer {
    host = '192.168.1.101'
    user = 'jenkins'
    identity = file('id_rsa')
  }
}

task deploy << {
  ssh.run {
    session(remotes.webServer) {
      put 'example.war', '/webapps'
      execute 'sudo service tomcat restart'
    }
  }
}

0.4.4では、SFTPでディレクトリを上書きする時のエラーを直しました。Issue reportをいただいたので対応しました。

詳しい使い方は下記をご覧ください。

Gradle SSH Plugin · Deploy your App from Gradle

振り返り

  • Keep
    • 自動化されたテストがあると安心してリリースできる。今後もメンテしていく。
    • リリースは早い方がいい。今回はBugに気づいてからリリースまで5日。まあまあかな。
  • Problem
    • JSchのエラーメッセージが分かりにくい。Issueでも文句が出てる。
    • リリースプロセスが煩雑でめんどくさい。
  • Try
    • JSch例外をラップして分かりやすいメッセージをつけたい。
    • リリースプロセスを定型化して書いておく。

リリースプロセス

gradle-ssh-pluginは自前でSSH処理を持たず、groovy-sshという単体実行可能なライブラリにSSH処理を切り出している。そのため、SSH処理に対して機能追加やバグ修正を行った場合は、まずgroovy-sshをリリースした後にgradle-ssh-pluginをリリースするという手順を踏む必要がある。

前提条件:

  • リリース対象のPull Requestがすべてmerge済みであること

手順:

  • groovy-sshのリリース
    • 新しいバージョンをGitHubに公開する
      • git tag v0.1.6でタグをつけてGitHubにpushする
      • GitHubでリリースノートを書く
    • 新しいバージョンをBintrayに公開する
      • ローカルマシンで./gradlew bintrayUpload -Pversion=0.1.6を実行する
      • Bintrayでpublishを行う
      • BintrayでSync to Maven Centralを行う
  • gradle-ssh-pluginのリリース
    • groovy-sshのバージョンを上げる
      • 新しいブランチgroovy-ssh-0.1.6を作る
      • groovy-sshのバージョンを上げて、必要に応じてAcceptance testsを修正する
      • Pull Requestを出してtest and mergeする
    • 新しいバージョンをGitHubに公開する
      • git tag v0.4.4でタグをつけてGitHubにpushする
      • GitHubでリリースノートを書く
    • 新しいバージョンをBintrayに公開する
      • ローカルマシンで./gradlew bintrayUpload -Pversion=0.4.4を実行する
      • Bintrayでpublishを行う
      • BintrayでSync to Maven Centralを行う
  • 関連するIssueにコメントを書く

自動化できそうなところ:

  • Travis CIからBintrayにアップロードする
    • タグ付きでgit pushされた場合はbintrayUploadまで実行するように.travis.ymlを書けばよさそう。
    • 課題:Bintrayのクレデンシャルを表示させずにgradlewの引数に渡すには?
  • リリースノートの定型文を自動生成する
    • タグを付ける時に過去のコミットログをコメントに付ければできそう。
    • そこまで嬉しいかな?