示例#1
0
        public async Task <TeamCityContracts.BuildDetails> GetBuildDetailsAsync(TeamCityBuild item)
        {
            var branchLocator = string.IsNullOrWhiteSpace(item.SourceControlBranch) ? string.Empty : ",branch:" + item.SourceControlBranch;

            var api = $"builds?locator=running:any,buildType:(id:{item.BuildTypeId}),count:1{branchLocator}&fields=build(status,running,statusText)";

            var buildResponse = await RequestAsync <TeamCityContracts.BuildDetailsResponse>(api);

            if (buildResponse == null || buildResponse.Build == null || !buildResponse.Build.Any())
            {
                throw new TeamCityException("Unexpected TeamCity response.");
            }

            return(buildResponse.Build.First());
        }
示例#2
0
        public async Task QueueNewBuild(TeamCityBuild item)
        {
            //todo: move to SendAsync<T>

            using (var handler = new WebRequestHandler())
            {
                handler.UseDefaultCredentials = true;

                if (item.IgnoreSslErrors)
                {
                    handler.ServerCertificateValidationCallback += (sender, certificate, chain, sslPolicyErrors) => true;
                }

                using (var client = new HttpClient(handler))
                {
                    client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/xml"));

                    string authType = string.Empty;

                    if (item.GuestUser)
                    {
                        authType = "guestAuth";
                    }
                    else
                    {
                        authType = "httpAuth";

                        if (!string.IsNullOrEmpty(item.UserName) && !string.IsNullOrEmpty(item.Password))
                        {
                            client.DefaultRequestHeaders.Authorization =
                                new AuthenticationHeaderValue("Basic",
                                                              Convert.ToBase64String(Encoding.ASCII.GetBytes(string.Format("{0}:{1}", item.UserName, item.Password))));
                        }
                    }

                    var url = $"{item.Url}/{authType}/app/rest/buildQueue";

                    var request = $"<build><buildType id=\"{item.BuildTypeId}\"/></build>";

                    var content = new StringContent(request, Encoding.UTF8, "application/xml");

                    var response = await client.PostAsync(url, content).ConfigureAwait(false);

                    response.EnsureSuccessStatusCode();
                }
            }
        }
示例#3
0
        public async Task QueueNewBuild(TeamCityBuild item)
        {
            //todo: move to SendAsync<T>

            using (var handler = new WebRequestHandler())
            {
                handler.UseDefaultCredentials = true;

                if (item.IgnoreSslErrors)
                {
                    handler.ServerCertificateValidationCallback += (sender, certificate, chain, sslPolicyErrors) => true;
                }

                using (var client = new HttpClient(handler))
                {
                    client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/xml"));

                    var uri = Connection.GuestUser
                        ? $"{item.Url}/guestAuth/app/rest/buildQueue"
                        : $"{item.Url}/app/rest/buildQueue";

                    if (!string.IsNullOrEmpty(item.Token))
                    {
                        client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", Connection.Token);
                    }

                    var request = $"<build><buildType id=\"{item.BuildTypeId}\"/></build>";

                    var content = new StringContent(request, Encoding.UTF8, "application/xml");

                    var response = await client.PostAsync(uri, content).ConfigureAwait(false);

                    response.EnsureSuccessStatusCode();
                }
            }
        }