2012-11-01 66 views

回答

9

從我的一個項目,我用SCP文件到EC2服務器。 那裏的jar文件是我的項目的一部分的本地文件,我忘記了我從哪裏得到它們。所有這些可能都有一個更簡潔的方法,但我喜歡在構建腳本中非常明確。

configurations { 
    sshAntTask 
} 

dependencies { 
    sshAntTask fileTree(dir:'buildSrc/lib', include:'jsch*.jar') 
    sshAntTask fileTree(dir:'buildSrc/lib', include:'ant-jsch*.jar') 
} 

ant.taskdef(
    name: 'scp', 
    classname: 'org.apache.tools.ant.taskdefs.optional.ssh.Scp', 
    classpath: configurations.sshAntTask.asPath) 

task uploadDbServer() { 
    doLast { 
    ant.scp(
     file: '...', 
     todir: '...', 
     keyfile: '...') 
    } 
} 
+0

非常感謝@Shorn這種清理和明確的方式(並把它變成自己的配置),這一點我也期待在有利於更輕鬆地進行維護。 – ngeek

+0

這兩個工件都可以從Maven中心獲得。它使配置非常簡單。 –

+0

我注意到Gradle帶有jsch ...所以沒有更好的Gradle方法來做到這一點? – Jason

19

原來的問題幾年後,我喜歡the Gradle SSH Plugin。其廣泛的小報價documentation

我們可以在會話關閉中描述SSH操作。

session(remotes.web01) { 
    // Execute a command 
    def result = execute 'uptime' 

    // Any Gradle methods or properties are available in a session closure 
    copy { 
    from "src/main/resources/example" 
    into "$buildDir/tmp" 
    } 

    // Also Groovy methods or properties are available in a session closure 
    println result 
} 

以下方法可用於會話關閉。

  • execute - 執行命令。
  • executeBackground - 在後臺執行命令。
  • executeSudo - 使用sudo支持執行命令。
  • shell - 執行一個shell。
  • put - 將文件或目錄放入遠程主機。
  • get - 從遠程主機獲取文件或目錄。

...並且允許,例如:

task deploy(dependsOn: war) << { 
    ssh.run { 
    session(remotes.staging) { 
     put from: war.archivePath.path, into: '/webapps' 
     execute 'sudo service tomcat restart' 
    } 
    } 
}