fix: jenkins stages durationMillis<0 (#6462)
diff --git a/backend/plugins/jenkins/e2e/stages_test.go b/backend/plugins/jenkins/e2e/stages_test.go
index cbc33bc..645559f 100644
--- a/backend/plugins/jenkins/e2e/stages_test.go
+++ b/backend/plugins/jenkins/e2e/stages_test.go
@@ -50,10 +50,6 @@
 	dataflowTester.FlushTabler(&models.JenkinsBuild{})
 	dataflowTester.ImportCsvIntoTabler("./raw_tables/_tool_jenkins_builds_for_stages.csv", models.JenkinsBuild{})
 
-	// import tool table
-	dataflowTester.ImportCsvIntoTabler("./snapshot_tables/_tool_jenkins_build_commits.csv", models.JenkinsBuildCommit{})
-	dataflowTester.ImportCsvIntoTabler("./snapshot_tables/cicd_tasks.csv", devops.CICDTask{})
-
 	// verify extraction
 	dataflowTester.FlushTabler(&models.JenkinsStage{})
 	dataflowTester.Subtask(tasks.ExtractApiStagesMeta, taskData)
diff --git a/backend/plugins/jenkins/tasks/stage_convertor.go b/backend/plugins/jenkins/tasks/stage_convertor.go
index 91eca0a..7ae9e56 100644
--- a/backend/plugins/jenkins/tasks/stage_convertor.go
+++ b/backend/plugins/jenkins/tasks/stage_convertor.go
@@ -99,7 +99,13 @@
 			if body.Name == "" {
 				return nil, err
 			}
-			durationSec := int64(body.DurationMillis / 1000)
+			var durationMillis int
+			if body.DurationMillis > 0 {
+				durationMillis = body.DurationMillis
+			} else {
+				durationMillis = 0
+			}
+			durationSec := int64(durationMillis / 1000)
 			jenkinsTaskResult := ""
 			jenkinsTaskStatus := devops.STATUS_DONE
 			var jenkinsTaskFinishedDate *time.Time
@@ -126,7 +132,7 @@
 				PipelineId:   buildIdGen.Generate(body.ConnectionId, body.BuildName),
 				Result:       jenkinsTaskResult,
 				Status:       jenkinsTaskStatus,
-				DurationSec:  uint64(body.DurationMillis / 1000),
+				DurationSec:  uint64(durationMillis / 1000),
 				StartedDate:  startedDate,
 				FinishedDate: jenkinsTaskFinishedDate,
 				CicdScopeId:  jobIdGen.Generate(body.ConnectionId, data.Options.JobFullName),