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); }