Пример #1
0
        public async Task <PipelineRunStatus> GetStatusAsync(string pipelineRunName)
        {
            var log = new PipelineRunStatus()
            {
                Status = "", TaskRunStatusList = new List <TaskRunStatus>()
            };
            var pipeLine = new JObject();

            try
            {
                pipeLine = await _client.GetNamespacedCustomObjectAsync("tekton.dev", "v1beta1", "ci-nebula", "pipelineruns", pipelineRunName) as JObject;
            }
            catch (Exception)
            {
                return(null);
            }

            var pipeLineStatus = pipeLine.Value <JObject>("status");
            //log.Status = pipeLineStatus.Value<JArray>("conditions").First.Value<string>("reason");
            var pStatus = pipeLineStatus.Value <JArray>("conditions").First.Value <string>("status");

            if (pStatus == "True")
            {
                log.Status = "Succeeded";
            }
            else if (pStatus == "False")
            {
                log.Status = "Failed";
            }
            else
            {
                log.Status = pipeLineStatus.Value <JArray>("conditions").First.Value <string>("reason");
            }
            log.CompletionTime = pipeLineStatus.Value <DateTime?>("completionTime")?.ToUniversalTime();
            log.StartTime      = pipeLineStatus.Value <DateTime?>("startTime")?.ToUniversalTime();

            var tasks = pipeLineStatus.Value <JObject>("pipelineSpec").Value <JArray>("tasks");

            foreach (var task in tasks)
            {
                var taskRunStatus = new TaskRunStatus();
                taskRunStatus.Task    = task.Value <JObject>("taskRef").Value <string>("name");
                taskRunStatus.ShapeId = task.Value <string>("name");
                log.TaskRunStatusList.Add(taskRunStatus);
            }

            var taskList = tasks.Select(s => s.Value <string>("name")).ToList();
            var taskRuns = pipeLineStatus.Value <JObject>("taskRuns");

            if (log.Status == "Failed" && taskRuns == null)
            {
                log.Message = pipeLineStatus.Value <JArray>("conditions").First.Value <string>("message");
            }

            if (taskRuns == null)
            {
                return(log);
            }

            foreach (var taskrunstatus in log.TaskRunStatusList)
            {
                foreach (var taskRun in taskRuns)
                {
                    var taskRunContent = taskRun.Value;
                    var taskName       = taskRunContent.Value <string>("pipelineTaskName");
                    if (taskName == taskrunstatus.ShapeId)
                    {
                        var taskStatus     = taskRunContent.Value <JObject>("status");
                        var podName        = taskStatus.Value <string>("podName");
                        var startTime      = taskStatus.Value <DateTime?>("startTime")?.ToUniversalTime();
                        var completionTime = taskStatus.Value <DateTime?>("completionTime")?.ToUniversalTime();
                        var containers     = taskStatus.Value <JArray>("steps");
                        var conditions     = taskStatus.Value <JArray>("conditions");
                        var status         = (conditions.First as JObject)?.Value <string>("reason");
                        var taskRunLog     = new TaskRunLog
                        {
                            StartTime      = startTime,
                            CompletionTime = completionTime,
                            Status         = status
                        };
                        foreach (var container in containers)
                        {
                            var containerName = container.Value <string>("container");
                            var logStream     = await _client.ReadNamespacedPodLogAsync(podName, "ci-nebula", containerName);

                            taskRunLog.Content += await new StreamReader(logStream).ReadToEndAsync();
                        }
                        taskrunstatus.Log = taskRunLog;
                    }
                }
            }

            return(log);
        }