Pfizer Viagra

23Feb/090

Buying Viagra Online

Buying viagra online Last time we talked about using RAKE instead of NAnt/MSBuild to build .NET projects.  Start there if you're curious, buying viagra online or if you missed that episode.  I'll wait.

Buying viagra online I've recently been helping out a colleague to get his build server up and running for his new project.  It has been a major pain.  The source code repository is TFS, buying viagra online the build automation tool is MSBuild, buying viagra online and the CI server is Cruise Control .NET.  While these three are all decoupled from each other (TFS/TeamBuild, buying viagra online does really like MSBuild, buying viagra online however), buying viagra online its a bit of a pain to configure all of the XML, buying viagra online get plugins in the right place, buying viagra online etc. Buying viagra online to get everything to work just right.  I've been there, buying viagra online done that myself several times, buying viagra online its doable, buying viagra online but not always the easiest thing to do.

Buying viagra online Installing CruiseControl.rb is a breeze, buying viagra online except there is an issue with the latest release when trying to run it on Windows.  So instead of downloading it from the website, buying viagra online I would suggest pulling the repository with git, buying viagra online and using that version instead.  First, buying viagra online install msysgit.

Buying viagra online Then you can execute the following command in your console

git clone git://rubyforge.org/cruisecontrolrb.git

Buying viagra online The rest of the steps are pretty simple and straightforward:

cruise add projectname -u https://path.to.your.svn.repo/yourproject/trunk
cruise start

Buying viagra online That will start up the builder and the dashboard.  The dashboard, buying viagra online by default will live on port 3333, buying viagra online so browse to http://yourmachine:3333 to view your dashboard.  The path you use above should point to the directory where your RAKE file lives, buying viagra online that will make it easiest for CruiseControl.rb to get it right.

Buying viagra online It's pretty dead-simple to configure your project's builder too, buying viagra online you get sample configuration by default in your %USERDIR%/.cruise/projects/projectname/cruise_config.rb that you can modify however you want.  Here is what that sample looks like:

# Project-specific configuration for CruiseControl.rb

Project.configure do |project|

  # Send email notifications about broken and fixed builds to email1@your.site, buying viagra online email2@your.site (default: send to nobody)
  # project.email_notifier.emails = ['email1@your.site', buying viagra online 'email2@your.site']

  # Set email 'from' field to john@doe.com:
  # project.email_notifier.from = 'john@doe.com'

  # Build the project by invoking rake task 'custom'
  # project.rake_task = 'custom'

  # Build the project by invoking shell script "build_my_app.sh". Buying viagra online Keep in mind that when the script is invoked, buying viagra online
  # current working directory is [cruise data]/projects/your_project/work, buying viagra online so if you do not keep build_my_app.sh
  # in version control, buying viagra online it should be '../build_my_app.sh' instead
  # project.build_command = 'build_my_app.sh'

  # Ping Subversion for new revisions every 5 minutes (default: 30 seconds)
  # project.scheduler.polling_interval = 5.minutes

end

Buying viagra online Since it is just ruby code, buying viagra online I find that much more appealing than a big nasty XML configuration file, buying viagra online but I guess that's just my opinion.

Hooking it up to TFS

Buying viagra online I live in a TFS world at the office, buying viagra online so I have to play by those rules.  But I learned from Morpheus that "... Buying viagra online rules of a computer system... Buying viagra online can be bent. Buying viagra online Others can be broken."  I'm just bending them.

Buying viagra online The SvnBridge provides this rule bending behavior, buying viagra online by letting your subversion clients talk to your TFS repository, buying viagra online thereby allowing CruiseControl.rb to poll against what it thinks is a Subversion repository, buying viagra online but is actually a TFS repository.  It's really simple to checkout your TFS repository against it using your favorite SVN repository, buying viagra online so I won't go into it here.

Build Outputs

Buying viagra online The one thing I wanted to make super simple was putting things in the right place for build outputs.  Turns out this is fairly simple after a few minutes with the docs.  CruiseControl.rb sets an environment variable telling you where to put things.  I abstracted a getter over top of it, buying viagra online so I can conditionally pick a different output location if I'm not inside of a CruiseControl.rb build.  It looks like this:

