Continuous Integration for.net Development

Size: px
Start display at page:

Download "Continuous Integration for.net Development"

Transcription

1 Continuous Integration for.net Development Craig Berntson 3925 South 700 West #22 Murray, UT Voice: Contents Continuous Integration is a method where source code is continually built and tested, resulting in better quality applications in less time. While Visual Studio Team System gives you the tools you need to do continuous integration, the cost is prohibitive to most shops. This whitepaper discusses free tools that allow you to integrate continuous integration into your.net development.

2 A Case for Continuous Integration Software is increasingly becoming more complex, requiring more parts to make it all work. This complexity comes at a cost to the development team, in terms of time needed to test and integrate the different components, ensure the code meets good coding standards, create the install set, and more. How many of the following problems have you heard: The software doesn t work on the customer s machine and the developer can t reproduce the error You don t know when the software will be ready to ship because integration is taking longer than expected. You are unable to recreate your database quickly during development or it is difficult to make changes Defects are discovered late in the development process, delaying release of the application Members of the development team don t know the current state of the software Quality of the software is low because coding or architectural standards weren t followed or because code has been duplicated Wouldn t it be great if you could reduce the possibilities of these and more issues? Wouldn t it be even better if you could automate the process that does that? You can reduce quality issues in an automated fashion. It s called Continuous Integration. What is Continuous Integration? Continuous Integration is a software development practice where members of a team integrate their work frequently, usually each person integrates at least daily - leading to multiple integrations per day. Each integration is verified by an automated build (including test) to detect integration errors as quickly as possible. Many teams find that this approach leads to significantly reduced integration problems and allows a team to develop cohesive software more rapidly. Martin Fowler ( In his book, Continuous Integration, Paul Duvall states, CI is the embodiment of tactics that gives us, as software developers, the ability to make changes in our code, knowing that if we break software, we ll receive immediate feedback...[it is] the centerpiece of software development, as it ensures the health of software through running a build with every change. Continuous Integration affects every member of the development team. It isn t just a practice adopted by the build manager. Simply put, Continuous Integration (CI) is a process that helps ensure quality software. Notice I didn t say guarantee because as we know, there is no such thing as bug-free software. A typical CI process works like this: 1. The developer builds the software on his local PC and then runs unit tests on it. 2. After the code passes all the unit tests, the source is checked in to a source code repository. 3. An automated system on the CI Server detects that changes have been made in the repository and gets a copy of the code to its local system. 4. The CI Server builds the software and then runs unit tests. 5. The results of the build and unit tests are automatically posted to a web site where all team members can see the current state of the software. 2

3 The above steps are the minimum that you do under your CI system. Other things that can be done include: Produce developer documentation of the system. This can be in the form of help files, UML diagrams, and more. Run code metrics on the source that indicate code coverage, adherence to standards, amount of duplicated code, and more. Produce an install set by calling programs such as InstallShield Call external, sophisticated testing applications to do functional testing Burn a CD or DVD that contains the release bits of the application This list is not exhaustive as CI is really all about the process and team notification. Just about any part of the development process that can be automated can be included in continuous integration. CI adds value to your process by: Reducing risks When you integrate several times a day, defects are detected and fixed sooner. If you wait a few days for a QA person to test your software, you may forget what you were doing when you wrote it, increasing the amount of time to fix the issue while also increasing the chances of introducing additional bugs. Reduce Repetitive Processes Continuous Integration ensures that processes are run the same way every time. This also increases the quality of the application as you know that manual steps are skipped. Generate Deployable Software Because the software is always tested, you know that you can build and deploy at anytime. If there are problems with a build, the team is notified immediately and the fix can be made right then. Enable Better Project Visibility By providing testing and metrics, you can make more effective decisions and see trends in the development process Establish Greater Product Confidence Because the software is always tested and kept in a deployable state, you know that there is a high probability that the user will not find bugs. When you first begin to setup a CI system in your company, some team members will fight it. After all, it is a change to the way they are doing things and people do not like change. Some arguments against CI include: Increased overhead to maintain the CI system At the beginning, there will be some increased overhead to do this, but over a short period of time, the CI system will actually save considerable time. 3

4 Too much change Don t try to implement everything at once. When you first setup your CI system, you may start with doing daily builds. Technically, this isn t continuous integration. To do CI effectively, you need to concentrate on the continuous part, meaning that builds are made often. But by gradually adding pieces to the process, team members are more likely to adopt it. Additional hardware/software costs Our first CI system used free software running on six year old laptop. It worked fine to get us started. Developers should be performing these activities Yes, many of these activities can be done by the developers, but by automating parts of the process, the developers become more effective in writing solid code while the automated system can perform more tasks in a shorter time than a person. Paul Duvall identifies seven practices that teams should follow when using CI: Commit code frequently Don t commit broken code Fix broken builds immediately Write automated developer tests All tests and inspections must pass Run private builds (each developer runs tests on their own code) Avoid getting broken code (don t check out broken code) At a minimum, a CI system consists of five software components: source control, software build tools (ie compiler), unit testing tools, CI server software, and web-based reporting mechanisms. A dedicated PC should be setup as the build box or integration server. These parts and other optional components are discussed in the following sections. Project Organization One of the keys to a successful CI process is organizing your project directory structure so that the source, tools, assemblies, artifacts, and other files can be found. Each developer will need to organize their development the same way. The files will also be laid down the same way on the build box when checked out of source control. The following figure is a representation of how we setup our project. The Visual Studio solution file (.sln) is placed in the Source folder. Each CSharp project (.csproj) file goes in its respective project folder. Lib is used to store third party assemblies. Assemblies and other files that will be distributed to end users are copied into the Install folder by the build process. I will discuss code metrics and documentation later in this document. 4

5 Source Control For years, you ve heard the importance of using source control for your code. I won t say much about source control except that even in a one-man shop, source control should be at the top of your list of must have tools. To get there, you have many options. One very popular free source control system is Subversion. Don t forget the Tortoise client tools that integrate with Windows Explorer. My team at work uses Telelogic Synergy CM for older projects, but have moved new development to Subversion. We also have a team in Maryland that is using PerForce, so we may have to integrate that too. For my personal work, I use SourceGear Vault, which is free for one user. I will use Vault for examples in this session. Tools discussed in this section Tool Subversion Tortoise SourceGear Vault Download URL The Build Box All the work of automating the build happens on the build box. Some people call this the Continuous Integration (CI) Server. The build box is a PC dedicated just for doing the build. It doesn t have to be the latest hardware, just something that can get the job done. When I started working with CI, my first build box was a six year old Gateway laptop with 512M RAM and a 30 Gig hard drive running Windows XP Pro. It also ran IIS to serve as our build 5

6 reporting server, but you can user a different server box for reporting if you want. We currently have plans to use a virtual partition on one of our development servers as a build box and expect to implement it next year. The first things to install on the build box are the client tools for your source code control software. As a best practice you should not use your source control server as the build box. This is because the source files will be checked out and copied to a work area on the build box. Should the source control server fail, you can always get the latest version from the build box. You will need to install your source control client software, the.net Framework, and all third party controls, assemblies that you are using in your project, and anything else needed to produce a build beginning to end. Once all this is installed, you should use your source control client software to check out the source code to make sure you can access the source control server and database. While we re on the subject of a build box, this is a good time to talk about what makes up a build. Under CI, a build is really more than a simple compile of the source code. A build is everything that needs to be done to get the application out the door from compiling and testing the code to creating the install bits. You won t always want to create install bits so you may only do parts of the build. Here s what we currently do: Incremental Build Compile code, run unit tests Daily Build Clean, compile code, run unit tests, generate code metrics, results to the development team Weekly Build Clean, compile code, run unit tests, generate code metrics, produce developer documentation, the results to the development team The incremental build should run as quickly as possible, preferably in less than 10 minutes. Other builds become more complex and do things such as delete assemblies from the previous build, a process called Clean, to generating code metrics, documentation, and more sophisticated tests. As we are currently in the early stages of developing the foundation framework, there aren t any more tasks to perform than what I ve listed. However, we anticipate in the future that we ll add automated functional testing, InstallShield integration, additional code metrics, and more. Cruise Control Key to getting CI working is a tool that can automate checkouts, handle the build, testing, statistics, reporting, and other needs. The primary tool used is CruiseControl.Net (CCNet), created by ThoughtWorks (Martin Fowler s company). While CCNet doesn t handle everything in CI, it does have the ability to call other tools to do the work. You will install CCNet on the build box. CCNet consists of four main components: CCNet.exe The CruiseControl.Net console application. Use this tool to get CCNet up and running and to trouble shoot issues. Results are displayed in a console window so it s easy to see what s going on. CCService.exe The CCNet Windows service. This is the executable that you will normally run in production. It has the same functionality as CCNet.exe, but does not have any display capabilities. WebDashBoard A web-based tool that provides reporting of build status and allows particular projects to be built on-demand. We run IIS on our build box for the web server, but you can use another server if desired. CCTray A small application that installs in the system tray of the development PCs and allows the team to easily monitor the status of any build. I had one problem when installing CCNet. The install program setup the WebDashBoard to use ASP.Net 1.1. I had to change the web site to use ASP.Net 2.0 in the IIS Admin tool. 6

7 CruiseControl.Net supports over a dozen source control products out of the box. I had no problems getting it to work with Subversion and Telelogic Synergy CM, nor SourceGear Vault. My examples in this document all use Vault. CCNet does its magic through an XML configuration file named CCNet.config. Start your configuration with something simple. Just get CCNet running. A bare-bones config file should work for you: <cruisecontrol> <project name="math"> <weburl> <artifactdirectory>c:\ci\artifacts\math\artifacts</artifactdirectory> </project> </cruisecontrol> The project name is required. This uniquely identifies each project running under CCNet and is the name displayed on the web server build report. The location of the web server is specified by the weburl tag. It does not have to be local, so you can put the build results on another server if you already have one running. The artifact directory is where CCNet output is placed. I found it convenient to store CCNet output separate from the actual source code. Complete documentation is installed with CCNet and is also available on the CCNet web site. Now test that you have things working. Save the CCNet.config file. From a command window, navigate to the C:\Program Files\CruiseControl.Net\Server folder, then run CCNet. If all is working, you won t get an error. In actual production, you will want to run the CCNet service. The advantage of running the console application is that you get feedback on errors. The next thing you want to do is hook up source control to CCNet. The specific tags you need are listed in the CCNet documentation and vary from one source control provider to another. However, for the supported providers, CCNet knows how to call the local client to check out the source. <cruisecontrol> <project name="math"> <weburl> <artifactdirectory>c:\ci\artifacts\math\artifacts</artifactdirectory> <sourcecontrol type="vault" autogetsource="true"> <executable>c:\program files\sourcegear\vault client\vault.exe</executable> <host>localhost</host> <username>admin</username> <password>mypass</password> <repository>math</repository> <folder>$</folder> <workingdirectory>c:\ci\math</workingdirectory> </sourcecontrol> </project> </cruisecontrol> The sourcecontrol tag specifies the provider, in this case Vault. Executable tells CCNet where the client executable is located. Host is the Vault host server. Repository and folder specify where the source is saved in Vault. WorkingDirectory is where the source should be placed when it is checked out. Note that the code is placed in it s own folder to separate out each project. To test that source control checkout is working, again save the CCNet.config file and run the CCNet Console application. Launch your browser and navigate to The CCNet Dashboard is displayed. Note that if you get an error, you probably didn t start the CCNet console application. 7

8 Each project setup in CCNet will be displayed. Click the Force button next to the Math project to force the CI process to start. Switch over to the CCNet console window to see if there are any errors. If all goes well, you can navigate back to the Dashboard and click Refresh Status. Now click on the project name, in this case Math. A Project Report is displayed. 8

9 Now click on either Latest Build or here link to display the results of the latest build. This report lists all the changes made to the source code since the last build. On the left is a series of links to get reports from additional tools that can be added to the CI process. You should be getting some idea now that the Dashboard is a powerful tool to get a quick idea of what happened not only in the latest build, but CCNet also keeps track of all previous builds. It does this by storing the XML output of each build in its own folder, then displaying those files in the dashboard. 9

10 Now click on View Build Log. This gives more detail of what happened in the build. It s shown here as XML because we haven t applied an XSLT style sheet to the output yet. This is another thing on the to do list that we will be getting to soon. 10

11 CCNet also has the ability to send other types of notification based on the results of the build. For example, you can have and sent if an incremental build fails and a text message if the daily or weekly build fails. While you can send an with every build, it is recommended that you only send an on failure. Here are the changes to the CCNet.config file. <cruisecontrol> <project name="math"> <weburl> <artifactdirectory>c:\ci\artifacts\math\artifacts</artifactdirectory> <sourcecontrol type="vault" autogetsource="true"> <executable>c:\program files\sourcegear\vault client\vault.exe</executable> <host>localhost</host> <username>admin</username> <password>mypass</password> <repository>math</repository> <folder>$</folder> <workingdirectory>c:\ci\math</workingdirectory> </sourcecontrol> <publishers> <statistics /> <xmllogger /> < from="ciserver@craigberntson.com" mailhost="local" includedetails="true"> <users> <user name="craig" group="cimanagers" address="craig@craigberntson.com" /> </users> <groups> <group name="cimanagers" notification="failed" /> </groups> </ > </publishers> </project> </cruisecontrol> In this example, an is sent to each member of the cimanagers group whenever the build fails. Tools discussed in this section Tool CruiseControl.Net Download URL MSBuild There are two primary tools you can use to do the actual build of the solution, MSBuild and NAnt. Many people are using NAnt, but my informal research showed MSBuild is gaining supporters. It is also the tool used by Visual Studio when you click Build. Finally, MSBuild is installed with the.net runtime, which NAnt needs to do the build anyway. By just calling MSBuild directly and not using NAnt, I found I had one less piece of software and one less possible failure point. The CSharp and VB compilers are also part of the free.net runtime. You will not need to install Visual Studio on the build box. In fact, if you do, you may need to purchase an additional Visual Studio license. In order to use MSBuild effectively with CCNet, additional add-ons are required. The first, an XML logger, is a.net assembly that takes the XML file generated by MSBuild and formats it for display on the CCNet web server. Thoughtworks provides an assembly for this, but an improved logger by Christian Rodemeyer is available. The web page where you download this plugin also tells you to get new.xsl and.css files that are compatible with the plugin. 11

12 You will also need to change CCNet s dashboard.config file. All this is documented on the download page. MSBuild uses your.net project and solution files to determine what to build. It s easier to start with using the solution file directly, but doesn t give you as much control over the build process. <cruisecontrol> <project name="math"> <weburl> <artifactdirectory>c:\ci\artifacts\math</artifactdirectory> <sourcecontrol type="vault" autogetsource="true"> <executable>c:\program files\sourcegear\vault client\vault.exe</executable> <host>localhost</host> <username>admin</username> <password>mypass</password> <repository>math</repository> <folder>$</folder> <workingdirectory>c:\ci\math</workingdirectory> </sourcecontrol> <tasks> <msbuild> <executable>c:\windows\microsoft.net\framework\v \msbuild.exe</executable> <workingdirectory>c:\ci\math\math</workingdirectory> <projectfile>c:\ci\math\math\source\math.sln</projectfile> <buildargs>/noconsolelogger /p:configuration=debug</buildargs> <targets></targets> <timeout>15</timeout> <logger>c:\program Files\CruiseControl.NET\server\Rodemeyer.MSBuildToCCNet.dll</logger> </msbuild> </tasks> <publishers> <statistics /> <xmllogger /> < from="ciserver@craigberntson.com" mailhost="local" includedetails="true"> <users> <user name="craig" group="cimanagers" address="craig@craigberntson.com" /> </users> <groups> <group name="cimanagers" notification="failed" /> </groups> </ > </publishers> </project> </cruisecontrol> This version of the Ccnet.config file has added a tasks section. Tasks are action elements. Anything you want CCNet to do is put inside a task. You can have multiple tasks per project. Each will run in sequential order until either there are no more tasks to run or one fails. This task has one thing to do, run MSBuild. A path MSBuild is provided along with the directory where the source code is located and the name of the project file to run. Here, I run the Solution file directly instead of the project files. Buildargs are passed on the command line to MSBuild to tell it what to do. The timeout tag tells CCNet the number of seconds to wait before assuming MSBuild has hung and it should be terminated. Finally, the logger tag tells CCNet what logging assembly to use for the build results. We can gain more control over MSBuild through the use of an MSBuild project file. This is an XML file, typically with a.proj extension. For our example project, we ll use Math.proj. The build project file should go in the same folder as the Visual Studio Solution file for your application. This means that it becomes part of the checked in source code. Ideally, each developer will use this same project file to do their own builds. 12

13 The third party tool, MSBuild Sidekick may make it easier for you to edit the build project file. However, it requires you know something about what you want to do and the namespaces needed. I found it easier to just write the XML as I got started, but can see the usefulness of the tool. First, a couple of changes are needed to the ccnet.config file. <cruisecontrol> <project name="math"> <weburl> <artifactdirectory>c:\ci\artifacts\math</artifactdirectory> <sourcecontrol type="vault" autogetsource="true"> <executable>c:\program files\sourcegear\vault client\vault.exe</executable> <host>localhost</host> <username>admin</username> <password>mypass</password> <repository>math</repository> <folder>$</folder> <workingdirectory>c:\ci\math</workingdirectory> </sourcecontrol> <tasks> <msbuild> <executable>c:\windows\microsoft.net\framework\v \msbuild.exe</executable> <workingdirectory>c:\ci\math\math</workingdirectory> <projectfile>c:\ci\math\math\source\math.proj</projectfile> <buildargs>/noconsolelogger /p:configuration=debug</buildargs> <targets>dailybuild</targets> <timeout>15</timeout> <logger>c:\program Files\CruiseControl.NET\server\Rodemeyer.MSBuildToCCNet.dll</logger> 13

14 </msbuild> </tasks> <publishers> <statistics /> <xmllogger /> < mailhost="local" includedetails="true"> <users> <user name="craig" group="cimanagers" /> </users> <groups> <group name="cimanagers" notification="failed" /> </groups> </ > </publishers> </project> </cruisecontrol> First, the projectfile name is changed to use Math.proj. A target is also added. Targets are names of sections in the build file. By specifying the target here, MSBuild is directed to perform the actions specified in the DailyBuild target. Here is the Math.proj file. <Project DefaultTargets="BuildCode" xmlns=" <Import Project="$(MSBuildExtensionsPath) \MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets" /> <!-- ASCII Constants used for Message output --> <PropertyGroup> <NEW_LINE>%0D%0A</NEW_LINE> <TAB>%09</TAB> <DOUBLE_QUOTES>%22</DOUBLE_QUOTES> <SPACE>%20</SPACE> </PropertyGroup> <!-- Solution Files--> <PropertyGroup> <SolutionName>math.sln</SolutionName> </PropertyGroup> <Target Name="GetProjects"> <!-- Get all projects in the solution --> <GetSolutionProjects Solution="$(SolutionName)"> <Output TaskParameter="Output" ItemName = "SolutionProjects" /> </GetSolutionProjects> <!-- Filter out solution folders and non.csproj items --> <RegExMatch Input="@(SolutionProjects)" Expression=".[\.]csproj$"> <Output TaskParameter="Output" ItemName = "Projects" /> </RegExMatch> <!-- Add Code folder to all solution project paths --> <RegexReplace Input="@(Projects)" Expression="(math.*)\\" Replacement="Code\$1\\" Count="-1"> <Output TaskParameter="Output" ItemName="CSProjects" /> </RegexReplace> <!-- Resolve test projects --> <RegexMatch Input="@(CSProjects)" Expression=".[\.](Test Testing UnitTest IntegrationTest).*[\.]csproj$"> <Output TaskParameter="Output" ItemName="TestProjects" /> </RegexMatch> <!-- Resolve the code projects --> <CreateItem Include="@(CSProjects)" Exclude="@(TestProjects)"> <Output TaskParameter="Include" ItemName="CodeProjects"/> </CreateItem> 14

15 <Message Text="$(NEW_LINE)Resolved the following solution projects:" Importance="high" /> <Message >'%(RelativeDir)%(FileName)%(Extension)', '$(NEW_LINE)$(TAB)')" Importance="high"/> <Message >'%(RelativeDir)%(FileName)%(Extension)', '$(NEW_LINE)$(TAB)')" Importance="high"/> <Target Name="BuildCode" DependsOnTargets="GetProjects"> <Message Text="Target BuildCode" /> <MSBuild <Output TaskParameter="TargetOutputs" ItemName="CodeAssemblies"/> </MSBuild> <Target Name="CleanCode" DependsOnTargets="GetProjects"> <Message Text="Target CleanCode" /> @(CodeProjects->'%(RelativeDir)obj\*\*.dll'); <Output TaskParameter="Include" ItemName="SolutionOutput" /> </CreateItem> <Delete /> <Target Name="CleanTests" DependsOnTargets="CleanCode"> <Message Text="Target CleanTests" /> @(TestProjects->'%(RelativeDir)obj\*\*.dll'); <Output TaskParameter="Include" ItemName="SolutionOutput" /> </CreateItem> <Delete /> <Target Name="IncrementalBuild" DependsOnTargets="BuildCode"> <Message Text="Target Incremental" /> <Target Name="DailyBuild" DependsOnTargets="CleanTests;BuildCode"> <Message Text="Target DailyFramework" /> <Target Name="WeeklyBuild" DependsOnTargets="CleanTests;BuildCode"> <Message Text="Target Incremental" /> </Project> Wow.. there s a lot going on here. It might help to walk through the file in the order things are processed. First, a default Target is specified. If no target is passed to MSBuild, this is the target that is executed. However, we used the DailyBuild target. 15

