I think that unfortunately, it seems like my loyalties now are with the community since I have other job opportunities in the fire for now. I don't plan to do anything programming related as a job, but I do plan to manage a Cruise Control.net server one day for my open source community projects.
From: [email protected] [mailto:[email protected]] On Behalf Of Michael Powell Sent: Friday, August 19, 2011 11:32 AM To: [email protected] Subject: Re: [ccnet-user] Re: Chicken and egg build dependency Oh, it is fun. But it also earns a living. I can't believe they pay me for this... On Thu, Aug 18, 2011 at 1:50 PM, Katherine Moss <[email protected]<mailto:[email protected]>> wrote: It seems rather fun actually. Especially when doing it for enjoyment. But for now, I think I'll worry about speaking C# first before tackling anything else LOL. From: [email protected]<mailto:[email protected]> [mailto:[email protected]<mailto:[email protected]>] On Behalf Of Parker, Jeff Sent: Thursday, August 18, 2011 3:06 PM To: [email protected]<mailto:[email protected]> Subject: RE: [ccnet-user] Re: Chicken and egg build dependency Usually the reason we (myself and my fellow developers) go through a build server is because we can't guarantee the developers have the latest versions of our software installed on their machines. The build server always pulls from source control from the latest label in source control, so it should be the most recent version of the code that is built and moved to production. We also run our tests on the build server to double-check to make sure everything still works before we move to the next phase, such as moving the code to production. On another note, while initially working with CruiseControl.NET and MSBuild may seem daunting, through some work on standardizing and making common blocks, it can get much simpler to work with over time. What this means is that while one or more build administrators might have to learn the complex details of the MSBuild and CruiseControl.NET XML languages, in the long run everyone else should benefit from the resulting simpler language that the build administrators will develop. MSBuild and CruiseControl.NET both support the concepts of variables, and CruiseControl.NET supports include files for breaking up the configurations into smaller reusable chunks. These concepts can be used to produce standard build, test, and deploy structures for your projects, and then all developers need to speak is the language of the common standards. Using ourselves as an example, we have gone through the process of automating our build processes, including standardizing how the code is built and tested, including: 1. Build in debug mode 2. Run tests against the debug version, including code coverage analysis 3. Build in release mode 4. Move the code to the location where the software gets installed from When we went through this process, our MSBuild build scripts became highly standardized by using variables, to the point where only 2 variables change between build scripts: 1. The name of the project 2. The name of the project that contains the tests At that point, we were able to templatize the build file as part of a custom project template, so that even these variables are managed automatically when creating the project. As a result, we rarely have to touch the MSBuild build script (only for adjusting what is considered pass-fail for code coverage). We were also able to use the CruiseControl.NET variables and include files in ccnet.config, to standardize the build and deploy process as well, so our CruiseControl.NET configuration became very simple as well. For example, a config section for building one of our projects might look like (just an example): <cc:scope Project="ProjectName" SourceControl="$(BaseSourceControlPath)SourceControlProjectFolder"> <cc:define name="DeployLocation"> <cc:DeployLocation_TestServer /> </cc:define> <cc:BuildTestAndRelease /> </cc:scope> DeployLocation_TestServer and BuildTestAndRelease are include files that contain the standard instructions for building the project, running the tests, rebuilding as a release version, and moving the code to the next phase. Also through the use of include files, we were able to separate the individual builds each into their own files, so not everything was in the ccnet.config - just the variable definitions and the include file references so CruiseControl.NET knew where to read all of the files. To make a long story short, while this seems daunting and overwhelming at first, there is hope - it can be made much simpler and easier to work with in the long run. From: [email protected]<mailto:[email protected]> [mailto:[email protected]]<mailto:[mailto:[email protected]]> On Behalf Of Katherine Moss Sent: Thursday, August 18, 2011 1:31 PM To: [email protected]<mailto:[email protected]> Subject: RE: [ccnet-user] Re: Chicken and egg build dependency Oh. Well maybe I don't yet (probably quite likely), don't understand the full CI concept. Why would you have extra build processes if the F5 key was already pressed from developers working via their local desktops? From: [email protected]<mailto:[email protected]> [mailto:[email protected]]<mailto:[mailto:[email protected]]> On Behalf Of Michael Powell Sent: Thursday, August 18, 2011 2:25 PM To: [email protected]<mailto:[email protected]> Subject: Re: [ccnet-user] Re: Chicken and egg build dependency In the current context, I believe we're talking about MSBuild as a server-only thing, which CC.NET<http://CC.NET> would kick off. It's nothing that developers would necessarily need from their local desktops, per se. In other words, we would still work through our solutions as per usual. On Thu, Aug 18, 2011 at 11:59 AM, Katherine Moss <[email protected]<mailto:[email protected]>> wrote: I think it comes with the framework. It's hard when development is based on VS 2010 though, not to flip your finger on the F5 key and get your solution built. I'm jus using that at this time in terms of development. -----Original Message----- From: [email protected]<mailto:[email protected]> [mailto:[email protected]<mailto:[email protected]>] On Behalf Of Brad Stiles Sent: Thursday, August 18, 2011 1:31 PM To: [email protected]<mailto:[email protected]> Subject: Re: [ccnet-user] Re: Chicken and egg build dependency While it's true that Visual Studio uses MSBuild behind the scenes, MSBuild can be installed separately with the .NET Framework. It's been long enough that I don't remember, but it's either included with the framework, or at least some packages, or is available in a separate SDK download. On Thu, Aug 18, 2011 at 12:55 PM, Katherine Moss <[email protected]<mailto:[email protected]>> wrote: > But remember how MSBuild is built into Visual Studio. And it's just > XML like you all should be familiar with. > > > > From: [email protected]<mailto:[email protected]> > [mailto:[email protected]<mailto:[email protected]>] > On Behalf Of Michael Powell > Sent: Thursday, August 18, 2011 12:31 PM > To: [email protected]<mailto:[email protected]> > Subject: Re: [ccnet-user] Re: Chicken and egg build dependency > > > > Sounds like we may be on an MSBuild track anyway. I'm trying to avoid > much of that because that's just one more script we need to become > knowledgable about, but like you said, if it's a matter of licensing > what not, then plausibly we look into the targets and setup our > MSBuild environment for the build. > > On Thu, Aug 18, 2011 at 7:36 AM, Brad Stiles > <[email protected]<mailto:[email protected]>> > wrote: > >> 1. Having it be part of the Svn solution is sufficient for now. >> Minimally, we let the thing travel with the tools part of the project and >> let it be. > > If you're using a standard installation of Visual Studio for your > developers, you shouldn't really need to do this type of thing. > Installing Visual Studio components on a build server *may* require > you to have a Visual Studio license for that server. This *may* be > covered by an appropriate MSDN volume license, but you need to verify > that with your compliance folks. > > Oftimes new Visual Studio project types are supported in MSBuild using > new "targets" files and sometimes additional or modified assemblies. > If you can discern (perhaps using an installation watcher program) > what those changes are, you might be able to make just those > modifications on your build server and eliminate the need to install > either Visual Studio or any addins on the server itself. > >> 2. The setup.exe requires some user interaction anyway. It asks at >> least one or two questions that require end-user input. > > Using the command line can often eliminate the user interaction > entirely. Another option is to modify the MSI file itself to change > the queried values to the ones you want. This requires tools you may > or may not have. > >> 3. This adds a project type to the Visual Studio environment that is >> required by one of the solution's projects. Definitely more than I >> want to get into for any CI configuration concerns. > > If it's solely a matter of additional assemblies, that can usually be > managed by source control, in your case, Subversions svn:externals > capability. If it's a matter of targets in MSBuild build files, then > you have a slightly different problem. Making those changes one time > and forgetting about them is likely to be much easier. > >> All that said, good to know about the <msiexec/> block. > > To be clear, I was talking about using MSIEXEC.EXE, the program to > which msi files are tied in Windows, not anything in NAnt or > CC.NET<http://CC.NET>. > > Brad > >
