From bc613078d41bcfd35d46f73a9c5615d55b6982ce Mon Sep 17 00:00:00 2001 From: Joris De Winne Date: Fri, 24 Feb 2017 08:27:28 -0800 Subject: [PATCH] Adding queuebuild to sdk --- src/main/resources/synthetic.xml | 8 +++ src/main/resources/tfsdk/QueueBuild.py | 69 ++++++++++++++++++++++++++ 2 files changed, 77 insertions(+) create mode 100644 src/main/resources/tfsdk/QueueBuild.py diff --git a/src/main/resources/synthetic.xml b/src/main/resources/synthetic.xml index 3cbd86d..f307e77 100644 --- a/src/main/resources/synthetic.xml +++ b/src/main/resources/synthetic.xml @@ -98,4 +98,12 @@ + + + + + + + + diff --git a/src/main/resources/tfsdk/QueueBuild.py b/src/main/resources/tfsdk/QueueBuild.py new file mode 100644 index 0000000..a6a24da --- /dev/null +++ b/src/main/resources/tfsdk/QueueBuild.py @@ -0,0 +1,69 @@ +# +# THIS CODE AND INFORMATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS +# FOR A PARTICULAR PURPOSE. THIS CODE AND INFORMATION ARE NOT SUPPORTED BY XEBIALABS. +# + +import os, sys, string, time +from com.microsoft.tfs.core import TFSTeamProjectCollection +from com.microsoft.tfs.core.clients.build.flags import BuildStatus, QueueStatus, QueryOptions +from com.microsoft.tfs.core.httpclient import UsernamePasswordCredentials +from com.microsoft.tfs.core.util import URIUtils +from java.lang import System + + +# Wait for the build to finish. +def wait_for_queued_build_to_finish(queued_build_item): + print "Waiting for build to finish" + while queued_build_item.getBuild() is None or not queued_build_item.getBuild().isBuildFinished(): + time.sleep(5) + print "." + queued_build_item.refresh(QueryOptions.ALL) + + +# load the /conf/native files +System.setProperty("com.microsoft.tfs.jni.native.base-directory", os.getcwd() + "/conf/native") + +if tfsServer is None: + print "No server provided." + sys.exit(1) + +if username is None: + username = tfsServer['username'] +if password is None: + password = tfsServer['password'] + +credentials = UsernamePasswordCredentials(username, password) + +tfs_api_url = tfsServer['url'] + "/" + collectionName +print "Queue build in TFS instance via this REST API: %s\r" % tfs_api_url + +# set up tfs +tpc = TFSTeamProjectCollection(URIUtils.newURI(tfs_api_url), credentials) +build_server = tpc.getBuildServer() + +print "Build server version: [%s]" % build_server.getBuildServerVersion() +buildDefinitions = build_server.queryBuildDefinitions(teamProjectName) +print "Found %s build definition(s)." % len(buildDefinitions) + +build_definition = build_server.getBuildDefinition(teamProjectName, buildDefinitionName) +build_request = build_definition.createBuildRequest() + +#queue build +queued_build = build_server.queueBuild(build_request) +print "Queued build with ID= %s" % queued_build.getID() + +# Wait for the queued build to finish. +wait_for_queued_build_to_finish(queued_build) + +if queued_build.getStatus().contains(QueueStatus.COMPLETED): + # Display the status of the completed build. + build_detail = queued_build.getBuild() + build_status = build_detail.getStatus() + buildNumber = build_detail.getBuildNumber() + buildStatus = build_server.getDisplayText(build_status) + print "Build [%s] completed with status [%s]" % (buildNumber, buildStatus) + if build_status != BuildStatus.SUCCEEDED: + raise Exception("Build failed.") +else: + raise Exception("Build canceled or did not finish in time.")