Saturday, July 19, 2014

TFS2013 Build, New Features Overview 1

TFS2013, brought many ALM ,cource control and  web access changes.
one of these changes was the integration of Git as a source control from Team projects.
another small one was adding scripts to the build templates.

TFS2013 brings us 2 new Build Templates
  1. TFVCTemplate.12.Xaml
  2. GitVCTemplate.12.Xaml
i will talk most on the TfvcTemplate.
here the template ,as you can see it's very simple compared to the previous versions (tfs2010 /2012).


here is the exception handling 
 here is the finally clause of the Try. the most important activity here is the "Reset the Environment".
this activity clears all the TF build environment variable which will talk about later.
 the template contains no If statements or parallel. so how does it control the activities?
simple each activity has an Enable switch.
also you might notice that there is no "for-each" like for the MSBuild like previous versions.
this means that a lot of the logic was entered to the MSBuild Activity.
you might also notice that there is no Get Build or Create workspace.
this was done to expose some common variables to the power shell scripts

CodedUI - Running tests on remote machines

CodedUI is just one of many UI testing tools.
It's a great tool for testing UI although it has it's problems.
but this post does not talk about the problems or it's wonderful abilities.

I want to show you how you can run the codedui Test from a build machine or directly from VS2010/2012 on VMs.

first of all we need to install a Test Rig, meaning install Test Controller and Test agents
you can use the following link to do that: http://msdn.microsoft.com/en-us/library/vstudio/hh546459.aspx

P.S: since we are not using the Lab Management don't associate the controller with a collection. also make sure the test agent runs in interactive mode.

we then need to set up the test settings file to execute the test remotely and give it the test controller name.

set the test setting file as active


now we are ready to run the codedui tests and they will run on the VM.
but it fails, it says something about remote connection not active?
well yes one of the draw backs of running on VMs you need an active RDP connection and minimized is no good, it must be up.

luckily there is a workaround, every OS running as VM has a console session that is always open against the host. we use the following command to use it:
tscon RDP-Tcp#0 /Dest:Console

more information about TsCon: http://technet.microsoft.com/en-us/library/cc770988.aspx

just 2 things:
1. you are local admin on the machine (you need permissions on Console session)
2. after you run this command you are automatically disconnected!!!

because of option 2 i always add the video data collector
[image]
so i can see the test result. the CodedUI log is hard to decipher.

you will notice that the test if it failed was usually due to the low resolution of the console.
for this problem i created a special data collector that has the ability to change the resolution of the machine,
I created a "Change Resolution Data Collector".

https://onedrive.live.com/redir?resid=C4BEA458C5283F0B!270&authkey=!APVYd1IOyjoryDk&ithint=file%2c.msi

Sunday, April 28, 2013

Check SQL Server Installed Components

Once in while i get to a client that performs the TFS installation on his own, generally most of them do a bad installation (maybe i just go to the bad ones....)
the first thing i do is to check the SQL installation.
basically there are 2 ways:
1. Add/Remove Programs (Slow and painfully...)
2. SQL Server features discovery Report (short and informative)

to get to the report, we Open "SQL Server Installation Center"
 

 
Click on "Tools->Installed SQL Server features discovery Report"
 
you'll get an HTML report of all the features installed on the machine with their version.

SQL Server Name Update

once in a while i encounter clients that only after the installation of the SQL rememeber that the server name is not what they wanted.....
 
normally we had to reinstall the whole server again. but luckly we can update the SQL Server name After the machine change (connection to TFS after rename is a different issue...)
 
run the following in SSMS:
  1. run "Select @@servername" to verifiy the current server name
  2. run the following script to update the server name 
  3.          sp_dropserver 'old_name'
             go
             sp_addserver 'new_name','local'
             go
  4. Restart SQL Server service. I prefer the command prompt for this, but you can just as easily do it in Services under the Control Panel
    • net stop mssqlserver
    • net start mssqlserver
  5. Then after that is done run "select @@servername" to check the new name
 
 
 
 
 
 
 

How To: Find the SQL Version that is Installed

I Get to do a lot of TFS upgrades and migrations. there is one critical element in these actions,
that is the SQL Server, installation of a wrong version of SQL or missing some updates will cause problem restoring the databases and a big headache

so first we can use this query to check service pack and product edition (Developer / standard / Enterprise)

SELECT SERVERPROPERTY('productversion'),SERVERPROPERTY('productlevel'),SERVERPROPERTY('edition')

and for a more specific identification we can take the Version that is written in the SSMS
and check it against this site: http://sqlserverbuilds.blogspot.com/
this site contains a list of all patches and their corresponding version

Saturday, April 13, 2013

Web Deployment in TFS2012 - Part 2

In the previouse post i have shown how to publish.
this we publish the whole site, but what if i need external resources or exclude some config files?
so i looked around good people and here is what i found (also validated):

Adding to the Deployment
 <PropertyGroup>
    <CopyAllFilesToSingleFolderForPackageDependsOn>
      CustomCollectFiles;
      $(CopyAllFilesToSingleFolderForPackageDependsOn);
    </CopyAllFilesToSingleFolderForPackageDependsOn>
  </PropertyGroup>
 
  <Target Name="CustomCollectFiles">
    <ItemGroup>
      <_CustomFiles Include="D:\Dev\W2012TFS2012Prd\DefaultCollection\Test\MySites\MvcApplication\Properties\PublishProfiles\**\*" />
 
      <FilesForPackagingFromProject  Include="%(_CustomFiles.Identity)">
        <DestinationRelativePath>Extra Files\%(RecursiveDir)%(Filename)%(Extension)</DestinationRelativePath>
      </FilesForPackagingFromProject>
    </ItemGroup>
  </Target>


Exclude From Deployment
<PropertyGroup>
    <ExcludeFilesFromPackageDependsOn>
        $(ExcludeFilesFromPackageDependsOn);
        _ExcludeAzureDlls
    </ExcludeFilesFromPackageDependsOn>
</PropertyGroup>

<Target Name="_ExcludeAzureDlls">
    <ItemGroup>
        <AzureFiles Include="@(FilesForPackagingFromProject)"
                    Exclude="@(FilesForPackagingFromProjectWithNoAzure)" />
        <ExcludeFromPackageFiles Include="@(AzureFiles)">
            <FromTarget>_ExcludeAzureEnvironmentDlls</FromTarget>
        </ExcludeFromPackageFiles>
    </ItemGroup>
</Target>

 
here is a MSDN FAQ about Web Deployment http://msdn.microsoft.com/en-us/library/ee942158.aspx it also helped abit

Web Deployement in TFS2012

Web Deployment in VS2012 relies on the new Publish framework and the use of publish profiles.
using these profile gives us the ability to create different publishing for different environments.

all that is nice and well and work splendid with the VS2012, but what with my Builds?

We have 2 options:
  1. Add to Build Definition, Process->Advanced->MSBuild Arguments "/p:DeployOnBuild=true /p:PublishProfile=<Publish Profile Name>"
  2. Add the following lines to a project configuration
<DeployOnBuild>True</DeployOnBuild>
<PublishProfile>Deploy2</PublishProfile>

Using option 2 works better with multiple websites in the same solution

Also for File System Publish update publish profile like this, because of a bug in the build:
<publishUrl>$(MSBuildThisFileDirectory)..\Deployment\</publishUrl>


$(MSBuildThisFileDirectory) - the location of the pubxml in the project properties