2012-11-01 5 views

Antwort

9

Von einem Projekt von mir, das ich zu SCP-Dateien zu einem EC2-Server verwende. Die JAR-Dateien dort sind lokale Dateien, die Teil meines Projekts sind, ich vergesse, woher ich sie habe. Es gibt wahrscheinlich eine prägnantere Art, all dies zu tun, aber ich möchte in meinen Build-Skripten sehr explizit sein.

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

Vielen Dank für diese saubere und explizite Weise @Shorn (und es in eine eigene Konfiguration setzen), die Ich erwarte auch in Vorteil für leichtere Wartung. – ngeek

+0

Beide Artefakte sind von Maven Central erhältlich. Es macht die Konfiguration sehr einfach. –

+0

Ich merke, dass Gradle mit jsch kommt ... also gibt es nicht einen besseren, größeren Grad, um dies zu tun? – Jason

19

Ein paar Jahre nach der ursprünglichen Frage mag ich the Gradle SSH Plugin. Ein kleines Zitat seiner umfangreichen documentation:

Wir können SSH-Operationen in der Sitzung Schließung beschreiben.

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 
} 

Folgende Methoden sind bei einem Sitzungsabschluss verfügbar.

  • execute - Führen Sie einen Befehl aus.
  • executeBackground - Führen Sie einen Befehl im Hintergrund aus.
  • executeSudo - Führen Sie einen Befehl mit sudo-Unterstützung aus.
  • shell - Führen Sie eine Shell aus.
  • put - Legen Sie eine Datei oder ein Verzeichnis auf den Remote-Host.
  • get - Abrufen einer Datei oder eines Verzeichnisses vom Remote-Host.

... und ermöglicht, zum Beispiel:

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