Archive for the ‘C#4.0’ Category

h1

TFS 2010 Teambuild | Mythen zum Gated Check-In

September 30, 2011

Ich hatte ja schon vor Tagen einen Artikel über Gated Check-In aus Entwicklersicht geschrieben und versucht ein paar Mythen auszuräumen. Trotzdem kommen immer wieder neue Fragen und Fragezeichen auf.

Ein Kollege wollte gerne eine Check-In Policy, die ein “Get Latest” vor dem Check-In simuliert, weil sie das Gefühl hatten, dass dank des Gated Check-In Code verloren geht. Das konnte ich nicht glauben und war auch der Meinung, das so eine Check-In Policy völliger Quatsch ist. Beim Check-In wird der Entwickler sowieso gezwungen bei Konflikten einen Merge am Client zu machen. Wenn die Konflikte behoben sind kann er den Check-In vornehmen und der Gated Build würde den Code bei erfolgreichem Build auch in den TFS Server einchecken.

Was ist also der Grund für den Policy Wunsch bzw. der Grund für den “verlorenen” Code? Nehmen wir mal an zwei oder mehr Entwickler ändern genau an den gleichen Codezeilen und versuchen nahezu zeitgleich einzuschecken. Bei jedem Entwickler wird auf seinem Client mit dem Stand der im TFS eingecheckt ist ein Merge vollzogen und kein Konflikt festgestellt. Der Code geht also an den Team-Build und reiht sich in die Schlange der Gated Builds ein. Siehe Abbildung 1.

clip_image002
Abb. 1: Gleichzeitige “Gated Builds” werden in Build-Queue eingereiht.

Wenn der Code erfolgreich gebaut hat, wird der Code des “schnellsten” Entwicklers an den TFS Server übergeben. Der nächste Gated Build kann aus der Queue durch der Build-Controller gestartet werden. Jetzt kann es passieren, dass der Gated Build schon am Anfang fehl schlägt, wenn kein “Auto-Merge” durchgeführt werden kann (weil ja die Entwickler auf der gleichen Codezeile Änderungen vorgenommen hatten). Das erwartete Verhalten ist also, dass folgende Builds aus der Queue immer nur nacheinander und nie zeitgleich ablaufen und dass bei Merge-Konflikten der Build fehlschlägt und der Entwickler erneut Clientseitig Mergen muss um einen weiteren Gated Build anzustoßen.

Jetzt haben wir aber das Phänomen, dass wie in Abbildung 2 zu sehen, die weiteren Gated Builds aus der Queue NICHT wie erwartet nacheinander Loslaufen sondern auf einmal gleichzeitig auf verschiedenen Agents?!

clip_image002[4]
Abb. 2: Fehler? “Gated Builds” werden aus der Build-Queue gleichzeitig gestartet.

Hier liegt vermutlich das Problem. Jeder Build für sich ist auf dem Agent valide und geht erfolgreich durch und wird in den TFS eingecheckt. Wenn aber Änderungen an gleichen Codepassagen vorhanden sind, kann es passieren, dass Code verloren geht?! Wer hat ähnliche Phänomene und kann Tipps geben.

In verschiedenen Foren haben wir ähnliche Probleme entdeckt, aber noch keine Lösung. Wir nutzen nur einen Build-Controller, der wiederum sehr viele Agents verwaltet. Es ist auch schon häufiger aufgetreten dieses Problem.

Fazit: Es würde definitiv keine Check-In Policy helfen, die “Get Latest” vor dem Check-In erzwingt, denn Merge Konflikte muss der Entwickler sowieso manuell lösen und das geht nur gegen den Code der im TFS eingecheckt ist. Würde die Queue im Falle eines Gated Check-In auch wie erwartet arbeiten (also alle Builds sequentiell) würde aus meiner Sicht auch nie Code überschrieben/verloren gehen.

Advertisements
h1

Microsoft Process Template (MPT) mit TFS2010

Juni 4, 2010