def output_dir
  if ENV.keys.include?('CC_BUILD_ARTIFACTS')
    return ENV['CC_BUILD_ARTIFACTS']
  else
    return 'results'
  end
end

Buying viagra online As mentioned last time, buying viagra online you can see the latest version of the full RakeFile mentioned above here: http://jonfuller.googlecode.com/svn/trunk/code/CoreLib/RakeFile

Buying viagra online I'm feeling some serious CI/Build Automation bliss, buying viagra online hopefully this will get you on your way there too!

Average Rating: 5 out of 5 based on 182 user reviews.

23Feb/095

50mg Generic Viagra

50mg generic viagra When I first started with build automation, 50mg generic viagra I started out with NAnt.  I loved NAnt. 50mg generic viagra NAnt loved me. 50mg generic viagra We were happy.  I could program anything with the NAnt XML goodness.  If there wasn't a function or task to do what I wanted, 50mg generic viagra I simply wrote one, 50mg generic viagra compiled it, 50mg generic viagra  and wrote some more XML; it couldn't be any more simple!  I think the part I liked the most was the instant gratification I had with being able to automate something that would/could not otherwise be automated [at least not in a simple manner] with a little bit of XML programming.

50mg generic viagra Soon after NAnt gained popularity, 50mg generic viagra MSBuild was released from Microsoft, 50mg generic viagra which eventually effectively squashed NAnt (IMHO, 50mg generic viagra no stats to back this up).  We never migrated our scripts over to MSBuild because we had significant investment in NAnt already, 50mg generic viagra but it wasn't hard to shell off to MSBuild to compile our solutions.  Eventually I worked on a new project (at a new company) and needed to learn how to use MSBuild since we were using TFS on that project.

50mg generic viagra Shortly after I started integrating MSBuild into NAnt, 50mg generic viagra and then started learning MSBuild, 50mg generic viagra I started feeling a twinge.  Now that automation is a given, 50mg generic viagra I need something more than programming in this extremely limited XML environment.  Sure, 50mg generic viagra I can write a new MSBuild task just like I did in NAnt, 50mg generic viagra but is it worth it?  My answer is an emphatic no.  I need a great user experience.  Something that feels nice AND is powerful.

50mg generic viagra Enter RAKE.

50mg generic viagra It sounds like MAKE; if it looks and feels like MAKE, 50mg generic viagra I might vomit!  No thanks!

