コード例 #1
0
        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")
                };
            };
        }
コード例 #2
0
        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"),
                };
            };
        }
コード例 #3
0
        /// <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);
        }