わいわいGroovy ~ 教えてG*小ネタ大会! https://jggug.doorkeeper.jp/events/11365
Gradle SSH Plugin@int128#jggug
View Slide
はじめに5分ぐらいでGradle SSH Pluginを紹介します。http://gradle-ssh-plugin.github.io@int128Groovy and Scala ProgrammerCertified ScrumMaster
どうやってデプロイしてますか?
どうやってデプロイしてますか?アプリをサーバにデプロイする方法➔ 手順書➔ シェルスクリプト➔ Capistrano➔ Maven➔ Ant➔ Gradle
Gradleからデプロイできると便利ですよね
Gradleからデプロイするメリット使い慣れたツールでビルドからデプロイまでをシームレスに記述できますビルドやデプロイの設定を一元管理することでメンテナンスの無駄がなくなりますJavaVMさえ入っていればすぐにデプロイできます(Gradle Wrapperのおかげ)
Gradle SSH PluginとはGradleでSSHを使うためのプラグイン➔ Gradleとの統合➔ コマンド実行やファイル転送➔ 標準入出力とのインタラクション➔ パスワード、公開鍵、ssh-agentによる認証➔ 踏み台サーバやプロキシを経由した接続
使用例1: アプリのデプロイGradleでビルドした成果物 (JARやWAR) をサーバに配置する例1. ビルドしてWARファイルを生成2. WebサーバにWARファイルを配置3. プロセスを再起動
apply plugin: 'war'apply plugin: 'ssh'remotes {webServer {host = '192.168.1.101'user = 'jenkins'}}task deploy(type: SshTask, dependsOn: war) {session(remotes.webServer) {put war.archivePath, '/webapps'execute 'sudo service tomcat restart'}}Webサーバを定義WebサーバにWARをデプロイWARファイルを配置し、Tomcatサービスを再起動プラグインを適用warタスクの後にdeployタスクを実行
例2: SSHオペレーションの自動化ネットワーク機器 (Cisco Catalyst) から設定を取得してファイルに保存する例1. ネットワーク機器にSSHで接続2. 特権モードに移行3. パスワードを入力4. 現在の設定を取得5. 終了
task backupConfig(type: SshTask) {session(remotes.switch01) {file('config.txt').withWriter { writer ->shell {interaction {when(partial: ~/.*>/) {standardInput << 'terminal length 0\n'standardInput << 'enable\n'when(partial: /Password: /) {standardInput << enablePassword << '\n'when(partial: ~/.*#/) {standardInput << 'show run\n'when(partial: ~/.*[#>]/) {standardInput << 'exit\n'}when(line: _) { line -> writer << line << '\n' }}}パスワードを入力プロンプトが出現したらコマンドを入力show runコマンドを入力プロンプトが出現したらexitコマンドを入力プロンプト以外の標準出力をファイルに保存ネットワーク機器の設定を取得
まとめGradle SSH Pluginを使用することで、使い慣れたGradleでビルドからデプロイまでをシームレスに実現できますデプロイだけでなく、SSHオペレーションの自動化全般に使用できます
おまけ:アーキテクチャプロダクト➔ Groovy 1.8(Gradle 1.xに同梱)➔ JSchテスト➔ Spock➔ Apache MINA SSHD server受け入れテスト➔ Travis CI◆ localhostにSSH接続してテストを実行