Microsoft hat auf Codeplex ein Template zur Verfügung gestellt, dass für Visual Studio Team System 2008 (VSTS) eine hierarchische Abbildung von Work Items ermöglicht. Mit TFS 2010 wird die Hierarchie nun aber von Haus aus unterstützt und somit ist mit Sicherheit eine Reimplementierung dieses Templates notwendig. Zur Zeit steht aber weder dieses Template auf Codeplex zur Verfügung noch, dass es Infos zu diesem Template im Zusammenhang mit TFS 2010 existieren.

Wir haben dieses Template etwas abgewandelt eingesetzt und standen jetzt aber vor dem Schritt, wie wir dieses weiter unter TFS 2010 supporten, bevor die Projekte auslaufen oder auf neue Templates migriert werden. Die gute Nachricht vorweg, wir haben einen Weg für uns gefunden, den zugehörigen Dienst weiterhin funktionstüchtig zu halten. Dazu hier ein kurzer Abriss zu den notwendigen Schritten:

  1. Es bietet sich an die Solution mit Visual Studio 2010 zu öffnen und die verwendeten Referenzen auf den TFS neu zu setzen (von Version 9.0.0.0 auf 10.0.0.0)
    image
    Das gilt für das Projekt “MptCodeLibrary” und “Test.UnitTest”
  2. Ein Recompile des Codes liefert jetzt einige Warnungen von denen man einige sehr schnell abarbeiten kann. Folgende Änderung sollte man auf jeden Fall durchführen:
       1: TeamFoundationServer tfs 

       2:   = TeamFoundationServerFactory.GetServer(serverName)

    ersetzen durch:

       1: TfsTeamProjectCollection tfs 

       2:   = TfsTeamProjectCollectionFactory.

       3:     GetTeamProjectCollection(new Uri(serverName));

  3. In der App.config müssen die WCF Einstellungen an 2 Stellen angepasst werden, weitere Infos findet man auch hier und hier

    image

    basicHttpBinding zu wsHttpBinding 
    und wsHttpBinding muss  an der entsprechenden Stelle noch konfiguriert werden:

       1: <bindings>

       2:     <webHttpBinding>

       3:     ...

       4:     </webHttpBinding>

       5:   <wsHttpBinding>

       6:     <binding name="noSecurity">

       7:       <security mode="None"/>

       8:     </binding>

       9:   </wsHttpBinding >          

      10: </bindings>

  4. Es muss jetzt die URL der Collection zu den Team Projekten in die App.config eingetragen werden.
       1: <teamServerSection>

       2:  <teamservers>

       3:   <teamserver servername="http://tfs:8080/tfs/default" />

       4:  </teamservers>

       5: </teamServerSection>

  5. In der TeamFoundationFacade muss in einer Methode die Sid ermittelt und mit übergeben werden (alter Code wurde auskommentiert):
       1: public void SignupForReceivingEvent(string serverName, 

       2:     string receiverPath, string filterExpression)

       3: {

       4: ...

       5:   try

       6:   {

       7:     //eventEndpoint.SubscribeEvent("Sid is ignored", 

       8:     //  "WorkItemChangedEvent", filterExpression, delPreference);

       9:     // get sid from current user

      10:     string sid 

      11:         = System.Security.Principal.WindowsIdentity

      12:         .GetCurrent().User.Value;

      13:     eventEndpoint.SubscribeEvent(sid, "WorkItemChangedEvent", 

      14:         filterExpression, delPreference);

      15:   }

      16: ...

      17: }

  6. Jetzt sollte man den Stand erreicht haben, dass wieder Events am Service ankommen, doch leider werden sie noch nicht richtig bearbeitet. Dazu muss eine weitere kleine Anpassung in GlobalListBuilder erfolgen (in diesem Fall wurde nur für eine Collection eine Unterstützung eingebaut!!!):
       1: private string DeriveTfsServerName(

       2:   XContainer workItemChangedEvent)

       3: {

       4:   ...

       5:   Uri artifactMoniker = new Uri(displayUrlElement.First().Value);

       6:   //IEnumerable<TeamServerConfiguration> teamServers 

       7:   //   = from teamServer in mptConfiguration.TeamServers where ...

       8: ...

       9:   //if (teamServers.Count() <= 0)

      10:   //    throw new MptException("Could not determine the TFS...

      11:   return artifactMoniker.Scheme + "://" 

      12:          + artifactMoniker.Authority 

      13:          +"/tfs/defaultCollection";

      14: }

  7. Jetzt sollte sowohl der Dienst als auch das TFS Event empfangen und bearbeiten funktionieren.

