Jenkins "Project Path" SCM - jenkins

I'm trying to set up a parameterized build.
One of the build parameters is the branchname, where I want the TFS plugin to get the project from.
Is it possible to pass an build parameter to the "project path" variable of the TFS SCM plugin. (If yes, how? I have tried several ways, but it doesn't seem to work)
This variable:
TFS Project Path

I don't think it's possible to use variable for Project path in Jenkins. The Project Path requires the name of the project as it is registered on the server. There is nowhere to define the variable.
The description of Project path is:
The Team Project and path to retrieve from the server. The project
path must start with $/, and contain any sub path that exists in the
project repository.
Check: https://github.com/jenkinsci/tfs-plugin/blob/master/README.md

You can use a "build-parameter":
and user this parameter in the TFS-settings:
But in my case I want the TFS-plugin check the TFS for code changes every 15 minutes and trigger a build if code changes were detected. Using this configuration the plugin triggers the build every 15 minutes also if there are no code changes.

Related

How to set working directory to current workspace?

I am using TFS 2010. In the build process template, I add a new workflow activity InvokeProcess to run a batch file. I need to set the working directory of this InvokeProcess to the workspace directory of the Build agent. Is there any way to do this?
Should be able to use workspace object. Just type workspace and intelisense will kick in. This is built in object that holds the path to the build workspace. Others available are sourcesdirectory and binariesdirectory. Spelling maybe wrong not in front of a pc
I follow this answer and get it resolved: https://stackoverflow.com/a/9564712/3918598
Basically, you will need to create a new local variable SourcesPath at the outter most scope and then consume it wherever you want. Do not name it SourcesDirectory because that name has already been used by some inner activities.

Modify setting in web.config on TFS build

Is it possible to modify a web.config file in one of my projects during a Team Foundation Server build? Inside of my web.config file I have two setting keys: VersionNumber and BuildNumber.
Is it possible to change the value of BuildNumber based on the ID of the build in TFS?
Since you're using TFS 2013 you have an easier option than the old way of modifying the workflow - Use PowerShell.
If you're using the build template TfvcTemplate.12.xaml (which is the new default in TFS 2013), then you have some extra build definition parameters you can set to specify Powershell scripts to run. This way you just write a little bit of powershell code that gets the TFS Build Number (from an environment variable), then finds your web.config file(s) and changes them.
There is a sample script published in the TFS Community Build Extensions project that will do something very similar that you could modify. It finds all AssemblyInfo.cs files, then uses RegEx to modify them to update the build number based on the TFS Build number.
See the sample PS script here: https://tfsbuildextensions.codeplex.com/SourceControl/latest#Scripts/ApplyVersionToAssemblies.ps1
See some docs on how to modify the build to run PowerShell here: http://msdn.microsoft.com/en-us/library/dn376353.aspx
The answer is yes, though it's non-trivial. I've done this in the past using two methods.
Method 1: Use CodeActivities and alter the TFS Build workflow XAML file to include the new CodeActivity as a workflow step.
Here's an article on creating custom workflows with custom code activities (it's a little dated but still relevant):
http://blogs.msdn.com/b/jimlamb/archive/2010/02/12/how-to-create-a-custom-workflow-activity-for-tfs-build-2010.aspx
Basically, you create a new object that inherits from CodeActivity, create properties for your inputs (BuildNumber,VersionNumber, TargetFile), perform your actions on the TargetFile and save it. Then you wire up this new DLL with your activity to the TFS Workflow XAML, injecting your activity in the desired build step (post-build & pre-package in your case I bet to ensure xml transforms are applied).
Method 2:
Tag the desired properties onto the MSBuild invocation inside the TFS XAML file so they are passed in to MSBuild and available for your to use as $(BuildNumber) and $(VersionNumber). Then you can use MSBuild tasks to inject the properties into the file at the right time.

TFS build process template for Database project

I am trying to have a server build for my db project and I am following how it is done in below link,
http://www.mytechfinds.com/articles/software-testing/6-test-automation/64-db-deployment-tfs
though tere are certain pieces not clear to me like how to get the "Workspace" variable for ConvertWorkspaceItem ?
This seems like overkill, from what is described in the blog, he's passing the path of the dbproj to msbuild and then calling the "deploy" target.
You could do the same thing by adding the project to "items to build" in the default template (change the "Items of Type" to ..proj) and then in the under advanced pass in /t:deploy as an MSbuild argument

TFS SourcesDirectory is null/empty when used in Expression Editor

I have a build definition which has two working folders specified. One of these has the following columns:
Status: Active
Source Control Folder: $/MyCompany/MyDivision/Solution2
Build Agent Folder: $(SourceDir)\Solution2
I am trying to access this Build Agent Folder from within the Expression editor in TFS 2012?
I've tried SourcesDirectory but when it gets evaluated it is null/empty. Is there something specific I need to do to get SourcesDiretory to work in the expression editor? Or is there a better way to reference this specific build agent folder in it's entirety?
The SourcesDirectory and indeed the BinariesDirectory are not set till later in the build. They are not immediately available at the start of the build.

Retrieving path to solution(s)?

We are currently setting up Team Build 2010 for our company, and I am trying to use workflow activities to retrieve the exact local path to the current solution being built. I haven't found a way to get this value, does anybody know how (without writing a custom activity)?
Either one of server or local path would suffice (i.e $/TeamProject/Branch/OurProject or C:\TeamBuild\src\path\to\branch\OurProject) since we can use the conversion activities on the server item.
The reason we need this path is for updating version info files, and that needs to be done for only the current solution being built, and the files have the same names (AssemblyInfo.cs, for example).
In this similar question, the solution is to define a parameter, but since this information is particular to the solution being built and not some external path, we were hoping that this info would retrievable.
You can retrieve this particular info without adding anything. If you navigate within your Build Process Template to the position where MSBuild breaks out, you will see that the solution that shall be build is set as a string named localProject. This will contain the local path where TFS has downloaded your SLN, something like C:\TeamBuild\src\path\to\branch\OurProject\OurProject.sln.Open the XAML and navigate to:
Run On Agent
Try Compile, Test, and Associate Changesets and Work Items
Compile, Test, and Associate Changesets and Work Items
Try Compile and Test
Compile and Test
For Each Configuration in BuildSettings.PlatformConfigurations
Compile and Test for Configuration
If BuildSettings.HasProjectsToBuild
For Each Project in BuildSettings.ProjectsToBuild
Try to Compile the Project
Compile the Project
Run MSBuild for Project
if you select Run MSBuild for Project & hit F4 you see it.
In order to retrieve what you are after you can define another string-variable solutionPath in your Build Process Template & insert under the Run MSBuild for Project a new Assign activity withTo : solutionPath andValue : Path.GetDirectoryName(localProject)
Have you looked at the TFS Community Build Extensions, they give you a assembly versioning out of the box?
You can use the variable called SourcesDirectory to get the current Source Directory on the Build Server. You can also use an ConvertWorkspaceItem activity to convert between server and local paths.
There's also a blog post that cover's all of this here.

Resources