16 Next, another project is imported. MSBuild contains a number of targets that do specific things in the build. The specified assembly adds additional targets that we need in the example. You can download the assembly from links at the end of this section. The PropertyGroup sections are processed next. Think of these as setting up variables. Now MSBuild looks for the target that CCNet passed to it on the command line, that is DailyBuild. The DailyBuild target depends on two other targets, CleanTests and BuildCode. It will run each of these in order before running any tasks specific to the target. So, MSBuild looks first for the CleanTests target. CleanTests depends on CleanCode, which depends on GetProjects. The GetProjects target opens the Solution file and iterates through each project listed and stores the name of each project in one of two collections, the first is a list of code projects, the second a list of test projects. Control is then returned to CleanCode, which gets a list of all generated code files from the previous build, then deletes them. Then, CleanTests is run, which deletes the generated test files. Control now returns to the DailyBuild target to find the next DependsOnTargets entry, which is BuildCode. BuildCode depends on GetProjects, but because it was already run, it isn t run again and processing continues on the current target, BuildCode. Here, a list of projects to build is created and the actual build occurs. Finally, control is return to DailyBuild and a message is added to the output file, or displayed on screen, depending on how it is run. Other targets, IncrementalBuild and WeeklyBuild are also supplied. As you are setting up the build project file, I suggest you run MSBuild from the command line in the Visual Studio Command Prompt. This will help you track down errors because they will be displayed on the screen. Once the build project is working, start calling it from CCNet. Tools discussed in this section Tool MSBuild NAnt Rodemeyer.MsBuildToC CNet.dll msbuild2ccnet.xsl cruisecontrol.css MSBuild Sidekick MSBuild Community Tasks Download URL Installs with the.net runtime d+msbuild+integration Unit Testing If the build was successful, it s time to run unit tests. Unit tests should be run on each build to help ensure the code functions properly. Hopefully, each developer ran their own targeted tests before checking in their code. But in Continuous Integration, all unit tests should be run. I will not discuss how to write unit tests or Test Driven Development as these are topics for an entire session and there is lots of information available that discusses them. 16