Ziel ist es nach der Migration des TFS 2008 auf TFS 2010 die Projekte mit dem MPT Template weiter zu unterstützen, aber perspektivisch auf ein neues Template zu migrieren. Dazu wollen wir die Tools von der TfsIntegration Plattform verwenden. Vielleicht kann ich ja dazu in den kommenden Wochen auch noch Erfahrungsberichte veröffentlichen.

h1

Neues von der 2010er Welle – TFS2010, SharePoint 2010

Oktober 19, 2009

Heute ist nun nach langem Warten endlich die Beta 2 (mit “Go live” Lizenz) des Microsoft Team Foundation Servers 2010 veröffentlicht worden. Auch das Lizenzmodell und die Bezeichnungen der Visual Studio 2010 Versionen haben sich geändert. Sie heißen jetzt:

  • Express
  • Professional
  • Premium
  • Ultimate

Wir haben uns den Team Foundation Server 2010 Beta 2 und die Visual Studio 2010 Ultimate Beta 2 Edition schon runtergeladen und morgen geht die Evaluation los. Sowohl intern als auch für ein Kundenprojekt haben wir schon auf die Beta 2 gewartet. Da ist in den nächsten Wochen und Monaten sicher noch die ein oder andere News hier zu erwarten.

Bezüglich Sharepoint 2010 gab es heute mit dem Start der Sharepoint-Konferenz 2009 in Las Vegas auch die dazu passenden Neuigkeiten. So ist vor allem auch für die Entwickler mit Visual Studio 2010 + Sharepoint 2010 ein erheblicher Schritt nach vorn unternommen worden.

Weitere englischsprachige Anleitungen zu Visual Studio 2010 (mit Sharepoint 2010, Silverlight, WPF, Parallel Computing, Office Development, Workflow Foundation und vielen mehr) findet ihr hier.

Viel Spaß, ich hoffe und denke den werde ich auch haben;)

h1

C# 4.0, Azure, Application Architecture Guide

Oktober 28, 2008

Ich war ja schon bei C#3.0 dabei die neuesten Features zu beschreiben und zu zeigen. Jetzt steht schon wieder C#4.0 vor der Tür und ich werde wieder hellhörig. Sicher werde ich in den kommenden Monaten meine Augen und Ohren offen halten und nach Beispielen und Beschreibungen suchen um diese dann zu gegebenen Zeitpunkt hier vorzustellen. Ein erster Link von Dariusz soll schon mal Geschmack bereiten. Unter C# Future kann man auch noch ein paar Sachen nachlesen.
Das ganze testen lässt sich unter dem gerade erschienenen Visual Studio 2010 CTP (Rosario) mit dem .NET Framework 4.0.

Dann ist mir noch Azure aufgefallen. Eine Plattform von Microsoft für Microsoft Dienste aus dem Netz. Das ganze passt in die Thematik SaaS (Software as a Service), S+S (Software and Services), Cloud Computing und sicher einige andere Begriffe. Hier gibt es auch eine kleine Beschreibung von Dariusz.

Ich bin auch immer einer der sich gerne auf Codeplex umschaut und da sind mir heute wieder zwei neue interessante Seiten zum Thema Architektur von Anwendungen unter Verwendung von Microsoft Produkten, Plattformen und Frameworks aufgefallen:

  1. patterns & practices Application Architecture Guide – v2.0 (Beta 1 Release) – eine Art Buch
  2. patterns & practices: App Arch Guide project – FAQs, Videos, Cheat Sheets