...
Some simple actions do not have the Using property. These actions run either natively within Continua or Windows and do not require an external tool to run. These actions include the Delay Action, Tag Build Action action and most File operation actions.
...
While it is highly recommended that you create a custom property collector, there are some scenarios where you will just want to provide the path to your build tool. Read the Why Should I Use Property Collectors section below for reasons why custom property collectors are a good idea.
In addition to the Using property, you can manually specify property collector properties by using the Query Syntax in any action.
In addition to the "Using" drop down list, you can manually specify property collector properties by using the Query Syntax in any action. Chances are at some point you will need to use an executable in your workflow that Continua doesn't have an action form, for example FTP. To do this, you would add a property collector for your FTP executable, then use the Execute Program Action and specify the property using the Query Syntax. Accessing properties from property collectors using the query syntax is described below. Please note, when specifying properties manually there's no way for Continua to check if an Agent is compatible until the action is executed (at run time). If you want to manually specify a path and have the compatibility of an Agent detected before run time, then you would need to add a Stage Option that checks of the path exists. As an example, your stage option would look something like this: $Agent.MyFtpExecutable.Path$ with the condition drop down set to Exists.
Repositories
Stage Options
...
How are Property Collectors used?
...
When creating an Action in the Stage Editor, you may notice a "Using" field at the bottom of the dialog on the first tab for all actions that are backed by an executable. Obviously actions like Delay and Tag Build Action don't require executables to perform their job so they won't have a "Using" drop down list. The "Using" list contains the property collectors that are of use to the Action. Once a property collector is selected from this list and the Action is saved to the Stage and subsequently the Configuration, a requirement is then set on the Configuration for that property needing to be available before the Configuration can execute. One common theme for all property collectors found in the "Using" drop down in Actions is they all use a property collector type that returns a Path property. By default, all Actions will take the property collector assigned to them and only use the Path property since that's all the Action needs... the path to the executable to run the Action.
...
Continua Does Not have a Property Collector for my Tool
...
Property Collectors tell Continua to gather certain properties on either an Agent or on the Server. Once a property collector has been defined, it will be sent out to all interested parties (Agents/Server, as defined in the Run On attribute of the collector). The property collector then gathers information on the target and reports those results to the server for later use. The type of property to gather is defined when the property collector is created.
...
Currently in Continua, there's 11 property collector types. Each type returns a value or a set of values. The table below outlines the property collector types and their return values.
Property Type | Description | Returns (Properties) |
---|---|---|
FinalBuilder | Enter the version number of Finalbuilder to check for. | Version, MajorVersion, MinorVersion, RelaseVersion, BuildVersion, Path. |
DotNetFramework | Select the Framework Version of .NET. | FrameworkPath, FrameworkPathX86,FrameworkPathX64, Path, PathX86, PathX64 |
VisualStudio | Select the version of Visual Studio to check for. | Path |
File Version | Check the File/Product Version of the file specified. | Version, MajorVersion, MinorVersion, RelaseVersion, BuildVersion |
Path Access Plugin | Enter a path to check for its existence. | HasAccess (boolean value) |
Path Finder Plugin | Enter a file and paths where it can be found. | Path |
Registry Key Finder | Search for a Registry Key and its Value. | Value of Registry Key Name. |
Environment Variable | Enter an environment variable to store. | <EnvironmentVariableName> |
Environment Variables | Stores a list of all environment variables. | All environment variables. |
Operating System | Stores a list of important Operating System information. | Platform, Runtime, Name, Arch, ServicePack, HostName IsWindowsOS (bool), IsMacOS (bool), IsLinuxOS (bool) |
ASP.NET MVC | Checks for a certain version of ASP.NET MVC libraries. | IsInstalled (boolean value) |
...
How to access properties gathered from Property Collectors
...
Assuming the namespace when creating the property collector was FB.
Properties |
---|
$Agent.FB.Version$ $Agent.FB.MajorVersion$ $Agent.FB.MinorVersion$ $Agent.FB.RelaseVersion$ $Agent.FB.BuildVersion$ $Agent.FB.Path$ |
DotNetFramework
Assuming the namespace when creating the property collector was NET.
Properties |
---|
$Agent.NET.FrameworkPath$ (default) $Agent.NET.FrameworkPathX86$ $Agent.NET.FrameworkPathX64$ $Agent.NET.Path$ (deprecated, retained for backwards compatibility only) $Agent.NET.PathX86$ $Agent.NET.PathX64$ |
VisualStudio
Assuming the namespace when creating the property collector was VisualStudio.
Properties |
---|
$Agent.VisualStudio.Path$ |
...
MSTest
Assuming the namespace when creating the property collector was MSTest.
Properties |
---|
$Agent.MSTest.Path$ |
...
File Version
Assuming the namespace when creating the property collector was MyFile.
Properties |
---|
$Agent.MyFile.Version$ $Agent.MyFile.MajorVersion$ $Agent.MyFile.MinorVersion$ $Agent.MyFile.RelaseVersion$ $Agent.MyFile.BuildVersion$ |
...
Path Access Plugin
Assuming the namespace when creating the property collector was MyFile.
Properties |
---|
$Agent.MyFile.HasAccess$ |
Path Finder Plugin
Assuming the namespace when creating the property collector was Programs and the property name was MyFile.
Properties |
---|
$Agent.Programs.MyFile$ |
Registry Key Finder
Assuming the namespace when creating the property collector was Registry and the property name was MyRegVal.
Properties |
---|
$Agent.Registry.MyRegVal$ |
Environment Variable
Assuming the namespace when creating the property collector was Env and the property name was BINPATH.
Properties |
---|
$Agent.Env.BINPATH$ |
...
Environment Variables
Assuming the namespace when creating the property collector was Env.
Properties |
---|
$Agent.Env.<environment_variable>$ |
The results for this property collector are the environment variables so they're different for every machine.
Operating System
Assuming the namespace when creating the property collector was OS.
Properties |
---|
$Agent.OS.Platform$ $Agent.OS.Runtime$ $Agent.OS.Name$ $Agent.OS.Arch$ $Agent.OS.ServicePack$ $Agent.OS.HostName$ $Agent.OS.IsWindowsOS$ $Agent.OS.IsMacOS $ $Agent.OS.IsLinuxOS$ |
...
Operating System
Assuming the namespace when creating the property collector was MVC.
Properties |
---|
$Agent.MVC.IsInstalled$ |
Agent/Server Properties and Property Collectors
After adding a property collector, the resulting property will show up on the Agent or Server's properties list with the actual value. Things like Operating System version will show up and any kind of check for paths/files or file access will display the true values. You won't see the changes in the UI immediately after entering a property collector. The server properties have a refresh button to force the properties to get updated and the Agent will update after polling the server which usually happens every minute or so. If a property doesn't show up, there's a chance you either configured the property collector incorrectly or the Server or that particular Agent simply couldn't find what you told it to look for.
Actions/Repositories and Property Collector Namespaces
...
Note: Patterns are case insensitive.
Actions
Plugin | Pattern | Namespace Examples |
---|---|---|
7-Zip Create 7-Zip Extract | ^7-Zip.* | 7-Zip.Ver2.1 7-Zipper 7-zip-8.09 |
Ant | ^Ant.* | Ant.9.11 Antler ant.V-10.6 |
FinalBuilder | FinalBuilder\..* | FinalBuilder.8 FianlBuilder.8.09 finalbuilder.600 |
MSBuild | ^msbuild\..* | MSBuild.2.0 MSBuild.4.0 MSBuild.12.0 |
NAnt | ^NAnt.* | NAnt10.3 nant.9.33 nantnant4 |
Visual Studio | ^VisualStudio\..* | VisualStudio.10 VisualStudio.2012 visualstudio.win |
NCover | ^NCover\.Console.* | NCover.Console.3.22 NCover.Console9 ncover.console1 |
NCover Reporting | ^NCover\.Reporting.* | NCover.Reporting.1.33 NCover.Reporting4.99 ncover.reporting2 |
NuGet Delete NuGet Install NuGet Pack NuGet Push NuGet Spec NuGet Update | ^NuGet.* | NuGet.1.99 NuGet88 nuget23 |
PowerShell | ^PowerShell.* | PowerShell.1.6 PowerShell99 powershell2 |
NUnit | ^NUnit.* | NUnit.1.22 NUnit44 nunit3 |
XUnit | ^XUnit\..* | XUnit.1.22 XUnit.123 XUnit.4.5.6 |
MSTest | ^MSTest.* | MSTest.1.22 MSTest44 mstest3 |
Repositories
Plugin | Pattern | Namespace Examples |
---|---|---|
Accurev | ^accurev\..* | Accurev.1.88 Accurev.222 accurev.testing |
^Robocopy.*
Robocopy44
robocopy.fixed
Bazaar | ^bazaar\..* | Bazaar.2.4 Bazaar.1 bazaar-old |
Git | ^git\..* | Git.1.6 Git.9 git.newest |
Mercurial | ^mercurial\..* | Mercurial.9.4 Mercurial.Latest mercurial.2 |
Perforce | ^perforce\..* | Perforce.3.6 Perforce.old perforce.1 |
Subversion | ^subversion\..* | Subversion.9.77 Subversion.newest subversion.1 |
SurroundSCM | ^surroundscm\..* | SurroundSCM.1.2 SurroundSCM.testing surroundscm.9 |
Vault | ^vault\..* | Vault.4.9 Vault.WIN vault.8 |
The picture below shows a Powershell property collector being created. Notice how the namespace value matches the powershell pattern in the Actions table above.
...
The next picture shows the property collector that was just created in the "Using" list of the PowerShell Action.
Why it's a good idea to use a property collector.
...
- Continua won't check if the path you provided exists before the build starts (with a property collector it will), therefore it won't stop you from running a build. When this happens the build will fail if it can't find the path.
- Since Continua doesn't check the path before the build starts, it will send the stage to execute on the best available agent which could be an agent where you forgot to install the NUnit executables.
- The Agent Compatibility Matrix will report agents as compatible when there's a chance they aren't if you didn't install the NUnit executables.
...