+1 for CC.Net here. I use a combination of CC.Net and NUnit & Selenium for UI testing. CC.Net allows you to do everything you require and it's a doddle to setup.
You can write custom modules to allow you to do things such as incremenet build numbers and modify config files on the build server.
You can happily use a combination of unit tests and Selenium to test the UI using a test such as the following:
[TestFixture]
public class UITest
{
private ISelenium selenium;
private StringBuilder verificationErrors;
[SetUp]
public void SetupTest()
{
selenium = new DefaultSelenium("server", 4444, "*iexplore", "http://server/");
selenium.Start();
verificationErrors = new StringBuilder();
}
[Test]
public void TheUITest()
{
selenium.Open("/RecipeProfessor2/");
selenium.Click("btnTest");
selenium.Click("Button1");
selenium.Click("ctl00_ctl06_toolBar_Home_Solve");
selenium.Click("ctl00_ContentPlaceHolder1_chkIsLive");
selenium.WaitForPageToLoad("30000");
// etc
}
}
You can obviously add in as many tests you require for either standard unit tests or UI tests.