Skip to content

Instantly share code, notes, and snippets.

@denieler
Created December 18, 2015 08:57
Show Gist options
  • Save denieler/37065cd8c5e7730b6dd3 to your computer and use it in GitHub Desktop.
Save denieler/37065cd8c5e7730b6dd3 to your computer and use it in GitHub Desktop.
param (
# [string] $teamproject = $(throw "please specify a Team Project name"))
)
$arrAssemblies = @(
"Microsoft.TeamFoundation.Client",
"Microsoft.TeamFoundation.Common",
"Microsoft.TeamFoundation.Build.Client",
"Microsoft.TeamFoundation.Build.Workflow",
"Microsoft.TeamFoundation.VersionControl.Client"
)
Foreach ($assembly in $arrAssemblies) {
[void][Reflection.Assembly]::LoadWithPartialName($assembly)
}
Remove-Variable assembly, arrAssemblies
Add-Type -Path "C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\CommonExtensions\Microsoft\TeamFoundation\Team Explorer\Microsoft.TeamFoundation.Build.Workflow.dll"
$ServerName = "http://***"
$Project = "***"
$BuildName = "Integrator"
$BranchPath = "***"
function QueueBuild ([string]$tfsPath, [string]$teamproject, [string]$buildName, [string]$branchPath)
{
$tfs = [Microsoft.TeamFoundation.Client.TeamFoundationServerFactory]::GetServer($tfsPath)
$buildserver = $tfs.GetService([Microsoft.TeamFoundation.Build.Client.IBuildServer])
$buildDefinition = $buildserver.GetBuildDefinition($teamproject, $buildName)
$request = $buildDefinition.CreateBuildRequest();
$process = [Microsoft.TeamFoundation.Build.Workflow.WorkflowHelpers]::DeserializeProcessParameters($buildDefinition.ProcessParameters)
#make changes to your process parameters in $process
$process.Item("BranchPath") = $branchPath
$request.ProcessParameters = [Microsoft.TeamFoundation.Build.Workflow.WorkflowHelpers]::SerializeProcessParameters($process)
$queuedBuild = $buildserver.QueueBuild($request)
#echo "Build in path $branchPath was successfuly queued."
#echo "Build uri "
#echo $queuedBuild.Build.Uri.AbsoluteUri
return $queuedBuild.Build.Uri.AbsoluteUri;
}
function CheckIsBuildFinished ([string]$tfsPath, [string]$buildUri)
{
$tfs = [Microsoft.TeamFoundation.Client.TeamFoundationServerFactory]::GetServer($tfsPath)
$buildserver = $tfs.GetService([Microsoft.TeamFoundation.Build.Client.IBuildServer])
echo "Build uri: "
echo $buildUri
DO
{
Try
{
$build = $buildserver.QueryBuildsByUri($buildUri, '*', 'All')
echo $build.Status
}
Catch
{
}
Start-Sleep -s 5
} While (!$build -or $build.Status -eq "InProgress" -or $build.Status -eq "NotStarted")
return $build.BuildDefinition.LastGoodBuildLabel.Replace("@$/Teamwork", "");
}
$LastGoodBuildUri = QueueBuild $ServerName $Project $BuildName $BranchPath
$buildSuccessName = CheckIsBuildFinished $ServerName $LastGoodBuildUri
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment