Wiki source code of Remote deployment with Ant and ssh
Last modified by Pascal Robert on 2009/02/18 10:53
Hide last authors
| author | version | line-number | content |
|---|---|---|---|
| |
4.1 | 1 | You can do many things with Ant, one of them is the ability to use tools like //[[tar>>url:http://ant.apache.org/manual/CoreTasks/tar.html||shape="rect"]]//, //[[gzip>>url:http://ant.apache.org/manual/CoreTasks/pack.html||shape="rect"]]//, //[[FTP>>url:http://ant.apache.org/manual/OptionalTasks/ftp.html||shape="rect"]]// and //[[scp>>url:http://ant.apache.org/manual/OptionalTasks/scp.html||shape="rect"]]// for remote deployment. At work, we use a shell script on our servers to deploy our apps, and we are using //rsync// to send the applications to the server before calling the shell script. Would be great to actually do this in one step ? It's quite easy!. |
| |
1.1 | 2 | |
| |
4.1 | 3 | First, you need to install [[JSch>>url:http://sourceforge.net/projects/jsch/||shape="rect"]]. We use the //jsch-0.1.29// release, we didn't try a later release. Copy the JAR into ///Developer/Java/Ant/lib/// (Mac OS X 10.4) or ///usr/share/ant/lib/// (Mac OS X 10.5). |
| |
1.1 | 4 | |
| |
4.1 | 5 | Next, you need to add this JAR to the Ant lib list inside Eclipse. Open Eclipse's preferences (Eclipse->Preferences), open the //Tab// triangle and click on //Runtime//. Select //Ant Home Entries// and click on //Add External JARs...// Browse up to ///Developer/Java/Ant/lib/// and select //jsch-0.X.XX.jar//. The JAR should now be part of the list of JARs available for Ant. |
| |
1.1 | 6 | |
| 7 | {{warning}} | ||
| |
4.1 | 8 | If you use multiple workspaces, you have to add the JAR to each of your workspaces to the //Ant Home Entries// list. |
| |
1.1 | 9 | {{/warning}} |
| 10 | |||
| |
4.1 | 11 | Ok, now it's time to actually create a Ant task for deployment. You can add a property like this to //build.properties//: |
| |
1.1 | 12 | |
| 13 | {{code}} | ||
| 14 | |||
| 15 | servers.production=my.server.address | ||
| 16 | |||
| 17 | {{/code}} | ||
| 18 | |||
| 19 | And you add this to your //build.xml// file. | ||
| 20 | |||
| 21 | {{code}} | ||
| 22 | |||
| 23 | <target depends="setProps,init.install,build.woapp" name="deployProduction"> | ||
| 24 | <echo message="Starting file transfer to ${user.name}@${servers.production}" /> | ||
| 25 | <exec dir="." executable="rsync" os="Mac OS X" failonerror="true"> | ||
| 26 | <arg value="-aog" /> | ||
| 27 | <arg value="-e ssh" /> | ||
| 28 | <arg value="${dest.dir}/${project.name}.woa" /> | ||
| 29 | <arg value="${user.name}@${servers.production}:~" /> | ||
| 30 | </exec> | ||
| 31 | <sshexec command="myshellscriptfordeployment -d ${project.name}.woa" host="${servers.production}" keyfile="${user.home}/.ssh/id_rsa" passphrase="" username="${user.name}"/> | ||
| 32 | </target> | ||
| 33 | |||
| 34 | {{/code}} | ||
| 35 | |||
| |
4.1 | 36 | Wait a minute... Maybe //Ant// will complain because it can't send the password to the remote server. How to fix this ? By creating a SSH public key if you don't already have one. |
| |
1.1 | 37 | |
| 38 | First, check if you already have a public key on your computer: | ||
| 39 | |||
| 40 | {{code}} | ||
| 41 | |||
| 42 | $ ls -al ~/.ssh/id_rsa.pub | ||
| 43 | -rw-r--r-- 1 monuser monuser 230 Dec 5 2006 .ssh/id_rsa.pub | ||
| 44 | |||
| 45 | {{/code}} | ||
| 46 | |||
| |
4.1 | 47 | No //id_rsa.pub// file ? Create one: |
| |
1.1 | 48 | |
| 49 | {{code}} | ||
| 50 | |||
| 51 | $ ssh-keygen -t rsa | ||
| 52 | |||
| 53 | {{/code}} | ||
| 54 | |||
| 55 | Now copy your SSH public key to your remote server: | ||
| 56 | |||
| 57 | {{code}} | ||
| 58 | |||
| 59 | $ scp ~/.ssh/id_rsa.pub mynuser@remoteserver:myuser.pub | ||
| 60 | |||
| 61 | {{/code}} | ||
| 62 | |||
| |
4.1 | 63 | and put your public key in the //authorized_keys// file: |
| |
1.1 | 64 | |
| 65 | {{code}} | ||
| 66 | |||
| 67 | remoteserver$ cat ~/monuser.pub >> ~/.ssh/authorized_keys | ||
| 68 | |||
| 69 | {{/code}} | ||
| 70 | |||
| |
4.1 | 71 | Now, next time that you login by SSH from your computer to the server, it will stop asking for a password and the Ant task will stop complaining. For added security, when you create your key, use a passphrase. Don't forget to put the passphrase into the //sshexec// task. Don't use the passphrase if you put the //build.xml// file in CVS or SVN, because your co-workers will see your passphrase and also they won't be able to use the sshexec task unless they use the same passphrase as you. |