2012-11-01 37 views
12

ग्रैडल के साथ एसपीपी के माध्यम से फ़ाइलों का एक समूह कॉपी करने के लिए एक साफ और सुरुचिपूर्ण तरीका क्या है?ग्रेडल कार्य के भीतर एसपीपी के माध्यम से निर्देशिका की प्रतिलिपि कैसे करें?

दो तरीके मैं वर्तमान में देख रहे हैं:

  • को यहां बताए गए अपाचे वैगन, का उपयोग करना: http://markmail.org/message/2tmtaffayhq25g4s
  • Exec कार्य के साथ कमांड लाइन के माध्यम से SCP निष्पादित

वहाँ किसी भी बेहतर (अधिक कर रहे हैं स्पष्ट) इस दृष्टिकोण के तरीके?

उत्तर

9

मेरी एक परियोजना से मैं एससीपी फ़ाइलों को ईसी 2 सर्वर पर उपयोग करता हूं। जार फाइलें स्थानीय फाइलें हैं जो मेरी परियोजना का हिस्सा हैं, मैं भूल जाता हूं कि मैं उन्हें कहां से मिला। यह सब करने का शायद एक और संक्षिप्त तरीका है, लेकिन मुझे अपनी बिल्ड स्क्रिप्ट में बहुत स्पष्ट होना पसंद है।

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

उन दोनों कलाकृतियों मेवेन केंद्रीय से उपलब्ध हैं। यह विन्यास बहुत आसान बनाता है। –

+0

मुझे लगता है कि ग्रैडल जेएसएच के साथ आता है ... तो ऐसा करने के लिए कोई बेहतर, अधिक गहरा तरीका नहीं है? – Jason

19

मूल प्रश्न के कुछ साल बाद, मुझे the Gradle SSH Plugin पसंद है। इसके व्यापक documentation का एक छोटा सा उद्धरण:

हम सत्र बंद करने में एसएसएच संचालन का वर्णन कर सकते हैं।

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 - सुडो समर्थन के साथ एक आदेश निष्पादित करें।
  • shell - एक खोल निष्पादित करें।
  • put - रिमोट होस्ट में फ़ाइल या निर्देशिका डालें।
  • get - रिमोट होस्ट से फ़ाइल या निर्देशिका प्राप्त करें।

... और उदाहरण के लिए, के लिए अनुमति देता है:

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