Tuesday, October 16, 2012

Setting up Dreamweaver CS6 with SVN + SSH

I have a customer that has website source code (mostly php) in svn. There is a tidy deployment process whereby commits to trunk are automatically deployed to the test server and tags (with a certain prefix) are automatically deployed to production. This is done using post-commit hooks.

Up until this point they have been using Eclipse to edit the website source files and commit/tag to svn. Eclipse is what we programmers are most familiar with and it worked for this website for years. However, the new web manager wanted to use Dreamweaver instead. Eclipse can be foreign and uncomfortable to a non-programmer and Dreamweaver has extra tools that she was used to. She initially started sneakily working in Dreamweaver and copying files back over to the machine where her Eclipse workspace was in order to commit and tag. That won't do at all, so I started doing research and found that Dreamweaver has svn integration built in. Great!

Except it wasn't so great. If you Google around a little you will find more than a little rumbling about the challenges that face anyone who dreams of using this feature. My problem was that despite following the official instructions to the letter, it just wasn't working. The error message, "Server and project are not accessible! (Can't create tunnel: The system cannot find the file specified.)" didn't tell me much. (Which file? Specified where?) To make matters worse, for whatever reason we only had access to CS6 on Windows. That meant working with svn and ssh on windoze, oh no!

Here are the pieces that we had installed on the windows machine:
FWIW, this machine happens to be running Windows Server edition 2008 R2.

First I wanted to get ssh working, so I tried using PuTTY. I could ssh to our svn server if I provided a password. That's a good start. I already had ssh keys set up on the svn server and so would my customer, so I wanted to figure out how to get the existing key to work on Windows. It turns out that you have to convert the key. To do this:

  1. Run PuTTYgen. 
  2. Click the "Load" button to lead an existing private key file. Enter your passphrase as needed. 
  3. Click "Save private key" to save your key as a PuTTY format private key (I called mine private.ppk)
Then you have to register this key so that you can ssh without a password. To do that, you need to run Pageant. 
  1. Run Pageant if it isn't already running. When it is running you will see it in the bottom right tray area. It looks like a little computer wearing a black hat(?) 
  2. Right click and select "View Keys".
  3. If you don't see your key there (and you won't the first time) then click the "Add Key" button. Navigate to your private.ppk key and add it.
At this point you should be able to ssh via PuTTY without having to enter your password.

At this point we thought that we might be able to connect to svn from Dreamweaver, but all attempts failed. I didn't initially get it from the official instructions that anything else is needed. But,  you need to have a SVN client installed, so we got TortiseSVN. 
One more step: Edit this file
C:\Users\[[Your User Name]]\AppData\Roaming\Subversion\config. 

In the [tunnels] section, specify where ssh client exists. This location depends on where you installed it. Open the file and enter the following within the tunnels section (underneath [tunnels])To use key-based authentication, add -i PathToKey. E.g.

ssh = $SVN_SSH C:/PathToSSHClient/tortoiseplink.exe -i PathToKey

Once you get that installed and you can checkout from svn outside of dreamweaver you are very close.

The final trick was the actual settings in Dreamweaver when setting up version control. This was the magic combination that worked:

Protocol: SVN+SSH
Server address: svn+ssh://[[Your SVN User Name]]@svn.server.domain
Repository Path: /the/path/to/your/project/in/svn/trunk

The piece that I was missing at first was the user name in the server address field. For us, it didn't work without that.

So, there you have it. Now we can checkout, check in from Dreamweaver! No more sneaking files around just to be able to use the right tool for the job.