IgorShare Thoughts and Ideas

Consulting and Training

Archive for the ‘Continous Integration’ Category

Continuous Education

Posted by Igor Moochnick on 01/26/2012

VIDEO: Windows Azure on Cloud9 – Cloud9 IDE Blog
VIDEO: Skills Matter : In The Brain of Udi Dahan & John Stevenson
VIDEO: Gil Zilberfeld interviews Uncle Bob Martin
Jasmine-BDD: A Screencast On The Standalone Test Runner | ThoughtStream.new
VIDEO: ayende on ravendb problem
VIDEO: Session 02: Introduction to Compute
Northwind Starter Kit Review : Data Access and the essence of needless work
Ruby on Rails in Windows Azure – Part 2 – Creating Windows Azure SDK 1.4 based Application to Host Ruby on Rails Application in Cloud
Pragmatic Programming Techniques: NOSQL Patterns
HBase vs. Cassandra: NoSQL Battle!
VIDEO: Skills Matter : DDD eXchange 2010: Udi Dahan on Architectura
One Millionth Tower documentary elevates the art of HTML5 – Engadget
VIDEO: DataStax Cassandra Tutorials – Managing Objects & Data In Cassandra
Skills Matter : In The Brain of Udi Dahan: CQRS, race conditions
NOSQL – Introduction on Vimeo
The Coming War on General Purpose Computation
Pragmatic Programming Techniques: Choosing between SQL and Non-SQL
Pragmatic Programming Techniques: NoSQL GraphDB
Martin Fowler: Slideument
Understanding Microsoft’s big-picture plans for Hadoop and Project Isotope
Shan Carter on data storytelling
VIDEO: Hadoop in Action
Pragmatic Programming Techniques: Between Elasticity and Scalability
Cloud Expo 2012 East
VIDEO: "The Lost Session" at KAN Malmo – Introduction to RavenDB
A Java Developer’s Guide to PaaS
VIDEO: NDC 2011: Kill Your ORM
World Wide Webber – Graph Processing versus Graph Databases
VIDEO: Building loosely-coupled apps with Windows Azure Service Bus Topics and Queues
Procrastineering – Project blog for Johnny Chung Lee: Low-Cost Video Chat Robot
Going realtime with Socket.IO
WebSocket and Socket.IO
Asynchronous scalable web applications with real-time persistent long-running connections with SignalR
Scott Hanselman’s 2011 Ultimate Developer and Power Users Tool List for Windows
patterns & practices: Project Silk
Martin Fowler: StranglerApplication
What’s in (and missing from) Microsoft’s latest batch of Azure cloud update
Introduction to Spring Data Neo4j
Raspberry Pi’s $35, 700MHz Linux computer enters manufacturing
Scenario-based Unit Tests for DDD with Event Sourcing – Journal – CQRS and
Pretotyping
I’m a phony. Are you?
How Trello is different
How to handle relations in RavenDB
Design Patterns for Distributed Non-Relational Databases

Posted in Architect, Continous Integration, Intelligence Amplification, Thoughts, Training | Leave a Comment »

Agile Design: Best Practices – we KNOW it’s possible

Posted by Igor Moochnick on 05/12/2011

Finally got around to clean up the slide deck and improve the presentation flow. Please enjoy the “Best Practices for the Agile Design”.

Posted in Agile, Composite Applications, Continous Integration, Organization, Presentations, Thoughts, Tutorials | Leave a Comment »

ProductCamp Boston: Building lean products with distributed agile teams

Posted by Igor Moochnick on 04/12/2011

A week ago (Sat 4/2/2011) gave a presentation about tips, tricks and best practices that can greatly help you to build products with the distributed teams.

Product Camp Boston 4/2/11

