Whilst seting up a Release Management 2015.1 server we came across a strange problem. The installation appears to go OK. We were able to install the server and from the client created a simple vNext release pipeline and run it. However, the release stalled on the ‘Upload Components’ step.
Looking in event log of the VM running the Release Management server we could see many many errors all complaining about invalid XML, all in the general form
Message: Object reference not set to an instance of an object.: \r\n\r\n at Microsoft.TeamFoundation.Release.Data.Model.SystemSettings.LoadXml(Int32 id)
Note: The assembly that it complaining about varied, but all Release Management Deploayer related.
We tried a reinstall on a new server VM, but got the same results.
Turns out issue was due to the service account that the Release Management server was running as; this was the only thing common between the two server VM instances. We swapped to use ‘Network Server’ and everything lept into life. All we could assume was that some group policy or similar settings on the service account was placing some restriction on assembly or assembly config file loading.
You can use the filePath type in a vNext VSTS/TFS task as shown below
"label": "Settings File",
"helpMarkDown": "Path to single settings files to use (as opposed to files in project folders)",
to present a file picker dialog in the build editor that allows the build editor to pick a file or folder in the build’s source repository
While doing some task development recently I found that this control did not behave as I had expected
- If a value is explicitally set then the full local path to selected file or folder (on the build agent) is returned e.g. c:\agent\_work\3\s\yourfolder\yourfile.txt – just as expected
- If you do not set a value, or set a value then remove your setting when you edit a build, then you don’t get an empty string, as I had expected. You get the path to the BUILD_SOURCESDIRECTORY e.g. c:\agent\_work\3\s – makes sense when you think about it.
So, if as in my case, you wanted to have specific behaviour only when this values was set to something other than the repo root you need to add some guard code
if ($settingsFile -eq $Env:BUILD_SOURCESDIRECTORY )
$settingsFile = ""
Once I did this my task behaved as a needed, only running the code when the user had set an explicit value for the settings file.
Updated 22 Mar 2016 This tasks is available in the VSTS Marketplace
I have previously posted on how a PowerShell script can be used to run StyleCop as part of vNext VSTS/TFS build. Now I have more experience with vNext tasks it seemed a good time to convert this PowerShell script into a true task that can deploy StyleCop and making it far easier to expose the various parameters StyleCop allows.
To this end I have written a new StyleCop task that can be found in my vNext Build Repo, this has been built to use the 126.96.36.199 release of StyleCop (so you don’t need to install StyleCop in the build machine, so it works well on VSTS).
To use this task:
- Clone the repo
- Build the tasks using Gulp
- Upload the task you require to your VSTS or TFS instance
Once this is done you can add the task to your build. You probably won’t need to set any parameters as long as you have settings.stylecop files to define your StyleCop ruleset in the same folders as your .CSPROJ files (or are happy default rulesets).
If you do want to set parameters your options are:
- TreatStyleCopViolationsErrorsAsWarnings - Treat StyleCop violations errors as warnings, if set to False any StyleCop violations will cause the build to fail (default false).
And on the advanced panel
- MaximumViolationCount - Maximum violations before analysis stops (default 1000)
- ShowOutput - Sets the flag so StyleCop scanner outputs progress to the console (default false)
- CacheResults - Cache analysis results for reuse (default false)
- ForceFullAnalysis - Force complete re-analysis (default true)
- AdditionalAddInPath - Path to any custom rule sets folder, the directory cannot be a sub directory of current directory at runtime as this is automatically scanned. This folder must contain your custom DLL and the Stylecop.dll and Stylecop.csharp.cs else you will get load errors
- SettingsFile - Path to single settings files to use for all analysis (as opposed to settings.stylecop files in project folders)
When you run the build with the new task you sould expect to see a summary of the StyleCop run on the right
Update 6 Feb 2016 - I have made some major changes to this task to expose more parameters, have a look at this post that details the newer version
Today a good way to pull together all your measures of code quality is to run SonarQube within your automated build; in a .NET world this can show changes in quality over time for tools such as FxCop (Code Analysis) and StyleCop. However sometime you might just want to run one of these tools alone as part of your automated build. For Code Analysis this is easy, it is built into Visual Studio just set it as a property on the project. For StyleCop it is a bit more awkward as StyleCop was not designed to be run from the command line.
To get around this limitation I wrote a command line wrapper that could be used within a build process, see my blog post for details of how this could be used with vNext build.
Well that was all best part of a year ago. Now I have more experience with vNext build it seems wrong to use just a PowerShell script when I could create a build task that also deploys StyleCop. I have eventually got around to writing the task which you can find in my vNextBuild repo.
Once the task is uploaded to your TFS for VSTS instance, the StyleCop task can be added into any build process. The task picks up the file locations from the build environment variables and then hunts for StyleCop settings files (as detailed in my previous post). The only argument that needs to be set is whether the buidl should fail if there are violations
Once this is all setup the build can be run and the violations will be shown in the build report, whether the build fails or passes is down to how you set the flag for the handling of violations
There have been some requests for more information about the areas I convered in my presentation at the Black Marble Tech Update 2016 that we held last week.
I could send out slides, but I think it is far more useful to point you at the ‘live’ resource on the Internet. The key reason for this is that the whole of the Visual Studio family is now being released at a ‘cloud cadence’ i.e. new features are appearing rapidly, so anything I write will soon be out of date. Better to look at the live sources where possible.
Hope you find these useful pointers
One of the things I showed at NDC was a Raspberry Pi 2 with a FEZ Cream Hat (I know that sounds just so wrong, but that is its name). The FEZ Cream offers Gadgeteer ports out of the Pi, which is just awesome. What this means in reality is you get objects to program against not ports and lines which is mush easier; for time, teaching children and me.
Not all gadgeteer modules are supported, mainly those that either are already on board the Pi or dont make sense (display,sd card,wifi etc), but all the ones you want are.
Development is done in Visual Studio inside a UWP application. I think this key point of the application is a C# / XAML application which is retargeted for the Pi by selecting ARM instead of x32/64. I will do a video as a follow up.
Fez Cream – GHI Electronics
Everything you need can be found in the FEZ Cream Developers' Guide.
I bought mine from Generation Robots http://www.generationrobots.com/en/
Here is a rough walkthrough of building and running an app on Windows 10 IOT core on a Pi, video to follow
You will need a Raspberry Pi 2b a SD Card ( 8Gb+ )
Windows 10 on PI Check List
- Windows 10 IOT Core Dashboard is your friend download it from http://ms-iot.github.io/content/en-US/GetStarted.htm
- Build a SD card using the core dashboard
- Insert into Pi and Boot (wait, the first boot takes a while), remember to connect a display, for the first boot I suggest unplugging all external usb devices bar keyboard and mouse.
- Update Visual Studio 2015 to Update 1 (if you dont have 2015, download the community edition and update that) here
- Install the IOT core Templates from Tools-Extensions Updates into Visual Studio here
- Build a UWP application
- Reference Manager - Universal Windows - Extensions - Windows IOT extensions for the UWP
- Change build to ARM
- Change Local Machine to Remote Machine, in the dialog select the IP address your PI is showing on its display
- Deploy and Run (F5)
The management portal is Windows 10 Device Portal (IP:8080)
Set the package name in the packaging section of the package.appmanifest, so when you select it from the portal it is easy to find
Remember to shut the device down.
The Intel Edison unit is great for building IOT, people have been asking where to get the bits and for more general information
I would suggest getting the Arduino kit to get started with. I enjoy the Xadow(below) much more but I struggled to get the Edison updated first time on the Xadow but not the Arduino (but that could have been me).
Intel IOT https://software.intel.com/iot
Intel Examples http://www.instructables.com/id/Intel/
Intel Edison Suppliers ( for reference )
I also showed in my talk the Seed Studio Xadow kit, it comes with a mini screen and sensors
The Xadow kit allows you to build rather nifty devices by plugging modules together which is just superb.
in the UK (for reference)
Active Robitics Stock the Xadow kit http://www.active-robots.com/xadow-wearable-kit-for-intelr-edison
I do not recomend or warranty any suppliers, they are for reference only
I strongly recomend you watch a great security talk on IOT by
Clemens Vasters and Dan Rosanova
NDC London 2016 Talks (Videos not up yet, will update as soon as they are ready)
Barry Dorrans + Troy Hunt
This is the list of recomended books on IOT I shared in my session
Enterprise IOT O'Reilly http://shop.oreilly.com/product/0636920039433.do
Abusing the Internet of Things O'Reilly http://shop.oreilly.com/product/0636920033547.do
I will update this as I find and approve of new books
I had a great time at NDC 2016. It was a very well organised event, everybody enjoyed the event, content and the food.
Huge thanks to the great and efficient organisation by the NDC team.
Also thanks to the great people with clearly great taste who attended my talk.
I am separating the post into a few areas so I can keep updating them without people having to read long lists and work out what has changed.