17 The primary tool used for unit testing in.net is NUnit. Visual Studio 2005 Team Suite has its own unit testing, but most shops can t afford the increased price of Team Suite. In Visual Studio 2008, Microsoft has pushed unit testing down into the Professional edition, but I think people who have been using NUnit will continue to do so rather than convert their tests. I use NUnit in this session. You should install NUnit on the CI Server. MSBuild will run the unit tests. Here is the updated Math.proj file. <Project DefaultTargets="BuildCode" xmlns=" <Import Project="$(MSBuildExtensionsPath) \MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets" /> <!-- ASCII Constants used for Message output --> <PropertyGroup> <NEW_LINE>%0D%0A</NEW_LINE> <TAB>%09</TAB> <DOUBLE_QUOTES>%22</DOUBLE_QUOTES> <SPACE>%20</SPACE> </PropertyGroup> <!-- Solution Files--> <PropertyGroup> <SolutionName>math.sln</SolutionName> </PropertyGroup> <!-- 3rd Party Program Settings --> <PropertyGroup> <NUnitExe>"C:\Program Files\NUnit 2.4.3\bin\nunit-console.exe"</NUnitExe> <NUnitArgs>/nologo /xml:c:/ci/artifacts/math/unittest-results.xml</nunitargs> <NUnitFile>TestResult.xml</NUnitFile> </PropertyGroup> <Target Name="GetProjects"> <!-- Get all projects in the solution --> <GetSolutionProjects Solution="$(SolutionName)"> <Output TaskParameter="Output" ItemName = "SolutionProjects" /> </GetSolutionProjects> <!-- Filter out solution folders and non.csproj items --> <RegExMatch Input="@(SolutionProjects)" Expression=".[\.]csproj$"> <Output TaskParameter="Output" ItemName = "Projects" /> </RegExMatch> <!-- Add Code folder to all solution project paths --> <RegexReplace Input="@(Projects)" Expression="(math.*)\\" Replacement="Code\$1\\" Count="-1"> <Output TaskParameter="Output" ItemName="CSProjects" /> </RegexReplace> <!-- Resolve test projects --> <RegexMatch Input="@(Projects)" Expression="(MathTest).*[\.]csproj$"> <Output TaskParameter="Output" ItemName="TestProjects" /> </RegexMatch> <!-- Resolve the code projects --> <CreateItem Include="@(CSProjects)" Exclude="@(TestProjects)"> <Output TaskParameter="Include" ItemName="CodeProjects"/> </CreateItem> <Message Text="$(NEW_LINE)Resolved the following solution projects:" Importance="high" /> <Message Text="CodeProjects:$(NEW_LINE)$(TAB)@(CodeProjects->'%(RelativeDir)%(FileName)%(Extension)', '$(NEW_LINE)$(TAB)')" Importance="high"/> <Message Text="TestProjects:$(NEW_LINE)$(TAB)@(TestProjects->'%(RelativeDir)%(FileName)%(Extension)', '$(NEW_LINE)$(TAB)')" Importance="high"/> <Target Name="BuildCode" DependsOnTargets="GetProjects"> <Message Text="Target BuildCode" /> 17

