Subversion with Windows authentication on Server 2003

1 March 2008 00:49

Subversion is a powerful source code control repository, but getting it to authenticate using Windows users can be a mite tricky...

In this setup the aim is to have an Apache served repository allow author details to be recorded in the subversion repository (predominantly to allow you to find out who to blame) - so the setup will be simply to allow all users read access to the repository and ensure that domain authenticated users only are allowed to write to the repository.

First step is to install the Subversion repository and get it running with Apache; I find the CollabNet package really well put together (v 1.4.6 is what is used in this setup and can be obtained from http://downloads.open.collab.net/collabnet-subversion.html).  The CollabNet install is very simple just be sure to choose Apache, and make sure the repository is working unauthenticated before moving on.

Once its all running you need to download the mod_auth_sspi Apache plug in, there are various builds available, but the one I have found to be reliable is the sourceforge project available from http://sourceforge.net/projects/mod-auth-sspi.  You need to make sure you use the correct plug in version for the version of Apache, version 1.04 from the mod_auth_sspi-1.0.4-2.0.58.zip drop works with the v1.4.6 CollabNet package.  From the downloaded zip copy the mod_auth_sspi.so file into the httpd\modules in the CollabNet install directory (default is c:\program files\CollabNet Subversion Server\httpd\modules).  Then you need to edit the httpd.conf file in the CollabNet install directory http\conf (default c:\program files\CollabNet Subversion Server\httpd\conf):

Add

	LoadModule sspi_auth_module modules/mod_auth_sspi.so

after the mod_auth.so load:

	LoadModule auth_module modules/mod_auth.so

then add

	LoadModule authz_svn_module modules/mod_authz_svn.so

 

after the mod_dav_svn.so load:

 

	LoadModule dav_svn_module modules/mod_dav_svn.so

Finally add

	
	# authentication	
	AuthName "Subversion Authentication"	
	AuthType SSPI	SSPIAuth On	
	SSPIAuthoritative On	
	SSPIDomain DOMAIN.COMPANY.COM	
	SSPIOfferBasic On	
	SSPIOmitDomain On 	
	SSPIUsernameCase upper	
	<LimitExcept GET PROPFIND OPTIONS REPORT>		
		Require valid-user	
	</LimitExcept>

within the <Location> tag at the end of the file following the location defaults

	DAV svn	SVNParentPath C:/svn_repository

The settings are in the main self explanatory, AuthType SSPI is fairly obvious as are SSPIAuth and SSPIAuthoritative (turning it on).  The SSPIDomain define the domain to authenticate against, and must be the full domain name.  The SSPIOfferBasic, SSPIOmitDomain and SSPIUsernameCase settings ensure the user is correctly prompted for authentication when requesting an operation other than the basic read ones listed in LimitExcept. 

There are ways to finely control access rights at all levels of the repository - but frankly I find the simplest configuration of recording the user who made the change rather than locking down easiest to manage in the long run.

After making the config changes restart the Apache server in the services.msc control panel plug in.  If it starts then you have done everything and just need to make sure that authentication details are recorded when you make repository changes (if you are using TortoiseSVN don't try this test using the repository browser to create folders it just doesn't request the authentication!).  If the service doesn't start then you have to start trial and error!  My recommendation would be to add the config items piece by piece in the order listed above checking the Apache logs as you go.  The authentication block is usually the tricky bit, again commenting out the salient bits (like SSPIDomain and LimitExcept) until the service starts.

Once you are at this point you can start additional configuration as required to more finely control access to the repository - however now is when I normally leave it...



Getting started with CruiseControl.NET and Subversion

13 February 2008 13:34

The mini tutorial is designed to show how easy it is to get started with CruiseControl.NET . The aim will be to get a continuous integration build of a Visual Studio 2005 solution including nUnit unit tests running as quickly as possible using Subversion as the source control provider.

As ever the first step is to download it - the version used with this is CruiseControl.NET 1.3, which can be downloaded from:

http://sourceforge.net/project/showfiles.php?group_id=71179&package_id=83198&release_id=517823

Grab the CruiseControl.NET-1.3-Setup.exe and CruiseControl.NET-CCTray-1.3-Setup.exe setup kits.

Run the CruiseControl.NET-1.3-Setup.exe installation on the build server - the install is really basic.  Install all the components (CruiseControl.NET Server,Web Dashbord and Examples) make sure to Install CC.NET as Service and also Create Virtual Directory for the Web Dashboard.

While you are downloading and installing grab the XML logger from:

http://ccnetlive.thoughtworks.com/MSBuildXmlLogger-Builds/

Copy the logger binary (ThoughtWorks.CruiseControl.MSBuild.dll) to the CruiseControl.NET install dierctory (by default C:\Program Files\CruiseControl.NET\server).

Now to configuration, starting with the server...

On the build server checkout a working copy of the Visual Studio 2005 solution to somewhere sensible.  You need to make sure that the build works using MSBuild.exe.  Tghis is best done from the command line - if you don't know msbuild.exe is in C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727 and command line to test will be:

	msbuild path to solution file /t:Clean /p:Configuration=Debug
	

Make sure the build is successful before moving on!

Now you configure the CruiseControl.NET server...

Open the ccnet.config file found in the server install directory which by default is C:\Program Files\CruiseControl.NET\server.  You are going to create a basic project entry to get tested and running.

<project name="Basic Project">

 

 

      <sourcecontrol type="svn">

 

 

            <trunkUrl>url to solution directory in subversion</trunkUrl>

 

 

            <workingDirectory>solution working directory</workingDirectory>

 

 

            <executable>C:\Program Files\CollabNet Subversion Server\svn.exe</executable>

 

 

      </sourcecontrol>

 

 

      <triggers>

 

 

            <intervalTrigger seconds="60" />

 

 

      </triggers>

 

 

      <tasks>

 

 

            <msbuild>

 

 

                  <executable>C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\MSBuild.exe</executable>

 

 

                  <workingDirectory>solution working directory</workingDirectory>

 

 

                  <projectFile>solution file name</projectFile>

 

 

                  <buildArgs>/p:Configuration=Debug /v:diag</buildArgs>

 

 

                  <targets>Build</targets>

 

 

                  <timeout>15</timeout>

 

 

                  <logger>C:\Program Files\CruiseControl.NET\server\ThoughtWorks.CruiseControl.MSBuild.dll</logger>

 

 

            </msbuild>

 

 

      </tasks>

 

 

</project>

 

 

 

 

 

Some points to note in the basic settings above; the sourcecontrol trunkUrl element is the subversion url to the solution, and working directory both in source control and msbuild task are to the local check out directory.  The msbuild element also has the solution file name and paths to the msbuild exe and the logger we downloaded earlier.  The trigger is what fires the build, in this case every minute (if there have been committed changes) the build will run.

The logger is referenced from the copied location, you can exclude the logger path, but you would need to put the logger dll in each project working folder.

 

Next step is to get the CruiseControl build running using the ccnet.exe (default location C:\Program Files\CruiseControl.NET\server) from the command line:

	ccnet.exe -project:"project name"

All being well (basically if you haven't set anything wrong in the ccnet.config) this should also successfully build.  If not you need to tweak until it does.

So finally to get the unit test running....

The simplest way to get nUnit tests running is to use the nunit task which you configure in the ccnet.config file after the msbuild.  The following is the basic config:

<nunit>

 

      <path>C:\Program Files\NUnit 2.4.3\bin\nunit-console.exe</path>

 

      <assemblies>

 

            <assembly>path to unit test binary</assembly>

 

      </assemblies>

 

</nunit>

 

 

So nothing complex here - the path is the path to the nunit-console.exe, and for each unit test assembly add a full path to the output binary.  Again make sure everything works with the ccnet.exe from the command line, make sure the unit tests pass too, tweaking as needed to get running.   Once its all running smooth then you can start the CruiseControl.NET service.

Finally to monitor the state of the build from the development client, install the CCTray application from the CruiseControl.NET-CCTray-1.3-Setup.exe on each development machine - again a really basic installer.

Following install run cctray and in the File Settings menu select the Build Projects tab and add a Build Server.  You have choices as to which way to monitor the build, I suggest using the "Connect directly using .NET remoting" option supplying server name of the build server - even though the install recommends against this this is the only option which will support the force build option, allowing you to demand a build from the development client.

You will be displayed a list of available project(s), select the available project to monitor - you now have a nice system tray notification showing status of your CI build...

If you want to know more there is plenty to read http://confluence.public.thoughtworks.org/display/CCNET/Welcome+to+CruiseControl.NET.



TortoiseSVN and DiffMerge

12 December 2007 11:48

I have used subversion as a source control repository for some time (without getting into the religious argument - I find it does the job really well); and recently I have started to use the DiffMerge tool from SourceGear (http://www.sourcegear.com/diffmerge/index.html).  I know there are loads of tools out there, I have found that this one does a reasonable job of just about everything (that's pretty much why I use it!).  I particularly like the implementation of the three file view for conflict resolution.

conflict

It doesn't take too much setting up to use with TortoiseSVN.  Open the Settings dialog from the TortoiseSVN Settings menu.

settings

In the External Programs section select Diff Viewer and select the External radio and supply the command line argument:

path\DiffMerge.exe /t1=Mine /t2=Original %mine %base

Make sure you supply a valid path to the installed DiffMerge product! When displaying changes this will display your version changes in the left panel with base in the right. 

To get the three panel merge select the Merge Tool in the External Programs section, and as before select the External radio and supply the following command line argument:

path\DiffMerge.exe /t1=Mine /t2=Base /t3=Theirs /r=%merged %mine %base %theirs

This will display three columns with your version, followed by the base version followed by the repository version - allowing you to merge changes from both sides into the centre at your leisure...



Powered by BlogEngine.NET 1.1.2.9

Calendar

<<  May 2013  >>
MoTuWeThFrSaSu
293012345
6789101112
13141516171819
20212223242526
272829303112
3456789

View posts in large calendar

Search

Disclaimer

The opinions expressed in this blog are my own personal opinions and (for legal reasons) are not necessarily the views of anyone else (probably in the world) and particularly my employer!

Sign in

E-mail me Send mail

© Copyright 2013