How to copy directory via scp within gradle task?

后端 未结 2 416
南方客
南方客 2020-12-16 00:11

What is a clean and elegant way to copy a bunch of files via scp with Gradle?

Two ways I currently see are:

  • Using Apache Wagon, as described here: http
相关标签:
2条回答
  • 2020-12-16 00:46

    A few years after the original question, I like the Gradle SSH Plugin. A small quote of its extensive documentation:

    We can describe SSH operations in the session closure.

    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
    }
    

    Following methods are available in a session closure.

    • execute - Execute a command.
    • executeBackground - Execute a command in background.
    • executeSudo - Execute a command with sudo support.
    • shell - Execute a shell.
    • put - Put a file or directory into the remote host.
    • get - Get a file or directory from the remote host.

    ...and allows for, for example:

    task deploy(dependsOn: war) << {
      ssh.run {
        session(remotes.staging) {
          put from: war.archivePath.path, into: '/webapps'
          execute 'sudo service tomcat restart'
        }
      }
    }
    
    0 讨论(0)
  • 2020-12-16 00:55

    From a project of mine that I use to SCP files to an EC2 server. The jar files there are local files that are part of my project, I forget where I got them from. There's probably a more concise way of doing all this, but I like to be very explicit in my build scripts.

    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 讨论(0)
提交回复
热议问题