18 <MSBuild <Output TaskParameter="TargetOutputs" ItemName="CodeAssemblies"/> </MSBuild> <Target Name="TestCode" DependsOnTargets="BuildCode"> <Message Text = "Target TestCode" /> <MSBuild Projects="@(TestProjects)"> <Output TaskParameter="TargetOutputs" ItemName="TestAssemblies"/> </MSBuild> <Exec ContinueOnError='true' Command='$(NUnitEXE) <Target Name="CleanCode" DependsOnTargets="GetProjects"> <Message Text="Target CleanCode" /> <CreateItem @(CodeProjects->'%(RelativeDir)obj\*\*.dll'); <Output TaskParameter="Include" ItemName="SolutionOutput" /> </CreateItem> <Delete Files="@(SolutionOutput)" /> <Target Name="CleanTests" DependsOnTargets="CleanCode"> <Message Text="Target CleanTests" /> <CreateItem @(TestProjects->'%(RelativeDir)obj\*\*.dll'); <Output TaskParameter="Include" ItemName="SolutionOutput" /> </CreateItem> <Delete Files="@(SolutionOutput)" /> <Target Name="IncrementalBuild" DependsOnTargets="BuildCode;TestCode"> <Message Text="Target Incremental" /> <Target Name="DailyBuild" DependsOnTargets="CleanTests;BuildCode;TestCode"> <Message Text="Target DailyFramework" /> <Target Name="WeeklyBuild" DependsOnTargets="CleanTests;BuildCode;TestCode"> <Message Text="Target Incremental" /> </Project> First, a PropertyGroup is setup to hold information about NUnit. Then in the TestCode task, all test projects are collected so each can be run. They are then passed to NUnit as command line parameters. Results are saved to an XML file. Finally, an additional task is added to each of the build targets. The TestCode task will not execute unless BuildCode completes successfully. 18

19 We also need to change the ccnet.config file so that it incorporates the xml results file produced by NUnit. Here is the updated file. <cruisecontrol> <project name="math"> <weburl> <artifactdirectory>c:\ci\artifacts\math</artifactdirectory> <sourcecontrol type="vault" autogetsource="true"> <executable>c:\program files\sourcegear\vault client\vault.exe</executable> <host>localhost</host> <username>admin</username> <password>mypass</password> <repository>math</repository> <folder>$</folder> <workingdirectory>c:\ci\math</workingdirectory> </sourcecontrol> <tasks> <msbuild> <executable>c:\windows\microsoft.net\framework\v \msbuild.exe</executable> <workingdirectory>c:\ci\math\math</workingdirectory> <projectfile>c:\ci\math\math\source\math.proj</projectfile> <buildargs>/noconsolelogger /p:configuration=debug</buildargs> <targets>dailybuild</targets> <timeout>15</timeout> <logger>c:\program Files\CruiseControl.NET\server\Rodemeyer.MSBuildToCCNet.dll</logger> </msbuild> </tasks> <publishers> <merge> <files> <file>c:\ci\artifacts\math\unittest-results.xml</file> </files> </merge> <statistics /> <xmllogger /> < mailhost="local" includedetails="true"> <users> <user name="craig" group="cimanagers" /> </users> <groups> <group name="cimanagers" notification="failed" /> </groups> </ > </publishers> </project> </cruisecontrol> The change here is in addition of a merge files section. We only need to specify the fully qualified file name of the NUnit results file for it to be included. Once you ve added that, the information is available in the CCNet Dashboard. The first figure shows a results summary when you drill down to the Build Report. 19

20 Drilling into NUnit Details gives the following result. And finally, NUnit Timings results in this screen in CCNet Dashboard. 20

21 Tools discussed in this section Tool NUnit Download URL Code Metrics There are many ways to get code metrics. You can run coverage tools, fitness tests, check for refactoring needs and code duplication. Even nunit gives some code metrics as you saw in the previous section. One code metric you can also run is to check how your code conforms to known coding standards. Microsoft provides FxCop to do this. As with NUnit, you can run the tool interactively or via a command line. 21

22 To run FXCopy interactively, set it up in your MSBuild file. Here s the new Math.proj file. <Project DefaultTargets="BuildCode" xmlns=" <Import Project="$(MSBuildExtensionsPath) \MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets" /> <!-- ASCII Constants used for Message output --> <PropertyGroup> <NEW_LINE>%0D%0A</NEW_LINE> <TAB>%09</TAB> <DOUBLE_QUOTES>%22</DOUBLE_QUOTES> <SPACE>%20</SPACE> </PropertyGroup> <!-- Solution Files--> <PropertyGroup> <SolutionName>math.sln</SolutionName> </PropertyGroup> <!-- 3rd Party Program Settings --> <PropertyGroup> <NUnitExe>"C:\Program Files\NUnit 2.4.3\bin\nunit-console.exe"</NUnitExe> <NUnitArgs>/nologo /xml:c:/ci/artifacts/math/unittest-results.xml</nunitargs> <NUnitFile>TestResult.xml</NUnitFile> <FxCopExe>"c:\program files\microsoft fxcop 1.36\fxcopcmd.exe"</FxCopExe> <FxCopArgs>/d:"c:\ci\math\math\source\math\bin\debug\ /f:math.exe"</fxcopargs> <FxCopFile>/o:"c:\ci\artifacts\math\FXCop.xml"</FxCopFile> </PropertyGroup> <Target Name="GetProjects"> <!-- Get all projects in the solution --> <GetSolutionProjects Solution="$(SolutionName)"> <Output TaskParameter="Output" ItemName = "SolutionProjects" /> </GetSolutionProjects> <!-- Filter out solution folders and non.csproj items --> <RegExMatch Input="@(SolutionProjects)" Expression=".[\.]csproj$"> 22

23 1"> <Output TaskParameter="Output" ItemName = "Projects" /> </RegExMatch> <!-- Add Code folder to all solution project paths --> <RegexReplace Input="@(Projects)" Expression="(math.*)\\" Replacement="Code\$1\\" Count="- <Output TaskParameter="Output" ItemName="CSProjects" /> </RegexReplace> <!-- Resolve test projects --> <RegexMatch Input="@(Projects)" Expression="(MathTest).*[\.]csproj$"> <Output TaskParameter="Output" ItemName="TestProjects" /> </RegexMatch> <!-- Resolve the code projects --> <CreateItem Include="@(CSProjects)" Exclude="@(TestProjects)"> <Output TaskParameter="Include" ItemName="CodeProjects"/> </CreateItem> <Message Text="$(NEW_LINE)Resolved the following solution projects:" Importance="high" /> <Message Text="CodeProjects:$(NEW_LINE)$(TAB)@(CodeProjects- >'%(RelativeDir)%(FileName)%(Extension)', '$(NEW_LINE)$(TAB)')" Importance="high"/> <Message Text="TestProjects:$(NEW_LINE)$(TAB)@(TestProjects- >'%(RelativeDir)%(FileName)%(Extension)', '$(NEW_LINE)$(TAB)')" Importance="high"/> <Target Name="BuildCode" DependsOnTargets="GetProjects"> <Message Text="Target BuildCode" /> <MSBuild Projects="@(CodeProjects)"> <Output TaskParameter="TargetOutputs" ItemName="CodeAssemblies"/> </MSBuild> <Target Name="TestCode" DependsOnTargets="BuildCode"> <Message Text = "Target TestCode" /> <MSBuild Projects="@(TestProjects)"> <Output TaskParameter="TargetOutputs" ItemName="TestAssemblies"/> </MSBuild> <Exec ContinueOnError='true' Command='$(NUnitEXE) <Target Name="FxCop" DependsOnTargets="BuildCode"> <Message Text = "Target FxCop"/> <Exec ContinueOnError='true' Command='$(FxCopEXE) $(FXCopArgs) $(FxCopFile)'/> <Target Name="CleanCode" DependsOnTargets="GetProjects"> <Message Text="Target CleanCode" /> <CreateItem @(CodeProjects->'%(RelativeDir)obj\*\*.dll'); 23

24 <Output TaskParameter="Include" ItemName="SolutionOutput" /> </CreateItem> <Delete /> <Target Name="CleanTests" DependsOnTargets="CleanCode"> <Message Text="Target CleanTests" /> @(TestProjects->'%(RelativeDir)obj\*\*.dll'); <Output TaskParameter="Include" ItemName="SolutionOutput" /> </CreateItem> <Delete /> <Target Name="IncrementalBuild" DependsOnTargets="BuildCode;TestCode"> <Message Text="Target Incremental" /> <Target Name="DailyBuild" DependsOnTargets="CleanTests;BuildCode;TestCode;FXCop"> <Message Text="Target DailyFramework" /> <Target Name="WeeklyBuild" DependsOnTargets="CleanTests;BuildCode;TestCode;FXCop"> <Message Text="Target Incremental" /> </Project> The changes start with the addition of new entries in the property group. The FxCop target specifies a specific assembly rather than incrementing through a list of assemblies. Changing this to more generic code is still on our todo list. Notice that we don t add a call to FxCop in the IncrementalBuild target. This is because the IncrementalBuild should run quickly and only do the unit tests. You also need to merge the results of FxCop into the CCNet dashboard report. Here I ve only included a portion of the CCNet.config file. <publishers> <merge> <files> <file>c:\ci\artifacts\math\unittest-results.xml</file> <file>c:\ci\artifacts\math\fxcop.xml</file> </files> </merge> <statistics /> <xmllogger /> < from="ciserver@craigberntson.com" mailhost="local" includedetails="true"> <users> <user name="craig" group="cimanagers" address="craig@craigberntson.com" /> </users> <groups> <group name="cimanagers" notification="failed" /> </groups> </ > </publishers> 24