Thanks for the organizers of the ProductCamp (http://productcampboston.org/) and all the attendees for making a great event.

Posted in Agile, ALM, Community, Composite Applications, Continous Integration, Design, Kanban, Organization, Presentations, Thoughts, Tutorials | Leave a Comment »

Installing a second TeamCity build agent on the same server

Posted by Igor Moochnick on 03/27/2011

1. Install a new build agent (uncheck the Windows service) on a different port and a different path.

Ex: ownPort = 9092

2. Change the buildAgent.properties file:

Ex: name=BuildAgent2

3. Add a Windows service for the build agent:

sc create TCBuildAgent2 DisplayName= "TeamCity Build Agent Service2" start= auto binPath= "C:\TeamCity\buildAgent2\launcher\bin\TeamCityAgentService-windows-x86-32.exe -s C:\TeamCity\buildAgent2\launcher\conf\wrapper.conf wrapper.ntservice.account=

If you’ve installed the agent to run under non-System credentials your password will be written in the registry in plain text. Don’t forget to remove it from there.

Posted in Continous Integration, TeamCity | Leave a Comment »

Teaching TFS custom activity to work with the Svn, Cvs, Git and other source control command line tools

Posted by Igor Moochnick on 12/27/2010

After the SharpSvn fiasco (described in the previous post), I’ve decided temporarily put this dependency loading issue aside and, instead of running native Svn client, to use one of the command-line Svn interfaces. I’ve tried to keep the activity interface generic enough so you can configure it to use any of the available command-line source control clients (not only Svn but Cvs, Git, Mercurial, etc…)

As a first step the following 4 common and mostly changed parameters were identified:

  1. Source location (usually a Url)
  2. Destination for check-out
  3. Username
  4. Password

This list defined all the input parameters for the Svn custom activity (plus extra one that carries the the command line template):

        [RequiredArgument]
        public InArgument<string> SvnToolPath { get; set; }

        [RequiredArgument]
        public InArgument<string> SvnCommandArgs { get; set; }

        [RequiredArgument]
        public InArgument<string> DestinationPath { get; set; }

        [RequiredArgument]
        public InArgument<string> SvnPath { get; set; }

        [RequiredArgument]
        public InArgument<svncredentials> SvnCredentials { get; set; }

The rest of the activity takes care of building a command line from a provided template by replacing the placeholders with the provided parameter values and executing the external process:

namespace SvnActivityLib
{
    [BuildActivity(HostEnvironmentOption.All)]
    [BuildExtension(HostEnvironmentOption.All)]
    [Designer(typeof(SvnActivityDesigner))] 
    public sealed class SvnActivity : CodeActivity
    {
        [RequiredArgument]
        public InArgument<string> SvnToolPath { get; set; }

        [RequiredArgument]
        public InArgument<string> SvnCommandArgs { get; set; }

        [RequiredArgument]
        public InArgument<string> DestinationPath { get; set; }

        [RequiredArgument]
        public InArgument<string> SvnPath { get; set; }

        [RequiredArgument]
        public InArgument<svncredentials> SvnCredentials { get; set; }

        protected override void Execute(CodeActivityContext context)
        {
            TrackMessage(context, "Starting SVN action");

            string destinationPath = context.GetValue(this.DestinationPath);
            string svnPath = context.GetValue(this.SvnPath);
            string svnToolPath = context.GetValue(this.SvnToolPath);
            string svnCommandArgs = context.GetValue(this.SvnCommandArgs);
            SvnCredentials svnCredentials = context.GetValue(this.SvnCredentials);

            string svnCommand = Regex.Replace(svnCommandArgs, "{uri}", svnPath);
            svnCommand = Regex.Replace(svnCommand, "{destination}", destinationPath);
            svnCommand = Regex.Replace(svnCommand, "{username}", svnCredentials.Username);
            TrackMessage(context, "svn command: " + svnCommand);

            // Never reveal the password!
            svnCommand = Regex.Replace(svnCommand, "{password}", svnCredentials.Password);

            if (File.Exists(svnToolPath))
            {
                var process = Process.Start(svnToolPath, svnCommand);
                if (process != null)
                {
                    process.WaitForExit();
                    process.Close();
                }
            }

            TrackMessage(context, "End SVN action");
        }
    }
}

To provide a nice UI element with the Svn logo, a custom designer was added (note the “Designer” attribude on top of the SvnActivity class). Here is the designer’s XAML:

<sap:ActivityDesigner x:Class="SvnActivityLib.SvnActivityDesigner"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:sap="clr-namespace:System.Activities.Presentation;assembly=System.Activities.Presentation"
    xmlns:sapv="clr-namespace:System.Activities.Presentation.View;assembly=System.Activities.Presentation" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    Collapsible="False" 
    ExpandState="False" 
    UseLayoutRounding="False" 
    d:DesignHeight="22" d:DesignWidth="200" mc:Ignorable="d">
    <sap:ActivityDesigner.Icon>
        <DrawingBrush>
            <DrawingBrush.Drawing>
                <ImageDrawing>
                    <ImageDrawing.Rect>
                        <Rect Location="0,0" Size="16,16" ></Rect>
                    </ImageDrawing.Rect>
                    <ImageDrawing.ImageSource>
                        <BitmapImage UriSource="Resources\Subversion.png" ></BitmapImage>
                    </ImageDrawing.ImageSource>
                </ImageDrawing>
            </DrawingBrush.Drawing>
        </DrawingBrush>
    </sap:ActivityDesigner.Icon>
 </sap:ActivityDesigner>

 

The Build Template, hosting this activity, will requre the following addition to it’s Arguments list:

image

as well as a couple of extra entries in the metadata:

image

After the activity was build and checked in to the CustomActivities location (see the previous post) I was able to configure new values in the build definition:

image

Notice the “Svn arguments” parameter that provides a command line template.

In the build definition metadata I’ve configured only 2 parameters to appear during the build submission (SvnPath and SvnCredentials) so they can be configured in both places (during the editing and the submission), but the rest of the parameters are configured to appear only during the build editing step. This allows any developer to provide his own “patch” source location and his own credentials during the build submission. If your security model doesn’t allow this – make sure to modify the metadata section accordingly.

This is it for now – I’ll talk about the whole credentials mystery in the next post.

Posted in ALM, C#, Continous Integration, Source Control, TFS, Tutorials, Workflows | 1 Comment »

The importance of nightly builds (hilarious)!

Posted by Igor Moochnick on 07/08/2009

I’ve preached to all my customers and co-workers the importance of Continuous Integration. Now I’ll be pointing them to this training course – they’ll learn and will have fun at the same time.

It’s hilarious!

Posted in Agile, Continous Integration, Tutorials | Leave a Comment »

 
%d bloggers like this: