public JobBuildCommand(IJenkinsContext context, string jobName) { if (context == null) { throw new ArgumentNullException(nameof(context)); } if (string.IsNullOrEmpty(jobName)) { throw new ArgumentException("'jobName' cannot be empty!"); } Url = NetPath.Combine(context.BaseUrl, "job", jobName, "build?delay=0sec"); UserName = context.UserName; Password = context.Password; Crumb = context.Crumb; OnWrite = request => { request.Method = "POST"; }; OnRead = response => { if (response.StatusCode != System.Net.HttpStatusCode.Created) { throw new JenkinsJobBuildException($"Expected HTTP status code 201 but found {(int)response.StatusCode}!"); } Result = new JenkinsBuildResult { QueueItemUrl = response.GetResponseHeader("Location") }; }; }
public JobBuildWithParametersCommand(IJenkinsContext context, string jobName, IDictionary <string, string> jobParameters) { if (context == null) { throw new ArgumentNullException(nameof(context)); } if (string.IsNullOrEmpty(jobName)) { throw new ArgumentException("'jobName' cannot be empty!"); } if (jobParameters == null) { throw new ArgumentNullException(nameof(jobParameters)); } var _params = new Dictionary <string, string>(jobParameters) { ["delay"] = "0sec", }; var query = new StringWriter(); WriteJobParameters(query, _params); Url = NetPath.Combine(context.BaseUrl, "job", jobName, $"buildWithParameters?{query}"); UserName = context.UserName; Password = context.Password; Crumb = context.Crumb; OnWrite = request => { request.Method = "POST"; }; OnRead = response => { if (response.StatusCode != System.Net.HttpStatusCode.Created) { throw new JenkinsJobBuildException($"Expected HTTP status code 201 but found {(int)response.StatusCode}!"); } Result = new JenkinsBuildResult { QueueItemUrl = response.GetResponseHeader("Location"), }; }; }
/// <exception cref="JenkinsNetException"></exception> /// <exception cref="JenkinsJobBuildException"></exception> /// <exception cref="JenkinsJobGetBuildException"></exception> private async Task <JenkinsBuildBase> ProcessAsync(string jobName, JenkinsBuildResult buildResult, DateTime queueStartTime) { var queueItemNumber = buildResult.GetQueueItemNumber(); if (!queueItemNumber.HasValue) { throw new JenkinsNetException("Queue-Item number not found!"); } SetStatus(JenkinsJobStatus.Queued); int?buildNumber; while (true) { var queueItem = await client.Queue.GetItemAsync(queueItemNumber.Value); buildNumber = queueItem?.Executable?.Number; if (buildNumber.HasValue) { break; } if (QueueTimeout > 0 && DateTime.Now.Subtract(queueStartTime).TotalSeconds > QueueTimeout) { throw new JenkinsNetException("Timeout occurred while waiting for build to start!"); } await Task.Delay(PollInterval); } SetStatus(JenkinsJobStatus.Building); var buildStartTime = DateTime.Now; textReader = new ProgressiveTextReader(client, jobName, buildNumber.ToString()); textReader.TextChanged += TextReader_TextChanged; JenkinsBuildBase buildItem = null; while (string.IsNullOrEmpty(buildItem?.Result)) { buildItem = await client.Builds.GetAsync <JenkinsBuildBase>(jobName, buildNumber.Value.ToString()); if (!string.IsNullOrEmpty(buildItem?.Result)) { break; } if (BuildTimeout > 0 && DateTime.Now.Subtract(buildStartTime).TotalSeconds > BuildTimeout) { throw new JenkinsNetException("Timeout occurred while waiting for build to complete!"); } if (MonitorConsoleOutput && !textReader.IsComplete) { await textReader.UpdateAsync(); } await Task.Delay(PollInterval); } while (MonitorConsoleOutput && !textReader.IsComplete) { await textReader.UpdateAsync(); } SetStatus(JenkinsJobStatus.Complete); return(buildItem); }