25 Tools discussed in this section Tool Download URL FxCop FxCop is distributed as part of the Windows SDK. f b479-f53d234cdccf&displaylang=en Documentation Many people argue against documentation in this day and age when Agile processes are becoming the norm. However, this is a misguided understanding of Agile development. Agile does not say no documentation, it says that building software should take precedence over documentation. But what if documentation could be automated? I m talking here about developer documentation, not end user documentation. This is especially important if you are writing code to be used by other developers. In the.net 1.0 and 1.1 days, ndoc was used to create documentation from source code. However, Microsoft is currently developing a tool, codenamed Sandcastle, that can be called from the build script to generate documentation. Sandcastle uses the /// comments in your code to generate CHM or HxS help files. If you want to create CHM files, you will also need to download and install HTML Help Workshop. In its current CTP version, Sandcastle is a bit awkward to use as it consists of several assemblies, xsl files, and steps to generate the help files. In the future, the Sandcastle team will provide Visual Studio integration and a GUI tool to make the process easier. As I am writing this, we are still working on Sandcastle and don t have it running yet in our environment. However, I wanted you to be aware of this tool to help create your developer documentation. Tools discussed in this section Tool Sandcastle HTML Help Workshop Download URL Feedback Getting results of a build back to the team in a timely manner is one of the most important aspects of Continuous Integration. There are several tools available for this, starting with CruiseControl itself. The most common way of getting information back to the team is via a web site where the latest build information is available. CruiseControl.Net uses IIS to host the web pages. The advantage is the information is complete and as detailed as you want it to be. The downside is that team members need to browse to the site to see what s happening. CruiseControl.Net also includes an application, CCTray, that can be installed on your computer. It then sits in the system tray and monitors the build status. The color of the icon changes depending on the build status, thus providing more immediate information. is also one of the most used feedback features. CruiseControl.Net includes the ability to send s via your SMTP server. But again, suffers many of the same problems as the web site. 25

26 Because is available, it becomes easy to send SMS messages to a cell phone. Be careful however, because sending too many messages will cause the important ones to be ignored. CCNet can be configured to only send a message when a build fails and again when the issues have been fixed. You could also hook cause a sound to be played when a build fails. This would require a sound card and speakers hooked up to the build box. One drawback is that the sound is only played once so you have to be present to hear it. An interesting idea is to use an Ambient Orb. The Orb is basically a light that connects to wirelessly to your network. The color of the Orb can be controlled, so you can have green for a successful build and red for a failure. If failures continue in subsequent builds, the color of Orb can be darkened to indicate serious issues exist. However, the Orb requires an additional expense but the cool geek factor cannot be ignored. Tools discussed in this section Tool Ambient Orb Information URL What s next? We re just touching the tip of the iceberg in our CI implementation. More unit tests need to be added. Other code metrics tools such as coverage measurement, duplicated code, refactoring checking, and more are available. We would like to call our automated QA test tools at least on a weekly basis. We would also like to call InstallShield to create the install set. I m sure there is even more that can be done. Summary Continuous Integration can help ensure you create a better quality application in less time. By automating aspects of the build, testing, installation, code metrics, and other areas, your team and your customers will always know the status of the current project. Adding CI to your process should be a priority as are many best practices. Craig Berntson is a Microsoft Most Valuable Professional (MVP) for Visual FoxPro, a Microsoft Certified Solution Developer, and President of the Salt Lake City Fox User Group. He is the author of CrysDev: A Developer s Guide to Integrating Crystal Reports, available from Hentzenwerke Publishing. He has also written for FoxRockx, FoxTalk and the Visual FoxPro User Group (VFUG) newsletter. He has spoken at Advisor DevCon, Essential Fox, DevEssentials, the Great Lakes Great Database Workshop, Southwest Fox, DevTeach, FoxCon, German FoxPro 26

27 Devcon, Prague FoxPro DevCon, Microsoft DevDays and user groups around the US. Currently, Craig is a Senior Software Engineer at Fortune 100 company. in Salt Lake City, Utah, USA. You can reach him at craig@craigberntson.com,, or his blog at 27

Continuous Integration with CruiseControl.Net

Continuous Integration with CruiseControl.Net Continuous Integration with CruiseControl.Net Part 2 Paul Grenyer CruiseControl.Net Web Dashboard In part 1 of Continuous Integration with CruiseControl.Net [Part1] I described creating a simple, but effective,

More information

Two-Way Data Binding with WinJS By Marcin Kawalerowicz and Craig Berntson, authors of Continuous Integration in.net

Two-Way Data Binding with WinJS By Marcin Kawalerowicz and Craig Berntson, authors of Continuous Integration in.net 1 Two-Way Data Binding with WinJS By Marcin Kawalerowicz and Craig Berntson, authors of Continuous Integration in.net One of the keys to improving applications and productivity is to automate some of the

More information

Continuous Integration with CruiseControl.Net

Continuous Integration with CruiseControl.Net Continuous Integration with CruiseControl.Net Part 1 Paul Grenyer What is Continuous Integration? Continuous integration is vital to the software development process if you have multiple build configurations

More information

Continuous integration for databases using Red Gate tools

Continuous integration for databases using Red Gate tools Whitepaper Continuous integration for databases using Red Gate tools A technical overview Continuous Integration source control develop Dev Dev Dev build test Automated Deployment Deployment package Testing

More information

Continuous Integration with CruiseControl.Net

Continuous Integration with CruiseControl.Net Continuous Integration with CruiseControl.Net Part 3 Paul Grenyer CruiseControl.Net One of the first rules of writing is to write about something you know about. With the exception of the user guide for

More information

Continuous. Integration. in.net MARGIN KAWALEROWICZ CRAIG BERNTSON MANNING. Greenwich. (74 w. long.)

Continuous. Integration. in.net MARGIN KAWALEROWICZ CRAIG BERNTSON MANNING. Greenwich. (74 w. long.) Continuous Integration in.net MARGIN KAWALEROWICZ CRAIG BERNTSON M MANNING Greenwich (74 w. long.) contents preface xv acknowledgments xvii about this book xix about the authors xxii about the cover illustration

More information

Practical Continuous Integration

Practical Continuous Integration Methods & Tools Practical Continuous Integration Kim Gräsman & Jonas Blunck, TAC AB Integration Merging your latest changes with the common code base Integration problems Forgetting to add a file Conflicting

More information

For more about patterns & practices: http://msdn.microsoft.com/practices/ My blog: http://ademiller.com/tech/

For more about patterns & practices: http://msdn.microsoft.com/practices/ My blog: http://ademiller.com/tech/ For more about patterns & practices: http://msdn.microsoft.com/practices/ My blog: http://ademiller.com/tech/ 1 2 Stop me. Ask questions. Tell me if you ve heard it all before or you want to hear about

More information

Test-Driven Development and Continuous Integration

Test-Driven Development and Continuous Integration Test-Driven Development and Continuous Integration We have all been there, working all night long on a specific piece of functionality, so happy that we've got something to run finally! We work to merge

More information

Test Automation Integration with Test Management QAComplete

Test Automation Integration with Test Management QAComplete Test Automation Integration with Test Management QAComplete This User's Guide walks you through configuring and using your automated tests with QAComplete's Test Management module SmartBear Software Release

More information

Team Foundation Server 2013 Installation Guide

Team Foundation Server 2013 Installation Guide Team Foundation Server 2013 Installation Guide Page 1 of 164 Team Foundation Server 2013 Installation Guide Benjamin Day benday@benday.com v1.1.0 May 28, 2014 Team Foundation Server 2013 Installation Guide

More information

