Search code examples
powershelltfsbuildazure-devops

Queuing Visual Studio Online Build With Powershell


Is there a way to queue a Visual Studio Online "Build Definition" -- versus a "XAML Definition" -- using Powershell.

I have the following script:

#// CONFIGURATION ITEMS ============================================
$serverName="https://example.visualstudio.com/DefaultCollection"
$username = "[email protected]"
$password = "mypassword";
$teamProject = "Web"
$buildDefinition = "Test"
#// ================================================================


[void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.TeamFoundation.Client")
[void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.TeamFoundation.Build.Client")
[void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.TeamFoundation.VersionControl.Client")
[void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.TeamFoundation.WorkItemTracking.Client")
$assembly = ("Microsoft.TeamFoundation.Client, Version=12.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")

$source =  @"
using System;
using System.Collections.Generic;
using System.Text;
using  Microsoft.TeamFoundation.Client;
using System.Net;
public class ConnectByImplementingCredentialsProvider : ICredentialsProvider
    {
        public ICredentials GetCredentials(Uri uri, ICredentials iCredentials)
        {
            return new NetworkCredential(" $username ", " $password ");
        }

        public void NotifyCredentialsAuthenticated(Uri uri)
        {
            throw new ApplicationException("Unable to authenticate");
        }
    }
"@

Add-Type -ReferencedAssemblies $assembly -TypeDefinition $source -Language CSharp 
$tfs = [Microsoft.TeamFoundation.Client.TeamFoundationServerFactory]::GetServer($serverName, (New-Object ConnectByImplementingCredentialsProvider))
$tfs.EnsureAuthenticated() 
$buildserver = $tfs.GetService([Microsoft.TeamFoundation.Build.Client.IBuildServer])
$definition = $buildserver.GetBuildDefinition($teamProject, $buildDefinition)
$request = $definition.CreateBuildRequest()
$buildserver.QueueBuild($request, "None") 

... but GetBuildDefinition() only returns the items listed under XAML Definitions. :-(


Solution

  • updated url: https://www.visualstudio.com/en-us/docs/integrate/api/build/builds#queue-a-build

    Have you tried using VSO REST api to queue a build? See 'request a build' section here - https://www.visualstudio.com/integrate/api/build/requests