Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Gradle SSH Plugin

Gradle SSH Plugin

わいわいGroovy ~ 教えてG*小ネタ大会!
https://jggug.doorkeeper.jp/events/11365

Hidetake Iwata

June 20, 2014
Tweet

More Decks by Hidetake Iwata

Other Decks in Technology

Transcript

  1. Gradle SSH Plugin
    @int128
    #jggug

    View Slide

  2. はじめに
    5分ぐらいで
    Gradle SSH Pluginを紹介します。
    http://gradle-ssh-plugin.github.io
    @int128
    Groovy and Scala Programmer
    Certified ScrumMaster

    View Slide

  3. どうやって
    デプロイしてますか?

    View Slide

  4. どうやってデプロイしてますか?
    アプリをサーバにデプロイする方法
    ➔ 手順書
    ➔ シェルスクリプト
    ➔ Capistrano
    ➔ Maven
    ➔ Ant
    ➔ Gradle

    View Slide

  5. Gradleからデプロイできると
    便利ですよね

    View Slide

  6. Gradleからデプロイするメリット
    使い慣れたツールでビルドからデプロイまでをシー
    ムレスに記述できます
    ビルドやデプロイの設定を一元管理することでメン
    テナンスの無駄がなくなります
    JavaVMさえ入っていればすぐにデプロイできます
    (Gradle Wrapperのおかげ)

    View Slide

  7. Gradle SSH Pluginとは
    GradleでSSHを使うためのプラグイン
    ➔ Gradleとの統合
    ➔ コマンド実行やファイル転送
    ➔ 標準入出力とのインタラクション
    ➔ パスワード、公開鍵、ssh-agentによる認証
    ➔ 踏み台サーバやプロキシを経由した接続

    View Slide

  8. 使用例1: アプリのデプロイ
    Gradleでビルドした成果物 (JARやWAR) をサー
    バに配置する例
    1. ビルドしてWARファイルを生成
    2. WebサーバにWARファイルを配置
    3. プロセスを再起動

    View Slide

  9. 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タスクを実行

    View Slide

  10. 例2: SSHオペレーションの自動化
    ネットワーク機器 (Cisco Catalyst) から設定を取
    得してファイルに保存する例
    1. ネットワーク機器にSSHで接続
    2. 特権モードに移行
    3. パスワードを入力
    4. 現在の設定を取得
    5. 終了

    View Slide

  11. 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コマンドを入力
    プロンプト以外の標準出力をファイルに保存
    ネットワーク機器の設定を取得

    View Slide

  12. まとめ
    Gradle SSH Pluginを使用することで、
    使い慣れたGradleでビルドからデプロイまでを
    シームレスに実現できます
    デプロイだけでなく、SSHオペレーションの
    自動化全般に使用できます

    View Slide

  13. おまけ:アーキテクチャ
    プロダクト
    ➔ Groovy 1.8(Gradle 1.xに同梱)
    ➔ JSch
    テスト
    ➔ Spock
    ➔ Apache MINA SSHD server
    受け入れテスト
    ➔ Travis CI
    ◆ localhostにSSH接続してテストを実行

    View Slide