We (http://www.newagesolution.net) have extensive experience in enterprise and system architectures, system engineering, project management, and

We (http://www.newagesolution.net) have extensive experience in enterprise and system architectures, system engineering, project management, and We (http://www.newagesolution.net) have extensive experience in enterprise and system architectures, system engineering, project management, and software design and development. We will be presenting a

More information

Version Control with. Ben Morgan

Version Control with. Ben Morgan Version Control with Ben Morgan Developer Workflow Log what we did: Add foo support Edit Sources Add Files Compile and Test Logbook ======= 1. Initial version Logbook ======= 1. Initial version 2. Remove

More information

Test Driven Development Part III: Continuous Integration Venkat Subramaniam venkats@agiledeveloper.com http://www.agiledeveloper.com/download.

Test Driven Development Part III: Continuous Integration Venkat Subramaniam venkats@agiledeveloper.com http://www.agiledeveloper.com/download. Test Driven Development Part III: Continuous Integration Venkat Subramaniam venkats@agiledeveloper.com http://www.agiledeveloper.com/download.aspx Abstract In this final part of the three part series on

More information

How To Develop A Project In A Production Environment

How To Develop A Project In A Production Environment Open Source.NET Development Setting Up A Professional Development Environment Using Open Source Software (OSS) Morten Mertner Senior Consultant, Teknologisk Institut.NET Architect and Software Developer

More information

Continuous integration for databases using

Continuous integration for databases using Continuous integration for databases using Red Wie Sie Gate die tools Microsoft SQL An overview Continuous integration for databases using Red Gate tools An overview Contents Why continuous integration?

More information

BillQuick Web i Time and Expense User Guide

BillQuick Web i Time and Expense User Guide BillQuick Web i Time and Expense User Guide BQE Software Inc. 1852 Lomita Boulevard Lomita, California 90717 USA http://www.bqe.com Table of Contents INTRODUCTION TO BILLQUICK... 3 INTRODUCTION TO BILLQUICK

More information

Hosting Users Guide 2011

Hosting Users Guide 2011 Hosting Users Guide 2011 eofficemgr technology support for small business Celebrating a decade of providing innovative cloud computing services to small business. Table of Contents Overview... 3 Configure

More information

Jenkins on Windows with StreamBase

Jenkins on Windows with StreamBase Jenkins on Windows with StreamBase Using a Continuous Integration (CI) process and server to perform frequent application building, packaging, and automated testing is such a good idea that it s now a

More information

PCRecruiter Resume Inhaler

PCRecruiter Resume Inhaler PCRecruiter Resume Inhaler The PCRecruiter Resume Inhaler is a stand-alone application that can be pointed to a folder and/or to an email inbox containing resumes, and will automatically extract contact

More information

Introducing Continuous Integration

Introducing Continuous Integration Chapter 2 Introducing Continuous Integration Commit Code Frequently Don t Commit Broken Code Fix Broken Builds Immediately Write Automated Developer Tests All Tests and Inspections Must Pass Run Private

More information

Improving software quality with an automated build process

Improving software quality with an automated build process Software architecture for developers What is software architecture? What is the role of a software architect? How do you define software architecture? How do you share software architecture? How do you

More information

Nick Ashley TOOLS. The following table lists some additional and possibly more unusual tools used in this paper.

Nick Ashley TOOLS. The following table lists some additional and possibly more unusual tools used in this paper. TAKING CONTROL OF YOUR DATABASE DEVELOPMENT Nick Ashley While language-oriented toolsets become more advanced the range of development and deployment tools for databases remains primitive. How often is

More information

Software Construction

Software Construction Software Construction Martin Kropp University of Applied Sciences Northwestern Switzerland Institute for Mobile and Distributed Systems Learning Target You can explain the importance of continuous integration

More information

TECHNICAL DOCUMENTATION SPECOPS DEPLOY / APP 4.7 DOCUMENTATION

TECHNICAL DOCUMENTATION SPECOPS DEPLOY / APP 4.7 DOCUMENTATION TECHNICAL DOCUMENTATION SPECOPS DEPLOY / APP 4.7 DOCUMENTATION Contents 1. Getting Started... 4 1.1 Specops Deploy Supported Configurations... 4 2. Specops Deploy and Active Directory...5 3. Specops Deploy

More information

Leveraging Rational Team Concert's build capabilities for Continuous Integration

Leveraging Rational Team Concert's build capabilities for Continuous Integration Leveraging Rational Team Concert's build capabilities for Continuous Integration Krishna Kishore Senior Engineer, RTC IBM Krishna.kishore@in.ibm.com August 9-11, Bangalore August 11, Delhi Agenda What

More information

Team Foundation Server 2010, Visual Studio Ultimate 2010, Team Build 2010, & Lab Management Beta 2 Installation Guide

Team Foundation Server 2010, Visual Studio Ultimate 2010, Team Build 2010, & Lab Management Beta 2 Installation Guide Page 1 of 243 Team Foundation Server 2010, Visual Studio Ultimate 2010, Team Build 2010, & Lab Management Beta 2 Installation Guide (This is an alpha version of Benjamin Day Consulting, Inc. s installation

More information

14.1. bs^ir^qfkd=obcib`qflk= Ñçê=emI=rkfuI=~åÇ=léÉåsjp=eçëíë

14.1. bs^ir^qfkd=obcib`qflk= Ñçê=emI=rkfuI=~åÇ=léÉåsjp=eçëíë 14.1 bs^ir^qfkd=obcib`qflk= Ñçê=emI=rkfuI=~åÇ=léÉåsjp=eçëíë bî~äì~íáåö=oéñäéåíáçå=ñçê=emi=rkfui=~åç=lééåsjp=eçëíë This guide walks you quickly through key Reflection features. It covers: Getting Connected

More information

BUILDER 3.0 Installation Guide with Microsoft SQL Server 2005 Express Edition January 2008

BUILDER 3.0 Installation Guide with Microsoft SQL Server 2005 Express Edition January 2008 BUILDER 3.0 Installation Guide with Microsoft SQL Server 2005 Express Edition January 2008 BUILDER 3.0 1 Table of Contents Chapter 1: Installation Overview... 3 Introduction... 3 Minimum Requirements...

More information

Continuous integration for databases using Redgate tools

Continuous integration for databases using Redgate tools Continuous integration for databases using Redgate tools Wie Sie die Microsoft SQL Server Data Tools mit den Tools von Redgate ergänzen und kombinieren können An overview 1 Continuous integration for

More information

Installation Guide. Tech Excel January 2009

Installation Guide. Tech Excel January 2009 Installation Guide Tech Excel January 2009 Copyright 1998-2009 TechExcel, Inc. All Rights Reserved. TechExcel, Inc., TechExcel, ServiceWise, AssetWise, FormWise, KnowledgeWise, ProjectPlan, DownloadPlus,

More information

Getting Started with the Ed-Fi ODS and Ed-Fi ODS API

Getting Started with the Ed-Fi ODS and Ed-Fi ODS API Getting Started with the Ed-Fi ODS and Ed-Fi ODS API Ed-Fi ODS and Ed-Fi ODS API Version 2.0 - Technical Preview October 2014 2014 Ed-Fi Alliance, LLC. All rights reserved. Ed-Fi is a registered trademark

More information

Quick Start Guide 0514US

Quick Start Guide 0514US Quick Start Guide Copyright Wasp Barcode Technologies 2014 No part of this publication may be reproduced or transmitted in any form or by any means without the written permission of Wasp Barcode Technologies.

More information

Hypercosm. Studio. www.hypercosm.com

Hypercosm. Studio. www.hypercosm.com Hypercosm Studio www.hypercosm.com Hypercosm Studio Guide 3 Revision: November 2005 Copyright 2005 Hypercosm LLC All rights reserved. Hypercosm, OMAR, Hypercosm 3D Player, and Hypercosm Studio are trademarks

More information

CEFNS Web Hosting a Guide for CS212

CEFNS Web Hosting a Guide for CS212 CEFNS Web Hosting a Guide for CS212 INTRODUCTION: TOOLS: In CS212, you will be learning the basics of web development. Therefore, you want to keep your tools to a minimum so that you understand how things

More information

Installation Guide for Pulse on Windows Server 2012

Installation Guide for Pulse on Windows Server 2012 MadCap Software Installation Guide for Pulse on Windows Server 2012 Pulse Copyright 2014 MadCap Software. All rights reserved. Information in this document is subject to change without notice. The software

More information

Windows Intune Walkthrough: Windows Phone 8 Management

Windows Intune Walkthrough: Windows Phone 8 Management Windows Intune Walkthrough: Windows Phone 8 Management This document will review all the necessary steps to setup and manage Windows Phone 8 using the Windows Intune service. Note: If you want to test

More information

Installation instructions for MERLIN Dashboard

Installation instructions for MERLIN Dashboard Installation instructions for MERLIN Dashboard Contents Installation Prerequisites:... 2 Procedure to manually backup and restore Views and Settings in AxOEE Manager... 3 For XP users go to:... 3 For Vista

More information

WHAT'S NEW WITH SALESFORCE FOR OUTLOOK

WHAT'S NEW WITH SALESFORCE FOR OUTLOOK WHAT'S NEW WITH SALESFORCE FOR OUTLOOK Salesforce for Outlook v2.8.1 Salesforce for Outlook v2.8.1, we ve improved syncing and fixed issues with the side panel and error log. Sync Side Panel Error Log

More information

Installation Guide for Pulse on Windows Server 2008R2

Installation Guide for Pulse on Windows Server 2008R2 MadCap Software Installation Guide for Pulse on Windows Server 2008R2 Pulse Copyright 2014 MadCap Software. All rights reserved. Information in this document is subject to change without notice. The software

More information

webkpi SaaS ETL Connector Installation & Configuration Guide

webkpi SaaS ETL Connector Installation & Configuration Guide webkpi SaaS ETL Connector Installation & Configuration Guide SaaS ETL Version 2.5.0.12 Version 1.6 September 2013 webkpi SaaS ETL Connector Version 2.5.0.12 V 1.6 Page 1 Table of Contents Table of Contents

More information

The Social Accelerator Setup Guide

The Social Accelerator Setup Guide The Social Accelerator Setup Guide Welcome! Welcome to the Social Accelerator setup guide. This guide covers 2 ways to setup SA. Most likely, you will want to use the easy setup wizard. In that case, you

More information

Tutorial: Packaging your server build

Tutorial: Packaging your server build Tutorial: Packaging your server build This tutorial walks you through the steps to prepare a game server folder or package containing all the files necessary for your game server to run in Amazon GameLift.

More information

Testing Rails. by Josh Steiner. thoughtbot

Testing Rails. by Josh Steiner. thoughtbot Testing Rails by Josh Steiner thoughtbot Testing Rails Josh Steiner April 10, 2015 Contents thoughtbot Books iii Contact us................................ iii Introduction 1 Why test?.................................

More information

Source Control Guide: Git

Source Control Guide: Git MadCap Software Source Control Guide: Git Flare 11.1 Copyright 2015 MadCap Software. All rights reserved. Information in this document is subject to change without notice. The software described in this

More information

Before you install ProSeries software for network use

Before you install ProSeries software for network use Before you install ProSeries software for network use The following pages describe system requirements and other information you need to know before installing ProSeries software for network use. Important:

More information

TechTips. Connecting Xcelsius Dashboards to External Data Sources using: Web Services (Dynamic Web Query)

TechTips. Connecting Xcelsius Dashboards to External Data Sources using: Web Services (Dynamic Web Query) TechTips Connecting Xcelsius Dashboards to External Data Sources using: Web Services (Dynamic Web Query) A step-by-step guide to connecting Xcelsius Enterprise XE dashboards to company databases using

More information

How To Test Your Web Site On Wapt On A Pc Or Mac Or Mac (Or Mac) On A Mac Or Ipad Or Ipa (Or Ipa) On Pc Or Ipam (Or Pc Or Pc) On An Ip

How To Test Your Web Site On Wapt On A Pc Or Mac Or Mac (Or Mac) On A Mac Or Ipad Or Ipa (Or Ipa) On Pc Or Ipam (Or Pc Or Pc) On An Ip Load testing with WAPT: Quick Start Guide This document describes step by step how to create a simple typical test for a web application, execute it and interpret the results. A brief insight is provided

More information

In the same spirit, our QuickBooks 2008 Software Installation Guide has been completely revised as well.

In the same spirit, our QuickBooks 2008 Software Installation Guide has been completely revised as well. QuickBooks 2008 Software Installation Guide Welcome 3/25/09; Ver. IMD-2.1 This guide is designed to support users installing QuickBooks: Pro or Premier 2008 financial accounting software, especially in

More information

To install Multifront you need to have familiarity with Internet Information Services (IIS), Microsoft.NET Framework and SQL Server 2008.

To install Multifront you need to have familiarity with Internet Information Services (IIS), Microsoft.NET Framework and SQL Server 2008. Znode Multifront - Installation Guide Version 6.2 1 System Requirements To install Multifront you need to have familiarity with Internet Information Services (IIS), Microsoft.NET Framework and SQL Server

More information

EVALUATION ONLY. WA2088 WebSphere Application Server 8.5 Administration on Windows. Student Labs. Web Age Solutions Inc.

EVALUATION ONLY. WA2088 WebSphere Application Server 8.5 Administration on Windows. Student Labs. Web Age Solutions Inc. WA2088 WebSphere Application Server 8.5 Administration on Windows Student Labs Web Age Solutions Inc. Copyright 2013 Web Age Solutions Inc. 1 Table of Contents Directory Paths Used in Labs...3 Lab Notes...4

More information

Exchange Mailbox Protection Whitepaper

Exchange Mailbox Protection Whitepaper Exchange Mailbox Protection Contents 1. Introduction... 2 Documentation... 2 Licensing... 2 Exchange add-on comparison... 2 Advantages and disadvantages of the different PST formats... 3 2. How Exchange

More information

WORKING IN TEAMS WITH CASECOMPLETE AND MICROSOFT VISUAL SOURCE SAFE. Contents

WORKING IN TEAMS WITH CASECOMPLETE AND MICROSOFT VISUAL SOURCE SAFE. Contents WORKING IN TEAMS WITH CASECOMPLETE AND MICROSOFT VISUAL SOURCE SAFE Contents Working in Teams with CaseComplete... 2 Need an introduction to how version control works?... 2 Exclusive Checkout... 3 Multiple

More information

Creating XML Report Web Services

Creating XML Report Web Services 5 Creating XML Report Web Services In the previous chapters, we had a look at how to integrate reports into Windows and Web-based applications, but now we need to learn how to leverage those skills and

More information

Introducing Xcode Source Control

Introducing Xcode Source Control APPENDIX A Introducing Xcode Source Control What You ll Learn in This Appendix: u The source control features offered in Xcode u The language of source control systems u How to connect to remote Subversion

More information

Continuous Integration

Continuous Integration How painful was your last release? Continuous Integration Marcin Kawalerowicz CEO CODEFUSION Sp. z o. o. CODEFUSION Sp. z o.o. ul. Powstańców Śląskich 25/18 45-086 Opole, Poland +48 77 54 53 312 info@codefusion.pl

More information

CA Spectrum and CA Service Desk

CA Spectrum and CA Service Desk CA Spectrum and CA Service Desk Integration Guide CA Spectrum 9.4 / CA Service Desk r12 and later This Documentation, which includes embedded help systems and electronically distributed materials, (hereinafter

More information

Continuous Integration and Bamboo. Ryan Cutter CSCI 5828 2012 Spring Semester

Continuous Integration and Bamboo. Ryan Cutter CSCI 5828 2012 Spring Semester Continuous Integration and Bamboo Ryan Cutter CSCI 5828 2012 Spring Semester Agenda What is CI and how can it help me? Fundamentals of CI Fundamentals of Bamboo Configuration / Price Quick example Features

More information

Novell ZENworks 10 Configuration Management SP3

Novell ZENworks 10 Configuration Management SP3 AUTHORIZED DOCUMENTATION Software Distribution Reference Novell ZENworks 10 Configuration Management SP3 10.3 November 17, 2011 www.novell.com Legal Notices Novell, Inc., makes no representations or warranties

More information

Installing Oracle 12c Enterprise on Windows 7 64-Bit

Installing Oracle 12c Enterprise on Windows 7 64-Bit JTHOMAS ENTERPRISES LLC Installing Oracle 12c Enterprise on Windows 7 64-Bit DOLOR SET AMET Overview This guide will step you through the process on installing a desktop-class Oracle Database Enterprises

More information

Samsung Xchange for Mac User Guide. Winter 2013 v2.3

Samsung Xchange for Mac User Guide. Winter 2013 v2.3 Samsung Xchange for Mac User Guide Winter 2013 v2.3 Contents Welcome to Samsung Xchange IOS Desktop Client... 3 How to Install Samsung Xchange... 3 Where is it?... 4 The Dock menu... 4 The menu bar...

More information

Continuous Integration: Improving Software Quality and Reducing Risk. Preetam Palwe Aftek Limited

Continuous Integration: Improving Software Quality and Reducing Risk. Preetam Palwe Aftek Limited Continuous Integration: Improving Software Quality and Reducing Risk Preetam Palwe Aftek Limited One more title Do you love bugs? Or Are you in love with QC members? [Courtesy: Smita N] Agenda Motivation

More information

Source Code Management for Continuous Integration and Deployment. Version 1.0 DO NOT DISTRIBUTE

Source Code Management for Continuous Integration and Deployment. Version 1.0 DO NOT DISTRIBUTE Source Code Management for Continuous Integration and Deployment Version 1.0 Copyright 2013, 2014 Amazon Web Services, Inc. and its affiliates. All rights reserved. This work may not be reproduced or redistributed,

More information

Creating and Managing Shared Folders

Creating and Managing Shared Folders Creating and Managing Shared Folders Microsoft threw all sorts of new services, features, and functions into Windows 2000 Server, but at the heart of it all was still the requirement to be a good file

More information

Installing and Upgrading to Windows 7

Installing and Upgrading to Windows 7 Installing and Upgrading to Windows 7 Before you can install Windows 7 or upgrade to it, you first need to decide which version of 7 you will use. Then, you should check the computer s hardware to make

More information

Agile.NET Development Test-driven Development using NUnit

Agile.NET Development Test-driven Development using NUnit Agile.NET Development Test-driven Development using NUnit Jason Gorman Test-driven Development Drive the design and construction of your code on unit test at a time Write a test that the system currently

More information

Essential Visual Studio Team System

Essential Visual Studio Team System Essential Visual Studio Team System Introduction This course helps software development teams successfully deliver complex software solutions with Microsoft Visual Studio Team System (VSTS). Discover how

More information

Understanding offline files

Understanding offline files Understanding offline files Introduction If you've ever needed to access important files stored in a shared folder on your network but couldn't because the network connection was unavailable, then you

More information

Change Management for Rational DOORS User s Guide

Change Management for Rational DOORS User s Guide Change Management for Rational DOORS User s Guide Before using this information, read the general information under Appendix: Notices on page 58. This edition applies to Change Management for Rational

More information

Software Development In the Cloud Cloud management and ALM

Software Development In the Cloud Cloud management and ALM Software Development In the Cloud Cloud management and ALM First published in Dr. Dobb's Journal, February 2009: http://www.ddj.com/development-tools/212900736 Nick Gulrajani is a Senior Solutions Architect

More information

Click Studios. Passwordstate. Upgrade Instructions to V7 from V5.xx

Click Studios. Passwordstate. Upgrade Instructions to V7 from V5.xx Passwordstate Upgrade Instructions to V7 from V5.xx This document and the information controlled therein is the property of Click Studios. It must not be reproduced in whole/part, or otherwise disclosed,

More information

Test Driven Development with Continuous Integration: A Literature Review

Test Driven Development with Continuous Integration: A Literature Review Test Driven Development with Continuous Integration: A Literature Review Sheikh Fahad Ahmad Deptt. of Computer Science & Engg. Mohd. Rizwan Beg Deptt. of Computer Science & Engg. Mohd. Haleem Deptt. of

More information

Continuous Integration: Aspects in Automation and Configuration Management

Continuous Integration: Aspects in Automation and Configuration Management Context Continuous Integration: Aspects in and Configuration Management Christian Rehn TU Kaiserslautern January 9, 2012 1 / 34 Overview Context 1 Context 2 3 4 2 / 34 Questions Context How to do integration

More information

Continuous Integration

Continuous Integration Continuous Integration Collaborative development issues Checkout of a shared version of software ( mainline ) Creation of personal working copies of developers Software development: modification of personal

More information

User Guide. Version 3.2. Copyright 2002-2009 Snow Software AB. All rights reserved.

User Guide. Version 3.2. Copyright 2002-2009 Snow Software AB. All rights reserved. Version 3.2 User Guide Copyright 2002-2009 Snow Software AB. All rights reserved. This manual and computer program is protected by copyright law and international treaties. Unauthorized reproduction or

More information

The Benefits of Deployment Automation

The Benefits of Deployment Automation WHITEPAPER Octopus Deploy The Benefits of Deployment Automation Reducing the risk of production deployments Contents Executive Summary... 2 Deployment and Agile software development... 3 Aim to deploy

More information

Administrator s Guide

Administrator s Guide Attachment Save for Exchange Administrator s Guide document version 1.8 MAPILab, December 2015 Table of contents Intro... 3 1. Product Overview... 4 2. Product Architecture and Basic Concepts... 4 3. System

More information

The Importance of Continuous Integration for Quality Assurance Teams

The Importance of Continuous Integration for Quality Assurance Teams The Importance of Continuous Integration for Quality Assurance Teams Without proper implementation, a continuous integration system will go from a competitive advantage for a software quality assurance

More information

Version Control with Subversion and Xcode

Version Control with Subversion and Xcode Version Control with Subversion and Xcode Author: Mark Szymczyk Last Update: June 21, 2006 This article shows you how to place your source code files under version control using Subversion and Xcode. By

More information

Windows PCs & Servers are often the life-blood of your IT investment. Monitoring them is key, especially in today s 24 hour world!

Windows PCs & Servers are often the life-blood of your IT investment. Monitoring them is key, especially in today s 24 hour world! + Welcome to The Sentry-go Monitoring System v6 Monitoring made quick & easy! Be Proactive, Not Reactive! 3Ds (UK) Limited http://www.sentry-go.com Welcome to Sentry-go Sentry-go is a quick & easy to use

More information

Pre Installation. Operating Systems: Windows 7 Pro, Server 2008, 2008 R2, Server 2012. Server 2012 (specific)

Pre Installation. Operating Systems: Windows 7 Pro, Server 2008, 2008 R2, Server 2012. Server 2012 (specific) Table of Contents Pre Installation 3 Operating Systems: Windows 7 Pro, Server 2008, 2008 R2, Server 2012 3 Server 2012 (specific) 3 Check for a Firewall before you leave the server 4 Installation and IIS

More information

How To Set Up Safetica Insight 9 (Safetica) For A Safetrica Management Service (Sms) For An Ipad Or Ipad (Smb) (Sbc) (For A Safetaica) (

How To Set Up Safetica Insight 9 (Safetica) For A Safetrica Management Service (Sms) For An Ipad Or Ipad (Smb) (Sbc) (For A Safetaica) ( SAFETICA INSIGHT INSTALLATION MANUAL SAFETICA INSIGHT INSTALLATION MANUAL for Safetica Insight version 6.1.2 Author: Safetica Technologies s.r.o. Safetica Insight was developed by Safetica Technologies

More information

a new generation software test automation framework - CIVIM

a new generation software test automation framework - CIVIM a new generation software test automation framework - CIVIM Software Testing is the last phase in software development lifecycle which has high impact on the quality of the final product delivered to the

More information

Pcounter Web Report 3.x Installation Guide - v2014-11-30. Pcounter Web Report Installation Guide Version 3.4

Pcounter Web Report 3.x Installation Guide - v2014-11-30. Pcounter Web Report Installation Guide Version 3.4 Pcounter Web Report 3.x Installation Guide - v2014-11-30 Pcounter Web Report Installation Guide Version 3.4 Table of Contents Table of Contents... 2 Installation Overview... 3 Installation Prerequisites

More information

WebEx. Remote Support. User s Guide

WebEx. Remote Support. User s Guide WebEx Remote Support User s Guide Version 6.5 Copyright WebEx Communications, Inc. reserves the right to make changes in the information contained in this publication without prior notice. The reader should

More information

How to Configure a Stress Test Project for Microsoft Office SharePoint Server 2007 using Visual Studio Team Suite 2008.

How to Configure a Stress Test Project for Microsoft Office SharePoint Server 2007 using Visual Studio Team Suite 2008. How to Configure a Stress Test Project for Microsoft Office SharePoint Server 2007 using Visual Studio Team Suite 2008. 1 By Steve Smith, MVP SharePoint Server, MCT And Penny Coventry, MVP SharePoint Server,

More information

WebSpy Vantage Ultimate 2.2 Web Module Administrators Guide

WebSpy Vantage Ultimate 2.2 Web Module Administrators Guide WebSpy Vantage Ultimate 2.2 Web Module Administrators Guide This document is intended to help you get started using WebSpy Vantage Ultimate and the Web Module. For more detailed information, please see

More information

Enterprise Remote Control 5.6 Manual

Enterprise Remote Control 5.6 Manual Enterprise Remote Control 5.6 Manual Solutions for Network Administrators Copyright 2015, IntelliAdmin, LLC Revision 3/26/2015 http://www.intelliadmin.com Page 1 Table of Contents What is Enterprise Remote

More information

How To Set Up A Xerox Econcierge Powered By Xerx Account

How To Set Up A Xerox Econcierge Powered By Xerx Account Xerox econcierge Account Setup Guide Xerox econcierge Account Setup Guide The free Xerox econcierge service provides the quickest, easiest way for your customers to order printer supplies for all their

More information

Managing Software Updates with System Center 2012 R2 Configuration Manager

Managing Software Updates with System Center 2012 R2 Configuration Manager Managing Software Updates with System Center 2012 R2 Configuration Manager Managing Microsoft Updates with Configuration Manager 2012 R2 This document is for informational purposes only. MICROSOFT MAKES

More information

How to Charge for Access to your Membership Site.

How to Charge for Access to your Membership Site. How to Charge for Access to your Membership Site. A resource to use when planning out and preparing your membership programs with the PilotPress Membership Plugin Tool Part 1: Set it up Step 1: Plan Decide

More information

v4: How to create a BartPE Rescue CD for Macrium Reflect

v4: How to create a BartPE Rescue CD for Macrium Reflect So, you ve created your Linux based recovery CD, you push it in and boot up and it doesn t find your hard drives, network or both what s next? If the Linux Based Recovery CD option doesn t work for you

More information

The Nuts and Bolts of Autodesk Vault Replication Setup

The Nuts and Bolts of Autodesk Vault Replication Setup The Nuts and Bolts of Autodesk Vault Replication Setup James McMullen Autodesk, Inc PL4700-V Has your company decided to move toward a replicated Autodesk Vault software environment? Does your company

More information

TestManager Administration Guide

TestManager Administration Guide TestManager Administration Guide RedRat Ltd July 2015 For TestManager Version 4.57-1 - Contents 1. Introduction... 3 2. TestManager Setup Overview... 3 3. TestManager Roles... 4 4. Connection to the TestManager

More information

DisplayLink Corporate Install Guide

DisplayLink Corporate Install Guide This document s classification is: Public This means: It can be freely distributed to Customers without an NDA needing to be in place Document Analysis Title Document number DisplayLink Corporate Install

More information

Portions of this product were created using LEADTOOLS 1991-2009 LEAD Technologies, Inc. ALL RIGHTS RESERVED.

Portions of this product were created using LEADTOOLS 1991-2009 LEAD Technologies, Inc. ALL RIGHTS RESERVED. Installation Guide Lenel OnGuard 2009 Installation Guide, product version 6.3. This guide is item number DOC-110, revision 1.038, May 2009 Copyright 1992-2009 Lenel Systems International, Inc. Information

More information

Merlin A Continuous Integration Tool for VisualWorks

Merlin A Continuous Integration Tool for VisualWorks Merlin A Continuous Integration Tool for VisualWorks Michael Meyer November 23, 2005 1 Contents Contents 1. Continuous Integration 3 1.1. Definition.................................... 3 1.2. The benefit...................................

More information

ChamberMaster - QuickBooks Guide

ChamberMaster - QuickBooks Guide ChamberMaster - QuickBooks Guide CHAMBERMASTER ChamberMaster QuickBooks Guide ChamberMaster A Division of MicroNet, Inc. 14391 Edgewood Drive Baxter MN 56425 218.825.9200 800.825.9171 support@chambermaster.com

More information

BillQuick Agent 2010 Getting Started Guide

BillQuick Agent 2010 Getting Started Guide Time Billing and Project Management Software Built With Your Industry Knowledge BillQuick Agent 2010 Getting Started Guide BQE Software, Inc. 2601 Airport Drive Suite 380 Torrance CA 90505 Support: (310)

More information

FAQ CE 5.0 and WM 5.0 Application Development

FAQ CE 5.0 and WM 5.0 Application Development FAQ CE 5.0 and WM 5.0 Application Development Revision 03 This document contains frequently asked questions (or FAQ s) related to application development for Windows Mobile 5.0 and Windows CE 5.0 devices.

More information