什麼是乾淨優雅的方式來通過scp與Gradle複製一堆文件?如何在gradle任務中通過scp複製目錄?
兩種方法我目前看到的是:
- 使用Apache旅行車,如下所述:http://markmail.org/message/2tmtaffayhq25g4s
- 執行通過命令行SCP與Exec任務
有沒有更好的(更明顯的)方法來解決這個問題?
什麼是乾淨優雅的方式來通過scp與Gradle複製一堆文件?如何在gradle任務中通過scp複製目錄?
兩種方法我目前看到的是:
有沒有更好的(更明顯的)方法來解決這個問題?
從我的一個項目,我用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: '...')
}
}
原來的問題幾年後,我喜歡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'
}
}
}
非常感謝@Shorn這種清理和明確的方式(並把它變成自己的配置),這一點我也期待在有利於更輕鬆地進行維護。 – ngeek
這兩個工件都可以從Maven中心獲得。它使配置非常簡單。 –
我注意到Gradle帶有jsch ...所以沒有更好的Gradle方法來做到這一點? – Jason