50mg generic viagra Glad you brought that up, 50mg generic viagra Dear Reader (If Hanselman can reference you like that, 50mg generic viagra I can too).  It's not really like MAKE.  In fact, 50mg generic viagra the things you do inside of a RAKE file, 50mg generic viagra is write Ruby code!  RAKE really gives you a nice [internal] DSL for automating tasks.  If there is something you want to do that isn't built in, 50mg generic viagra write a little ruby code to do it.  No compilation and putting the dll in the write place, 50mg generic viagra etc. 50mg generic viagra etc.  Programming in Ruby vs. 50mg generic viagra XML... 50mg generic viagra now that feels nice (requirement #1 above).

50mg generic viagra But wait!  RAKE is for building Ruby and Rails apps, 50mg generic viagra we can't possibly use it for .NET!

50mg generic viagra RAKE, 50mg generic viagra just like Ant, 50mg generic viagra NAnt or MSBuild, 50mg generic viagra is a general purpose, 50mg generic viagra task based automation tool.  It may be written in Ruby, 50mg generic viagra but it can build .NET solutions (with the help of MSBuild), 50mg generic viagra Java projects (with the help of Ant or Maven), 50mg generic viagra or Flex, 50mg generic viagra or whatever.  I call that powerful (requirement #2 above).

50mg generic viagra Please note I'm not claiming to be the first person to do this in .NET, 50mg generic viagra I've found lots of other guys doing it too.

50mg generic viagra Here is an example of my first rake script for .NET (some pieces borrowed heavily from the Fluent NH guys... 50mg generic viagra thanks!).

50mg generic viagra Enjoy/Discuss.

50mg generic viagra An always updated version of this file can be found here: http://jonfuller.googlecode.com/svn/trunk/code/CoreLib/RakeFile

require "BuildUtils.rb"
include FileTest
require 'rubygems'
gem 'rubyzip'
require 'zip/zip'
require 'zip/zipfilesystem'

#building stuff
COMPILE_TARGET = "debug"
CLR_VERSION = "v3.5"
SOLUTION = "src/CoreLib.sln"
MAIN_PROJECT = "CoreLib"

# versioning stuff
BUILD_NUMBER = "0.1.0."
PRODUCT = "CoreLib"
COPYRIGHT = "Copyright © 2009 Jon Fuller"
COMPANY = "Jon Fuller"
COMMON_ASSEMBLY_INFO = "src/CommonAssemblyInfo.cs"

desc "Compiles, 50mg generic viagra tests"
task :all => [:default]

desc "Compiles, 50mg generic viagra tests"
task :default => [:compile, 50mg generic viagra :unit_test, 50mg generic viagra :package]

desc "Update the version information for the build"
task :version do
  builder = AsmInfoBuilder.new BUILD_NUMBER, 50mg generic viagra
    :product   => PRODUCT, 50mg generic viagra
    :copyright => COPYRIGHT, 50mg generic viagra
    :company   => COMPANY
  builder.write COMMON_ASSEMBLY_INFO
end

desc "Prepares the working directory for a new build"
task :clean do
  Dir.mkdir output_dir unless exists?(output_dir)
end

desc "Compiles the app"
task :compile => [:clean, 50mg generic viagra :version] do
  MSBuildRunner.compile :compilemode  => COMPILE_TARGET, 50mg generic viagra
    :solutionfile => SOLUTION, 50mg generic viagra
    :clrversion   => CLR_VERSION
end

desc "Runs unit tests"
task :unit_test => :compile do
  runner = NUnitRunner.new :compilemode => COMPILE_TARGET, 50mg generic viagra
    :source       => 'src', 50mg generic viagra
    :tools        => 'tools', 50mg generic viagra
    :results_file => File.join(output_dir, 50mg generic viagra "nunit.xml")
  runner.executeTests Dir.glob("src/*Test*").map { |proj| proj.split('/').last }
end

desc "Displays a list of tasks"
task :help do
  taskHash = Hash[*(`rake.cmd -T`.split(/\n/).collect { |l| l.match(/rake (\S+)\s+\#\s(.+)/).to_a }.collect { |l| [l[1], 50mg generic viagra l[2]] }).flatten] 

  indent = "                          "

  puts "rake #{indent}#Runs the 'default' task"

  taskHash.each_pair do |key, 50mg generic viagra value|
    if key.nil?
      next
    end
    puts "rake #{key}#{indent.slice(0, 50mg generic viagra indent.length - key.length)}##{value}"
  end
end

desc "Packages the binaries into a zip"
task :package => :compile do
  source_files = Dir.glob("src/#{MAIN_PROJECT}/bin/#{COMPILE_TARGET}/**/*")
  dest_files = source_files.map{ |f| f.sub("src/#{MAIN_PROJECT}/bin/#{COMPILE_TARGET}/", 50mg generic viagra "#{MAIN_PROJECT}/")}
  Zip::ZipFile.open(File.join(output_dir, 50mg generic viagra "#{MAIN_PROJECT}.zip"), 50mg generic viagra 'w') do |zipfile|
    0.upto(source_files.size-1) do |i|
        puts "Zipping #{source_files[i]} to #{dest_files[i]}"
        zipfile.add(dest_files[i], 50mg generic viagra source_files[i])
    end
  end
end

def output_dir
  if ENV.keys.include?('CC_BUILD_ARTIFACTS')
    return ENV['CC_BUILD_ARTIFACTS']
  else
    return 'results'
  end
end

Average Rating: 4.5 out of 5 based on 157 user reviews.