This is an automated email from the ASF dual-hosted git repository.

klesh pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-devlake.git


The following commit(s) were added to refs/heads/main by this push:
     new 7d0dfb88 feat: add jenkins e2e test for cicd (#3030)
7d0dfb88 is described below

commit 7d0dfb888e2fb5b79cd4654186214e9210e72e98
Author: mappjzc <[email protected]>
AuthorDate: Fri Sep 9 11:12:33 2022 +0800

    feat: add jenkins e2e test for cicd (#3030)
    
    Add JenkinsBuildRepo
    Add CICDTask
    Add CICDPipeline
    Add CICDPipelineRelationship
    
    Nddtfjiang <[email protected]>
    
    Co-authored-by: Klesh Wong <[email protected]>
---
 plugins/jenkins/e2e/builds_test.go                 | 79 ++++++++++++++++++++--
 plugins/jenkins/e2e/jobs_test.go                   |  1 +
 .../e2e/raw_tables/_raw_jenkins_api_builds.csv     | 45 +++++++++---
 .../e2e/raw_tables/_raw_jenkins_api_jobs.csv       | 18 ++---
 .../snapshot_tables/_tool_jenkins_build_repos.csv  |  9 +++
 .../e2e/snapshot_tables/_tool_jenkins_builds.csv   | 47 ++++++++++---
 .../e2e/snapshot_tables/_tool_jenkins_jobs.csv     | 18 ++---
 .../cicd_pipeline_relationships.csv                |  1 +
 .../jenkins/e2e/snapshot_tables/cicd_pipelines.csv | 38 +++++++++++
 plugins/jenkins/e2e/snapshot_tables/cicd_tasks.csv | 38 +++++++++++
 plugins/jenkins/e2e/snapshot_tables/jobs.csv       | 18 ++---
 11 files changed, 264 insertions(+), 48 deletions(-)

diff --git a/plugins/jenkins/e2e/builds_test.go 
b/plugins/jenkins/e2e/builds_test.go
index e84f0b59..40c51b75 100644
--- a/plugins/jenkins/e2e/builds_test.go
+++ b/plugins/jenkins/e2e/builds_test.go
@@ -21,6 +21,7 @@ import (
        "testing"
 
        "github.com/apache/incubator-devlake/helpers/e2ehelper"
+       "github.com/apache/incubator-devlake/models/domainlayer/devops"
        "github.com/apache/incubator-devlake/plugins/jenkins/impl"
        "github.com/apache/incubator-devlake/plugins/jenkins/models"
        "github.com/apache/incubator-devlake/plugins/jenkins/tasks"
@@ -38,22 +39,18 @@ func TestJenkinsBuildsDataFlow(t *testing.T) {
        }
 
        // import raw data table
+       // SELECT * FROM _raw_jenkins_api_builds INTO OUTFILE 
"/tmp/_raw_jenkins_api_builds.csv" FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED 
BY '"' LINES TERMINATED BY '\r\n';
        
dataflowTester.ImportCsvIntoRawTable("./raw_tables/_raw_jenkins_api_builds.csv",
 "_raw_jenkins_api_builds")
 
        // verify extraction
        dataflowTester.FlushTabler(&models.JenkinsBuild{})
+       dataflowTester.FlushTabler(&models.JenkinsBuildRepo{})
+
        dataflowTester.Subtask(tasks.ExtractApiBuildsMeta, taskData)
        dataflowTester.VerifyTable(
                models.JenkinsBuild{},
                "./snapshot_tables/_tool_jenkins_builds.csv",
                []string{
-                       "connection_id",
-                       "job_name",
-                       "number",
-                       "_raw_data_params",
-                       "_raw_data_table",
-                       "_raw_data_id",
-                       "_raw_data_remark",
                        "connection_id",
                        "job_name",
                        "duration",
@@ -64,6 +61,74 @@ func TestJenkinsBuildsDataFlow(t *testing.T) {
                        "timestamp",
                        "start_time",
                        "commit_sha",
+
+                       "_raw_data_params",
+                       "_raw_data_table",
+                       "_raw_data_id",
+                       "_raw_data_remark",
+               },
+       )
+
+       dataflowTester.VerifyTable(
+               models.JenkinsBuildRepo{},
+               "./snapshot_tables/_tool_jenkins_build_repos.csv",
+               []string{
+                       "connection_id",
+                       "build_name",
+                       "commit_sha",
+                       "branch",
+                       "repo_url",
+
+                       "_raw_data_params",
+                       "_raw_data_table",
+                       "_raw_data_id",
+                       "_raw_data_remark",
+               },
+       )
+
+       dataflowTester.FlushTabler(&devops.CICDTask{})
+       dataflowTester.FlushTabler(&devops.CICDPipeline{})
+       dataflowTester.FlushTabler(&devops.CICDPipelineRelationship{})
+
+       dataflowTester.Subtask(tasks.ConvertBuildsToCICDMeta, taskData)
+
+       dataflowTester.VerifyTable(
+               devops.CICDTask{},
+               "./snapshot_tables/cicd_tasks.csv",
+               []string{
+                       "name",
+                       "pipeline_id",
+                       "result",
+                       "status",
+                       "type",
+                       "environment",
+                       "duration_sec",
+                       "started_date",
+                       "finished_date",
+               },
+       )
+
+       dataflowTester.VerifyTable(
+               devops.CICDPipeline{},
+               "./snapshot_tables/cicd_pipelines.csv",
+               []string{
+                       "name",
+                       "result",
+                       "status",
+                       "type",
+                       "duration_sec",
+                       "environment",
+                       "created_date",
+                       "finished_date",
+               },
+       )
+
+       dataflowTester.VerifyTable(
+               devops.CICDPipelineRelationship{},
+               "./snapshot_tables/cicd_pipeline_relationships.csv",
+               []string{
+                       "parent_pipeline_id",
+                       "child_pipeline_id",
                },
        )
 }
diff --git a/plugins/jenkins/e2e/jobs_test.go b/plugins/jenkins/e2e/jobs_test.go
index 11b50c14..f0f5ab12 100644
--- a/plugins/jenkins/e2e/jobs_test.go
+++ b/plugins/jenkins/e2e/jobs_test.go
@@ -40,6 +40,7 @@ func TestJenkinsJobsDataFlow(t *testing.T) {
        }
 
        // import raw data table
+       // SELECT * FROM _raw_jenkins_api_jobs INTO OUTFILE 
"/tmp/_raw_jenkins_api_jobs.csv" FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED 
BY '"' LINES TERMINATED BY '\r\n';
        
dataflowTester.ImportCsvIntoRawTable("./raw_tables/_raw_jenkins_api_jobs.csv", 
"_raw_jenkins_api_jobs")
 
        // verify extraction
diff --git a/plugins/jenkins/e2e/raw_tables/_raw_jenkins_api_builds.csv 
b/plugins/jenkins/e2e/raw_tables/_raw_jenkins_api_builds.csv
index 250c8ce3..8802295a 100644
--- a/plugins/jenkins/e2e/raw_tables/_raw_jenkins_api_builds.csv
+++ b/plugins/jenkins/e2e/raw_tables/_raw_jenkins_api_builds.csv
@@ -1,9 +1,38 @@
 "id","params","data","url","input","created_at"
-75,"{""ConnectionId"":1}","{""_class"":""hudson.model.FreeStyleBuild"",""actions"":[{""_class"":""hudson.model.CauseAction""},{},{""_class"":""org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction""}],""displayName"":""#8"",""duration"":11,""estimatedDuration"":10,""number"":8,""result"":""SUCCESS"",""timestamp"":1650023894336,""changeSet"":{""_class"":""hudson.scm.EmptyChangeLogSet"",""kind"":null}}","https://test.nddtf.com/job/%E8%BF%99%E6%98%AF%E4%B8%80%E4%B8%AA%E6%94%B9%E4%BA%
 [...]
-76,"{""ConnectionId"":1}","{""_class"":""hudson.model.FreeStyleBuild"",""actions"":[{""_class"":""hudson.model.CauseAction""},{},{""_class"":""org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction""}],""displayName"":""#7"",""duration"":8,""estimatedDuration"":10,""number"":7,""result"":""SUCCESS"",""timestamp"":1650023883294,""changeSet"":{""_class"":""hudson.scm.EmptyChangeLogSet"",""kind"":null}}","https://test.nddtf.com/job/%E8%BF%99%E6%98%AF%E4%B8%80%E4%B8%AA%E6%94%B9%E4%BA%8
 [...]
-77,"{""ConnectionId"":1}","{""_class"":""hudson.model.FreeStyleBuild"",""actions"":[{""_class"":""hudson.model.CauseAction""},{},{""_class"":""org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction""}],""displayName"":""#6"",""duration"":10,""estimatedDuration"":10,""number"":6,""result"":""SUCCESS"",""timestamp"":1650022560954,""changeSet"":{""_class"":""hudson.scm.EmptyChangeLogSet"",""kind"":null}}","https://test.nddtf.com/job/%E8%BF%99%E6%98%AF%E4%B8%80%E4%B8%AA%E6%94%B9%E4%BA%
 [...]
-78,"{""ConnectionId"":1}","{""_class"":""hudson.model.FreeStyleBuild"",""actions"":[{""_class"":""hudson.model.CauseAction""},{},{""_class"":""org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction""}],""displayName"":""#5"",""duration"":6,""estimatedDuration"":10,""number"":5,""result"":""SUCCESS"",""timestamp"":1650022558491,""changeSet"":{""_class"":""hudson.scm.EmptyChangeLogSet"",""kind"":null}}","https://test.nddtf.com/job/%E8%BF%99%E6%98%AF%E4%B8%80%E4%B8%AA%E6%94%B9%E4%BA%8
 [...]
-79,"{""ConnectionId"":1}","{""_class"":""hudson.model.FreeStyleBuild"",""actions"":[{""_class"":""hudson.model.CauseAction""},{},{""_class"":""org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction""}],""displayName"":""#4"",""duration"":6,""estimatedDuration"":10,""number"":4,""result"":""SUCCESS"",""timestamp"":1650022556910,""changeSet"":{""_class"":""hudson.scm.EmptyChangeLogSet"",""kind"":null}}","https://test.nddtf.com/job/%E8%BF%99%E6%98%AF%E4%B8%80%E4%B8%AA%E6%94%B9%E4%BA%8
 [...]
-80,"{""ConnectionId"":1}","{""_class"":""hudson.model.FreeStyleBuild"",""actions"":[{""_class"":""hudson.model.CauseAction""},{},{""_class"":""org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction""}],""displayName"":""#3"",""duration"":3,""estimatedDuration"":10,""number"":3,""result"":""SUCCESS"",""timestamp"":1650017186253,""changeSet"":{""_class"":""hudson.scm.EmptyChangeLogSet"",""kind"":null}}","https://test.nddtf.com/job/%E8%BF%99%E6%98%AF%E4%B8%80%E4%B8%AA%E6%94%B9%E4%BA%8
 [...]
-81,"{""ConnectionId"":1}","{""_class"":""hudson.model.FreeStyleBuild"",""actions"":[{""_class"":""hudson.model.CauseAction""},{},{""_class"":""org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction""}],""displayName"":""#2"",""duration"":4,""estimatedDuration"":10,""number"":2,""result"":""SUCCESS"",""timestamp"":1650017177939,""changeSet"":{""_class"":""hudson.scm.EmptyChangeLogSet"",""kind"":null}}","https://test.nddtf.com/job/%E8%BF%99%E6%98%AF%E4%B8%80%E4%B8%AA%E6%94%B9%E4%BA%8
 [...]
-82,"{""ConnectionId"":1}","{""_class"":""hudson.model.FreeStyleBuild"",""actions"":[{""_class"":""hudson.model.CauseAction""},{},{""_class"":""org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction""}],""displayName"":""#1"",""duration"":57,""estimatedDuration"":10,""number"":1,""result"":""SUCCESS"",""timestamp"":1650017153775,""changeSet"":{""_class"":""hudson.scm.EmptyChangeLogSet"",""kind"":null}}","https://test.nddtf.com/job/%E8%BF%99%E6%98%AF%E4%B8%80%E4%B8%AA%E6%94%B9%E4%BA%
 [...]
+88,"{""ConnectionId"":1}","{""_class"":""hudson.model.FreeStyleBuild"",""actions"":[{""_class"":""hudson.model.CauseAction"",""causes"":[{""_class"":""hudson.model.Cause$UserIdCause"",""shortDescription"":""Started
 by user 
思码逸"",""userId"":""merico"",""userName"":""思码逸""}]},{""_class"":""hudson.plugins.git.util.BuildData"",""lastBuiltRevision"":{""SHA1"":""0006e8105d70318aff5eeee38d405fa181a32aa0"",""branch"":[{""name"":""refs/remotes/origin/main""}]},""remoteUrls"":[""https://github.com
 [...]
+89,"{""ConnectionId"":1}","{""_class"":""hudson.model.FreeStyleBuild"",""actions"":[{""_class"":""hudson.model.CauseAction"",""causes"":[{""_class"":""hudson.model.Cause$UserIdCause"",""shortDescription"":""Started
 by user 
思码逸"",""userId"":""merico"",""userName"":""思码逸""}]},{""_class"":""hudson.plugins.git.util.BuildData"",""lastBuiltRevision"":{""SHA1"":""0006e8105d70318aff5eeee38d405fa181a32aa0"",""branch"":[{""name"":""refs/remotes/origin/main""}]},""remoteUrls"":[""https://github.com
 [...]
+90,"{""ConnectionId"":1}","{""_class"":""hudson.model.FreeStyleBuild"",""actions"":[{""_class"":""hudson.model.CauseAction"",""causes"":[{""_class"":""hudson.model.Cause$UserIdCause"",""shortDescription"":""Started
 by user 
思码逸"",""userId"":""merico"",""userName"":""思码逸""}]},{""_class"":""hudson.plugins.git.util.BuildData"",""lastBuiltRevision"":{""SHA1"":""20139afef3c6ec9f3ebffcb06e243b145cbef8c6"",""branch"":[{""name"":""refs/remotes/origin/main""}]},""remoteUrls"":[""https://github.com
 [...]
+91,"{""ConnectionId"":1}","{""_class"":""hudson.model.FreeStyleBuild"",""actions"":[{""_class"":""hudson.model.CauseAction"",""causes"":[{""_class"":""hudson.model.Cause$UserIdCause"",""shortDescription"":""Started
 by user 
思码逸"",""userId"":""merico"",""userName"":""思码逸""}]},{""_class"":""hudson.plugins.git.util.BuildData"",""lastBuiltRevision"":{""SHA1"":""20139afef3c6ec9f3ebffcb06e243b145cbef8c6"",""branch"":[{""name"":""refs/remotes/origin/main""}]},""remoteUrls"":[""https://github.com
 [...]
+92,"{""ConnectionId"":1}","{""_class"":""hudson.model.FreeStyleBuild"",""actions"":[{""_class"":""hudson.model.CauseAction"",""causes"":[{""_class"":""hudson.model.Cause$UserIdCause"",""shortDescription"":""Started
 by user 
思码逸"",""userId"":""merico"",""userName"":""思码逸""}]},{""_class"":""hudson.plugins.git.util.BuildData"",""lastBuiltRevision"":{""SHA1"":""20139afef3c6ec9f3ebffcb06e243b145cbef8c6"",""branch"":[{""name"":""refs/remotes/origin/main""}]},""remoteUrls"":[""https://github.com
 [...]
+93,"{""ConnectionId"":1}","{""_class"":""hudson.model.FreeStyleBuild"",""actions"":[{""_class"":""hudson.model.CauseAction"",""causes"":[{""_class"":""hudson.model.Cause$UserIdCause"",""shortDescription"":""Started
 by user 
思码逸"",""userId"":""merico"",""userName"":""思码逸""}]},{""_class"":""hudson.plugins.git.util.BuildData"",""lastBuiltRevision"":{""SHA1"":""0f886c74949c3ee7e489188911c7dc0c1d547418"",""branch"":[{""name"":""refs/remotes/origin/main""}]},""remoteUrls"":[""https://github.com
 [...]
+94,"{""ConnectionId"":1}","{""_class"":""hudson.model.FreeStyleBuild"",""actions"":[{""_class"":""hudson.model.CauseAction"",""causes"":[{""_class"":""hudson.model.Cause$UserIdCause"",""shortDescription"":""Started
 by user 
思码逸"",""userId"":""merico"",""userName"":""思码逸""}]},{""_class"":""hudson.plugins.git.util.BuildData"",""lastBuiltRevision"":{""SHA1"":""0f886c74949c3ee7e489188911c7dc0c1d547418"",""branch"":[{""name"":""refs/remotes/origin/main""}]},""remoteUrls"":[""https://github.com
 [...]
+95,"{""ConnectionId"":1}","{""_class"":""hudson.model.FreeStyleBuild"",""actions"":[{""_class"":""hudson.model.CauseAction"",""causes"":[{""_class"":""hudson.model.Cause$UserIdCause"",""shortDescription"":""Started
 by user 
思码逸"",""userId"":""merico"",""userName"":""思码逸""}]},{""_class"":""hudson.plugins.git.util.BuildData"",""lastBuiltRevision"":{""SHA1"":""ceeffdfdd06bce232f9adb3a656265bad13a8473"",""branch"":[{""name"":""refs/remotes/origin/main""}]},""remoteUrls"":[""https://github.com
 [...]
+96,"{""ConnectionId"":1}","{""_class"":""org.jenkinsci.plugins.workflow.job.WorkflowRun"",""actions"":[{""_class"":""hudson.model.CauseAction"",""causes"":[{""_class"":""hudson.model.Cause$UserIdCause"",""shortDescription"":""Started
 by user 
思码逸"",""userId"":""merico"",""userName"":""思码逸""}]},{""_class"":""org.jenkinsci.plugins.workflow.libs.LibrariesAction""},{},{},{""_class"":""org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction""},{""_class"":""org.jenkinsci.plugins.pipeline.
 [...]
+97,"{""ConnectionId"":1}","{""_class"":""org.jenkinsci.plugins.workflow.job.WorkflowRun"",""actions"":[{""_class"":""hudson.model.CauseAction"",""causes"":[{""_class"":""hudson.model.Cause$UserIdCause"",""shortDescription"":""Started
 by user 
思码逸"",""userId"":""merico"",""userName"":""思码逸""}]},{""_class"":""org.jenkinsci.plugins.workflow.libs.LibrariesAction""},{},{},{""_class"":""org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction""},{""_class"":""org.jenkinsci.plugins.pipeline.
 [...]
+98,"{""ConnectionId"":1}","{""_class"":""org.jenkinsci.plugins.workflow.job.WorkflowRun"",""actions"":[{""_class"":""hudson.model.CauseAction"",""causes"":[{""_class"":""hudson.model.Cause$UpstreamCause"",""shortDescription"":""Started
 by upstream project \""devlake\"" build number 
8"",""upstreamBuild"":8,""upstreamProject"":""devlake"",""upstreamUrl"":""job/devlake/""}]},{""_class"":""org.jenkinsci.plugins.workflow.libs.LibrariesAction""},{},{},{},{""_class"":""org.jenkinsci.plugins.dis
 [...]
+99,"{""ConnectionId"":1}","{""_class"":""org.jenkinsci.plugins.workflow.job.WorkflowRun"",""actions"":[{""_class"":""hudson.model.CauseAction"",""causes"":[{""_class"":""hudson.model.Cause$UpstreamCause"",""shortDescription"":""Started
 by upstream project \""devlake\"" build number 
7"",""upstreamBuild"":7,""upstreamProject"":""devlake"",""upstreamUrl"":""job/devlake/""}]},{""_class"":""org.jenkinsci.plugins.workflow.libs.LibrariesAction""},{},{},{},{""_class"":""org.jenkinsci.plugins.dis
 [...]
+100,"{""ConnectionId"":1}","{""_class"":""org.jenkinsci.plugins.workflow.job.WorkflowRun"",""actions"":[{""_class"":""hudson.model.CauseAction"",""causes"":[{""_class"":""hudson.model.Cause$UserIdCause"",""shortDescription"":""Started
 by user 
思码逸"",""userId"":""merico"",""userName"":""思码逸""}]},{""_class"":""org.jenkinsci.plugins.workflow.libs.LibrariesAction""},{},{},{},{""_class"":""org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction""},{""_class"":""org.jenkinsci.plugins.pipel
 [...]
+101,"{""ConnectionId"":1}","{""_class"":""hudson.model.FreeStyleBuild"",""actions"":[{""_class"":""hudson.model.CauseAction"",""causes"":[{""_class"":""hudson.model.Cause$UserIdCause"",""shortDescription"":""Started
 by user 
思码逸"",""userId"":""merico"",""userName"":""思码逸""}]},{},{""_class"":""org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction""}],""duration"":11,""estimatedDuration"":8,""fullDisplayName"":""dir-test
 » testfile #2"",""number"":2,""result"":""SUCCESS"",""timestamp [...]
+102,"{""ConnectionId"":1}","{""_class"":""hudson.model.FreeStyleBuild"",""actions"":[{""_class"":""hudson.model.CauseAction"",""causes"":[{""_class"":""hudson.model.Cause$UserIdCause"",""shortDescription"":""Started
 by user 
思码逸"",""userId"":""merico"",""userName"":""思码逸""}]},{},{""_class"":""org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction""}],""duration"":4,""estimatedDuration"":8,""fullDisplayName"":""dir-test
 » testfile #1"",""number"":1,""result"":""SUCCESS"",""timestamp" [...]
+103,"{""ConnectionId"":1}","{""_class"":""hudson.model.FreeStyleBuild"",""actions"":[{""_class"":""hudson.model.CauseAction"",""causes"":[{""_class"":""hudson.model.Cause$UserIdCause"",""shortDescription"":""Started
 by user 
思码逸"",""userId"":""merico"",""userName"":""思码逸""}]},{},{""_class"":""org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction""}],""duration"":4,""estimatedDuration"":27,""fullDisplayName"":""dir-test
 » dir-test-2 » free #3"",""number"":3,""result"":""SUCCESS"","" [...]
+104,"{""ConnectionId"":1}","{""_class"":""hudson.model.FreeStyleBuild"",""actions"":[{""_class"":""hudson.model.CauseAction"",""causes"":[{""_class"":""hudson.model.Cause$UserIdCause"",""shortDescription"":""Started
 by user 
思码逸"",""userId"":""merico"",""userName"":""思码逸""}]},{},{""_class"":""org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction""}],""duration"":6,""estimatedDuration"":27,""fullDisplayName"":""dir-test
 » dir-test-2 » free #2"",""number"":2,""result"":""SUCCESS"","" [...]
+105,"{""ConnectionId"":1}","{""_class"":""hudson.model.FreeStyleBuild"",""actions"":[{""_class"":""hudson.model.CauseAction"",""causes"":[{""_class"":""hudson.model.Cause$UserIdCause"",""shortDescription"":""Started
 by user 
思码逸"",""userId"":""merico"",""userName"":""思码逸""}]},{},{""_class"":""org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction""}],""duration"":70,""estimatedDuration"":27,""fullDisplayName"":""dir-test
 » dir-test-2 » free #1"",""number"":1,""result"":""SUCCESS""," [...]
+106,"{""ConnectionId"":1}","{""_class"":""org.jenkinsci.plugins.workflow.job.WorkflowRun"",""actions"":[{""_class"":""hudson.model.CauseAction"",""causes"":[{""_class"":""hudson.model.Cause$UserIdCause"",""shortDescription"":""Started
 by user 
思码逸"",""userId"":""merico"",""userName"":""思码逸""}]},{""_class"":""org.jenkinsci.plugins.workflow.libs.LibrariesAction""},{},{},{""_class"":""org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction""},{""_class"":""org.jenkinsci.plugins.pipeline
 [...]
+107,"{""ConnectionId"":1}","{""_class"":""org.jenkinsci.plugins.workflow.job.WorkflowRun"",""actions"":[{""_class"":""hudson.model.CauseAction"",""causes"":[{""_class"":""hudson.model.Cause$UserIdCause"",""shortDescription"":""Started
 by user 
思码逸"",""userId"":""merico"",""userName"":""思码逸""}]},{""_class"":""org.jenkinsci.plugins.workflow.libs.LibrariesAction""},{},{},{""_class"":""org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction""},{""_class"":""org.jenkinsci.plugins.pipeline
 [...]
+108,"{""ConnectionId"":1}","{""_class"":""org.jenkinsci.plugins.workflow.job.WorkflowRun"",""actions"":[{""_class"":""hudson.model.CauseAction"",""causes"":[{""_class"":""hudson.model.Cause$UserIdCause"",""shortDescription"":""Started
 by user 
思码逸"",""userId"":""merico"",""userName"":""思码逸""}]},{""_class"":""org.jenkinsci.plugins.workflow.libs.LibrariesAction""},{},{},{""_class"":""org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction""},{""_class"":""org.jenkinsci.plugins.pipeline
 [...]
+109,"{""ConnectionId"":1}","{""_class"":""hudson.model.FreeStyleBuild"",""actions"":[{""_class"":""hudson.model.CauseAction"",""causes"":[{""_class"":""hudson.model.Cause$UserIdCause"",""shortDescription"":""Started
 by user 
思码逸"",""userId"":""merico"",""userName"":""思码逸""}]},{},{""_class"":""org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction""}],""duration"":11,""estimatedDuration"":9,""fullDisplayName"":""dir-test
 » dir-test-2 » free1 #4"",""number"":4,""result"":""SUCCESS""," [...]
+110,"{""ConnectionId"":1}","{""_class"":""hudson.model.FreeStyleBuild"",""actions"":[{""_class"":""hudson.model.CauseAction"",""causes"":[{""_class"":""hudson.model.Cause$UserIdCause"",""shortDescription"":""Started
 by user 
思码逸"",""userId"":""merico"",""userName"":""思码逸""}]},{},{""_class"":""org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction""}],""duration"":4,""estimatedDuration"":9,""fullDisplayName"":""dir-test
 » dir-test-2 » free1 #3"",""number"":3,""result"":""SUCCESS"","" [...]
+111,"{""ConnectionId"":1}","{""_class"":""hudson.model.FreeStyleBuild"",""actions"":[{""_class"":""hudson.model.CauseAction"",""causes"":[{""_class"":""hudson.model.Cause$UserIdCause"",""shortDescription"":""Started
 by user 
思码逸"",""userId"":""merico"",""userName"":""思码逸""}]},{},{""_class"":""org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction""}],""duration"":11,""estimatedDuration"":9,""fullDisplayName"":""dir-test
 » dir-test-2 » free1 #2"",""number"":2,""result"":""SUCCESS""," [...]
+112,"{""ConnectionId"":1}","{""_class"":""hudson.model.FreeStyleBuild"",""actions"":[{""_class"":""hudson.model.CauseAction"",""causes"":[{""_class"":""hudson.model.Cause$UserIdCause"",""shortDescription"":""Started
 by user 
思码逸"",""userId"":""merico"",""userName"":""思码逸""}]},{},{""_class"":""org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction""}],""duration"":4,""estimatedDuration"":9,""fullDisplayName"":""dir-test
 » dir-test-2 » free1 #1"",""number"":1,""result"":""SUCCESS"","" [...]
+113,"{""ConnectionId"":1}","{""_class"":""hudson.model.FreeStyleBuild"",""actions"":[{""_class"":""hudson.model.CauseAction"",""causes"":[{""_class"":""hudson.model.Cause$UserIdCause"",""shortDescription"":""Started
 by user 
思码逸"",""userId"":""merico"",""userName"":""思码逸""}]},{},{""_class"":""org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction""}],""duration"":2,""estimatedDuration"":6,""fullDisplayName"":""这是一个改了名字的测试任务
 #12"",""number"":12,""result"":""SUCCESS"",""timestamp"":16 [...]
+114,"{""ConnectionId"":1}","{""_class"":""hudson.model.FreeStyleBuild"",""actions"":[{""_class"":""hudson.model.CauseAction"",""causes"":[{""_class"":""hudson.model.Cause$UserIdCause"",""shortDescription"":""Started
 by user 
思码逸"",""userId"":""merico"",""userName"":""思码逸""}]},{},{""_class"":""org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction""}],""duration"":4,""estimatedDuration"":6,""fullDisplayName"":""这是一个改了名字的测试任务
 #11"",""number"":11,""result"":""SUCCESS"",""timestamp"":16 [...]
+115,"{""ConnectionId"":1}","{""_class"":""hudson.model.FreeStyleBuild"",""actions"":[{""_class"":""hudson.model.CauseAction"",""causes"":[{""_class"":""hudson.model.Cause$UserIdCause"",""shortDescription"":""Started
 by user 
思码逸"",""userId"":""merico"",""userName"":""思码逸""}]},{},{""_class"":""org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction""}],""duration"":12,""estimatedDuration"":6,""fullDisplayName"":""这是一个改了名字的测试任务
 #10"",""number"":10,""result"":""SUCCESS"",""timestamp"":1 [...]
+116,"{""ConnectionId"":1}","{""_class"":""hudson.model.FreeStyleBuild"",""actions"":[{""_class"":""hudson.model.CauseAction"",""causes"":[{""_class"":""hudson.model.Cause$UserIdCause"",""shortDescription"":""Started
 by user 
思码逸"",""userId"":""merico"",""userName"":""思码逸""}]},{},{""_class"":""org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction""}],""duration"":78,""estimatedDuration"":6,""fullDisplayName"":""这是一个改了名字的测试任务
 #9"",""number"":9,""result"":""SUCCESS"",""timestamp"":166 [...]
+117,"{""ConnectionId"":1}","{""_class"":""hudson.model.FreeStyleBuild"",""actions"":[{""_class"":""hudson.model.CauseAction"",""causes"":[{""_class"":""hudson.model.Cause$UserIdCause"",""shortDescription"":""Started
 by user 
思码逸"",""userId"":""merico"",""userName"":""思码逸""}]},{},{""_class"":""org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction""}],""duration"":11,""estimatedDuration"":6,""fullDisplayName"":""这是一个改了名字的测试任务
 #8"",""number"":8,""result"":""SUCCESS"",""timestamp"":165 [...]
+118,"{""ConnectionId"":1}","{""_class"":""hudson.model.FreeStyleBuild"",""actions"":[{""_class"":""hudson.model.CauseAction"",""causes"":[{""_class"":""hudson.model.Cause$UserIdCause"",""shortDescription"":""Started
 by user 
思码逸"",""userId"":""merico"",""userName"":""思码逸""}]},{},{""_class"":""org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction""}],""duration"":8,""estimatedDuration"":6,""fullDisplayName"":""这是一个改了名字的测试任务
 #7"",""number"":7,""result"":""SUCCESS"",""timestamp"":1650 [...]
+119,"{""ConnectionId"":1}","{""_class"":""hudson.model.FreeStyleBuild"",""actions"":[{""_class"":""hudson.model.CauseAction"",""causes"":[{""_class"":""hudson.model.Cause$UserIdCause"",""shortDescription"":""Started
 by user 
思码逸"",""userId"":""merico"",""userName"":""思码逸""}]},{},{""_class"":""org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction""}],""duration"":10,""estimatedDuration"":6,""fullDisplayName"":""这是一个改了名字的测试任务
 #6"",""number"":6,""result"":""SUCCESS"",""timestamp"":165 [...]
+120,"{""ConnectionId"":1}","{""_class"":""hudson.model.FreeStyleBuild"",""actions"":[{""_class"":""hudson.model.CauseAction"",""causes"":[{""_class"":""hudson.model.Cause$UserIdCause"",""shortDescription"":""Started
 by user 
思码逸"",""userId"":""merico"",""userName"":""思码逸""}]},{},{""_class"":""org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction""}],""duration"":6,""estimatedDuration"":6,""fullDisplayName"":""这是一个改了名字的测试任务
 #5"",""number"":5,""result"":""SUCCESS"",""timestamp"":1650 [...]
+121,"{""ConnectionId"":1}","{""_class"":""hudson.model.FreeStyleBuild"",""actions"":[{""_class"":""hudson.model.CauseAction"",""causes"":[{""_class"":""hudson.model.Cause$UserIdCause"",""shortDescription"":""Started
 by user 
思码逸"",""userId"":""merico"",""userName"":""思码逸""}]},{},{""_class"":""org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction""}],""duration"":6,""estimatedDuration"":6,""fullDisplayName"":""这是一个改了名字的测试任务
 #4"",""number"":4,""result"":""SUCCESS"",""timestamp"":1650 [...]
+122,"{""ConnectionId"":1}","{""_class"":""hudson.model.FreeStyleBuild"",""actions"":[{""_class"":""hudson.model.CauseAction"",""causes"":[{""_class"":""hudson.model.Cause$UserIdCause"",""shortDescription"":""Started
 by user 
思码逸"",""userId"":""merico"",""userName"":""思码逸""}]},{},{""_class"":""org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction""}],""duration"":3,""estimatedDuration"":6,""fullDisplayName"":""这是一个改了名字的测试任务
 #3"",""number"":3,""result"":""SUCCESS"",""timestamp"":1650 [...]
+123,"{""ConnectionId"":1}","{""_class"":""hudson.model.FreeStyleBuild"",""actions"":[{""_class"":""hudson.model.CauseAction"",""causes"":[{""_class"":""hudson.model.Cause$UserIdCause"",""shortDescription"":""Started
 by user 
思码逸"",""userId"":""merico"",""userName"":""思码逸""}]},{},{""_class"":""org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction""}],""duration"":4,""estimatedDuration"":6,""fullDisplayName"":""这是一个改了名字的测试任务
 #2"",""number"":2,""result"":""SUCCESS"",""timestamp"":1650 [...]
+124,"{""ConnectionId"":1}","{""_class"":""hudson.model.FreeStyleBuild"",""actions"":[{""_class"":""hudson.model.CauseAction"",""causes"":[{""_class"":""hudson.model.Cause$UserIdCause"",""shortDescription"":""Started
 by user 
思码逸"",""userId"":""merico"",""userName"":""思码逸""}]},{},{""_class"":""org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction""}],""duration"":57,""estimatedDuration"":6,""fullDisplayName"":""这是一个改了名字的测试任务
 #1"",""number"":1,""result"":""SUCCESS"",""timestamp"":165 [...]
diff --git a/plugins/jenkins/e2e/raw_tables/_raw_jenkins_api_jobs.csv 
b/plugins/jenkins/e2e/raw_tables/_raw_jenkins_api_jobs.csv
index a8178b2b..bdd7ef05 100644
--- a/plugins/jenkins/e2e/raw_tables/_raw_jenkins_api_jobs.csv
+++ b/plugins/jenkins/e2e/raw_tables/_raw_jenkins_api_jobs.csv
@@ -1,9 +1,11 @@
 "id","params","data","url","input","created_at"
-12,"{""ConnectionId"":1}","{""_class"":""hudson.model.FreeStyleProject"",""name"":""devlake"",""url"":""https://test.nddtf.com/job/devlake/"",""color"":""blue""}","https://test.nddtf.com/api/json?tree=jobs%5Bname%2Cclass%2Curl%2Ccolor%2Cbase%2Cjobs%5D%7B0%2C100%7D","{""Path"":
 """"}","2022-07-13 02:22:34.044"
-13,"{""ConnectionId"":1}","{""_class"":""com.cloudbees.hudson.plugins.folder.Folder"",""name"":""dir-test"",""url"":""https://test.nddtf.com/job/dir-test/"",""jobs"":[{""_class"":""com.cloudbees.hudson.plugins.folder.Folder""},{""_class"":""org.jenkinsci.plugins.workflow.job.WorkflowJob""},{""_class"":""hudson.model.FreeStyleProject""}]}","https://test.nddtf.com/api/json?tree=jobs%5Bname%2Cclass%2Curl%2Ccolor%2Cbase%2Cjobs%5D%7B0%2C100%7D","{""Path"":
 """"}","2022-07-13 02:22:34.044"
-14,"{""ConnectionId"":1}","{""_class"":""org.jenkinsci.plugins.workflow.job.WorkflowJob"",""name"":""测试流水线"",""url"":""https://test.nddtf.com/job/%E6%B5%8B%E8%AF%95%E6%B5%81%E6%B0%B4%E7%BA%BF/"",""color"":""notbuilt""}","https://test.nddtf.com/api/json?tree=jobs%5Bname%2Cclass%2Curl%2Ccolor%2Cbase%2Cjobs%5D%7B0%2C100%7D","{""Path"":
 """"}","2022-07-13 02:22:34.044"
-15,"{""ConnectionId"":1}","{""_class"":""hudson.model.FreeStyleProject"",""name"":""这是一个改了名字的测试任务"",""url"":""https://test.nddtf.com/job/%E8%BF%99%E6%98%AF%E4%B8%80%E4%B8%AA%E6%94%B9%E4%BA%86%E5%90%8D%E5%AD%97%E7%9A%84%E6%B5%8B%E8%AF%95%E4%BB%BB%E5%8A%A1/"",""color"":""blue""}","https://test.nddtf.com/api/json?tree=jobs%5Bname%2Cclass%2Curl%2Ccolor%2Cbase%2Cjobs%5D%7B0%2C100%7D","{""Path"":
 """"}","2022-07-13 02:22:34.044"
-16,"{""ConnectionId"":1}","{""_class"":""com.cloudbees.hudson.plugins.folder.Folder"",""name"":""dir-test-2"",""url"":""https://test.nddtf.com/job/dir-test/job/dir-test-2/"",""jobs"":[{""_class"":""hudson.model.FreeStyleProject""}]}","https://test.nddtf.com/job/dir-test/api/json?tree=jobs%5Bname%2Cclass%2Curl%2Ccolor%2Cbase%2Cjobs%5D%7B0%2C100%7D","{""Path"":
 ""job/dir-test/""}","2022-07-13 02:22:34.178"
-17,"{""ConnectionId"":1}","{""_class"":""org.jenkinsci.plugins.workflow.job.WorkflowJob"",""name"":""pipeline-test"",""url"":""https://test.nddtf.com/job/dir-test/job/pipeline-test/"",""color"":""notbuilt""}","https://test.nddtf.com/job/dir-test/api/json?tree=jobs%5Bname%2Cclass%2Curl%2Ccolor%2Cbase%2Cjobs%5D%7B0%2C100%7D","{""Path"":
 ""job/dir-test/""}","2022-07-13 02:22:34.178"
-18,"{""ConnectionId"":1}","{""_class"":""hudson.model.FreeStyleProject"",""name"":""testfile"",""url"":""https://test.nddtf.com/job/dir-test/job/testfile/"",""color"":""notbuilt""}","https://test.nddtf.com/job/dir-test/api/json?tree=jobs%5Bname%2Cclass%2Curl%2Ccolor%2Cbase%2Cjobs%5D%7B0%2C100%7D","{""Path"":
 ""job/dir-test/""}","2022-07-13 02:22:34.178"
-19,"{""ConnectionId"":1}","{""_class"":""hudson.model.FreeStyleProject"",""name"":""free"",""url"":""https://test.nddtf.com/job/dir-test/job/dir-test-2/job/free/"",""color"":""notbuilt""}","https://test.nddtf.com/job/dir-test/job/dir-test-2/api/json?tree=jobs%5Bname%2Cclass%2Curl%2Ccolor%2Cbase%2Cjobs%5D%7B0%2C100%7D","{""Path"":
 ""job/dir-test/job/dir-test-2/""}","2022-07-13 02:22:34.500"
+28,"{""ConnectionId"":1}","{""_class"":""hudson.model.FreeStyleProject"",""name"":""devlake"",""url"":""https://test.nddtf.com/job/devlake/"",""color"":""blue"",""upstreamProjects"":[]}","https://test.nddtf.com/api/json?tree=jobs%5Bname%2Cclass%2Curl%2Ccolor%2Cbase%2Cjobs%2CupstreamProjects%5Bname%5D%5D%7B0%2C100%7D","{""Path"":
 """"}","2022-09-08 15:41:06.669"
+29,"{""ConnectionId"":1}","{""_class"":""com.cloudbees.hudson.plugins.folder.Folder"",""name"":""dir-test"",""url"":""https://test.nddtf.com/job/dir-test/"",""jobs"":[{""_class"":""com.cloudbees.hudson.plugins.folder.Folder""},{""_class"":""org.jenkinsci.plugins.workflow.job.WorkflowJob""},{""_class"":""hudson.model.FreeStyleProject""}]}","https://test.nddtf.com/api/json?tree=jobs%5Bname%2Cclass%2Curl%2Ccolor%2Cbase%2Cjobs%2CupstreamProjects%5Bname%5D%5D%7B0%2C100%7D","{""Path"":
 """"}", [...]
+30,"{""ConnectionId"":1}","{""_class"":""org.jenkinsci.plugins.workflow.job.WorkflowJob"",""name"":""pipeline-test2"",""url"":""https://test.nddtf.com/job/pipeline-test2/"",""color"":""blue""}","https://test.nddtf.com/api/json?tree=jobs%5Bname%2Cclass%2Curl%2Ccolor%2Cbase%2Cjobs%2CupstreamProjects%5Bname%5D%5D%7B0%2C100%7D","{""Path"":
 """"}","2022-09-08 15:41:06.669"
+31,"{""ConnectionId"":1}","{""_class"":""org.jenkinsci.plugins.workflow.job.WorkflowJob"",""name"":""测试流水线"",""url"":""https://test.nddtf.com/job/%E6%B5%8B%E8%AF%95%E6%B5%81%E6%B0%B4%E7%BA%BF/"",""color"":""blue""}","https://test.nddtf.com/api/json?tree=jobs%5Bname%2Cclass%2Curl%2Ccolor%2Cbase%2Cjobs%2CupstreamProjects%5Bname%5D%5D%7B0%2C100%7D","{""Path"":
 """"}","2022-09-08 15:41:06.669"
+32,"{""ConnectionId"":1}","{""_class"":""hudson.model.FreeStyleProject"",""name"":""这是一个改了名字的测试任务"",""url"":""https://test.nddtf.com/job/%E8%BF%99%E6%98%AF%E4%B8%80%E4%B8%AA%E6%94%B9%E4%BA%86%E5%90%8D%E5%AD%97%E7%9A%84%E6%B5%8B%E8%AF%95%E4%BB%BB%E5%8A%A1/"",""color"":""blue"",""upstreamProjects"":[]}","https://test.nddtf.com/api/json?tree=jobs%5Bname%2Cclass%2Curl%2Ccolor%2Cbase%2Cjobs%2CupstreamProjects%5Bname%5D%5D%7B0%2C100%7D","{""Path"":
 """"}","2022-09-08 15:41:06.669"
+33,"{""ConnectionId"":1}","{""_class"":""com.cloudbees.hudson.plugins.folder.Folder"",""name"":""dir-test-2"",""url"":""https://test.nddtf.com/job/dir-test/job/dir-test-2/"",""jobs"":[{""_class"":""hudson.model.FreeStyleProject""},{""_class"":""hudson.model.FreeStyleProject""}]}","https://test.nddtf.com/job/dir-test/api/json?tree=jobs%5Bname%2Cclass%2Curl%2Ccolor%2Cbase%2Cjobs%2CupstreamProjects%5Bname%5D%5D%7B0%2C100%7D","{""Path"":
 ""job/dir-test/""}","2022-09-08 15:41:07.052"
+34,"{""ConnectionId"":1}","{""_class"":""org.jenkinsci.plugins.workflow.job.WorkflowJob"",""name"":""pipeline-test"",""url"":""https://test.nddtf.com/job/dir-test/job/pipeline-test/"",""color"":""blue""}","https://test.nddtf.com/job/dir-test/api/json?tree=jobs%5Bname%2Cclass%2Curl%2Ccolor%2Cbase%2Cjobs%2CupstreamProjects%5Bname%5D%5D%7B0%2C100%7D","{""Path"":
 ""job/dir-test/""}","2022-09-08 15:41:07.052"
+35,"{""ConnectionId"":1}","{""_class"":""hudson.model.FreeStyleProject"",""name"":""testfile"",""url"":""https://test.nddtf.com/job/dir-test/job/testfile/"",""color"":""blue"",""upstreamProjects"":[]}","https://test.nddtf.com/job/dir-test/api/json?tree=jobs%5Bname%2Cclass%2Curl%2Ccolor%2Cbase%2Cjobs%2CupstreamProjects%5Bname%5D%5D%7B0%2C100%7D","{""Path"":
 ""job/dir-test/""}","2022-09-08 15:41:07.052"
+36,"{""ConnectionId"":1}","{""_class"":""hudson.model.FreeStyleProject"",""name"":""free"",""url"":""https://test.nddtf.com/job/dir-test/job/dir-test-2/job/free/"",""color"":""blue"",""upstreamProjects"":[]}","https://test.nddtf.com/job/dir-test/job/dir-test-2/api/json?tree=jobs%5Bname%2Cclass%2Curl%2Ccolor%2Cbase%2Cjobs%2CupstreamProjects%5Bname%5D%5D%7B0%2C100%7D","{""Path"":
 ""job/dir-test/job/dir-test-2/""}","2022-09-08 15:41:07.368"
+37,"{""ConnectionId"":1}","{""_class"":""hudson.model.FreeStyleProject"",""name"":""free1"",""url"":""https://test.nddtf.com/job/dir-test/job/dir-test-2/job/free1/"",""color"":""blue"",""upstreamProjects"":[]}","https://test.nddtf.com/job/dir-test/job/dir-test-2/api/json?tree=jobs%5Bname%2Cclass%2Curl%2Ccolor%2Cbase%2Cjobs%2CupstreamProjects%5Bname%5D%5D%7B0%2C100%7D","{""Path"":
 ""job/dir-test/job/dir-test-2/""}","2022-09-08 15:41:07.368"
diff --git a/plugins/jenkins/e2e/snapshot_tables/_tool_jenkins_build_repos.csv 
b/plugins/jenkins/e2e/snapshot_tables/_tool_jenkins_build_repos.csv
new file mode 100644
index 00000000..0d7c7b3e
--- /dev/null
+++ b/plugins/jenkins/e2e/snapshot_tables/_tool_jenkins_build_repos.csv
@@ -0,0 +1,9 @@
+connection_id,build_name,commit_sha,branch,repo_url,_raw_data_params,_raw_data_table,_raw_data_id,_raw_data_remark
+1,devlake 
#1,ceeffdfdd06bce232f9adb3a656265bad13a8473,refs/remotes/origin/main,https://github.com/merico-dev/lake.git,"{""ConnectionId"":1}",_raw_jenkins_api_builds,95,
+1,devlake 
#2,0f886c74949c3ee7e489188911c7dc0c1d547418,refs/remotes/origin/main,https://github.com/merico-dev/lake.git,"{""ConnectionId"":1}",_raw_jenkins_api_builds,94,
+1,devlake 
#3,0f886c74949c3ee7e489188911c7dc0c1d547418,refs/remotes/origin/main,https://github.com/merico-dev/lake.git,"{""ConnectionId"":1}",_raw_jenkins_api_builds,93,
+1,devlake 
#4,20139afef3c6ec9f3ebffcb06e243b145cbef8c6,refs/remotes/origin/main,https://github.com/merico-dev/lake.git,"{""ConnectionId"":1}",_raw_jenkins_api_builds,92,
+1,devlake 
#5,20139afef3c6ec9f3ebffcb06e243b145cbef8c6,refs/remotes/origin/main,https://github.com/merico-dev/lake.git,"{""ConnectionId"":1}",_raw_jenkins_api_builds,91,
+1,devlake 
#6,20139afef3c6ec9f3ebffcb06e243b145cbef8c6,refs/remotes/origin/main,https://github.com/merico-dev/lake.git,"{""ConnectionId"":1}",_raw_jenkins_api_builds,90,
+1,devlake 
#7,0006e8105d70318aff5eeee38d405fa181a32aa0,refs/remotes/origin/main,https://github.com/merico-dev/lake.git,"{""ConnectionId"":1}",_raw_jenkins_api_builds,89,
+1,devlake 
#8,0006e8105d70318aff5eeee38d405fa181a32aa0,refs/remotes/origin/main,https://github.com/merico-dev/lake.git,"{""ConnectionId"":1}",_raw_jenkins_api_builds,88,
diff --git a/plugins/jenkins/e2e/snapshot_tables/_tool_jenkins_builds.csv 
b/plugins/jenkins/e2e/snapshot_tables/_tool_jenkins_builds.csv
index e6133952..5b2dd31a 100644
--- a/plugins/jenkins/e2e/snapshot_tables/_tool_jenkins_builds.csv
+++ b/plugins/jenkins/e2e/snapshot_tables/_tool_jenkins_builds.csv
@@ -1,9 +1,38 @@
-connection_id,job_name,number,_raw_data_params,_raw_data_table,_raw_data_id,_raw_data_remark,duration,display_name,estimated_duration,result,timestamp,start_time,commit_sha
-1,这是一个改了名字的测试任务,1,"{""ConnectionId"":1}",_raw_jenkins_api_builds,82,,57,,10,SUCCESS,1650017153775,2022-04-15T10:05:53.000+00:00,
-1,这是一个改了名字的测试任务,2,"{""ConnectionId"":1}",_raw_jenkins_api_builds,81,,4,,10,SUCCESS,1650017177939,2022-04-15T10:06:17.000+00:00,
-1,这是一个改了名字的测试任务,3,"{""ConnectionId"":1}",_raw_jenkins_api_builds,80,,3,,10,SUCCESS,1650017186253,2022-04-15T10:06:26.000+00:00,
-1,这是一个改了名字的测试任务,4,"{""ConnectionId"":1}",_raw_jenkins_api_builds,79,,6,,10,SUCCESS,1650022556910,2022-04-15T11:35:56.000+00:00,
-1,这是一个改了名字的测试任务,5,"{""ConnectionId"":1}",_raw_jenkins_api_builds,78,,6,,10,SUCCESS,1650022558491,2022-04-15T11:35:58.000+00:00,
-1,这是一个改了名字的测试任务,6,"{""ConnectionId"":1}",_raw_jenkins_api_builds,77,,10,,10,SUCCESS,1650022560954,2022-04-15T11:36:00.000+00:00,
-1,这是一个改了名字的测试任务,7,"{""ConnectionId"":1}",_raw_jenkins_api_builds,76,,8,,10,SUCCESS,1650023883294,2022-04-15T11:58:03.000+00:00,
-1,这是一个改了名字的测试任务,8,"{""ConnectionId"":1}",_raw_jenkins_api_builds,75,,11,,10,SUCCESS,1650023894336,2022-04-15T11:58:14.000+00:00,
+connection_id,job_name,number,duration,display_name,estimated_duration,result,timestamp,start_time,commit_sha,_raw_data_params,_raw_data_table,_raw_data_id,_raw_data_remark
+1,devlake,1,14820,devlake 
#1,1457,SUCCESS,1650017416514,2022-04-15T10:10:16.000+00:00,,"{""ConnectionId"":1}",_raw_jenkins_api_builds,95,
+1,devlake,2,2121,devlake 
#2,1457,SUCCESS,1650022548450,2022-04-15T11:35:48.000+00:00,,"{""ConnectionId"":1}",_raw_jenkins_api_builds,94,
+1,devlake,3,1587,devlake 
#3,1457,SUCCESS,1650024049161,2022-04-15T12:00:49.000+00:00,,"{""ConnectionId"":1}",_raw_jenkins_api_builds,93,
+1,devlake,4,13952,devlake 
#4,1457,SUCCESS,1662647203905,2022-09-08T14:26:43.000+00:00,,"{""ConnectionId"":1}",_raw_jenkins_api_builds,92,
+1,devlake,5,1274,devlake 
#5,1457,SUCCESS,1662647231332,2022-09-08T14:27:11.000+00:00,,"{""ConnectionId"":1}",_raw_jenkins_api_builds,91,
+1,devlake,6,1202,devlake 
#6,1457,SUCCESS,1662647242809,2022-09-08T14:27:22.000+00:00,,"{""ConnectionId"":1}",_raw_jenkins_api_builds,90,
+1,devlake,7,1988,devlake 
#7,1457,SUCCESS,1662651625889,2022-09-08T15:40:25.000+00:00,,"{""ConnectionId"":1}",_raw_jenkins_api_builds,89,
+1,devlake,8,1180,devlake 
#8,1457,SUCCESS,1662651640536,2022-09-08T15:40:40.000+00:00,,"{""ConnectionId"":1}",_raw_jenkins_api_builds,88,
+1,free,1,70,dir-test » dir-test-2 » free 
#1,27,SUCCESS,1658385566471,2022-07-21T06:39:26.000+00:00,,"{""ConnectionId"":1}",_raw_jenkins_api_builds,105,
+1,free,2,6,dir-test » dir-test-2 » free 
#2,27,SUCCESS,1658385576367,2022-07-21T06:39:36.000+00:00,,"{""ConnectionId"":1}",_raw_jenkins_api_builds,104,
+1,free,3,4,dir-test » dir-test-2 » free 
#3,27,SUCCESS,1662647217041,2022-09-08T14:26:57.000+00:00,,"{""ConnectionId"":1}",_raw_jenkins_api_builds,103,
+1,free1,1,4,dir-test » dir-test-2 » free1 
#1,9,SUCCESS,1658386240842,2022-07-21T06:50:40.000+00:00,,"{""ConnectionId"":1}",_raw_jenkins_api_builds,112,
+1,free1,2,11,dir-test » dir-test-2 » free1 
#2,9,SUCCESS,1658386250446,2022-07-21T06:50:50.000+00:00,,"{""ConnectionId"":1}",_raw_jenkins_api_builds,111,
+1,free1,3,4,dir-test » dir-test-2 » free1 
#3,9,SUCCESS,1658386255052,2022-07-21T06:50:55.000+00:00,,"{""ConnectionId"":1}",_raw_jenkins_api_builds,110,
+1,free1,4,11,dir-test » dir-test-2 » free1 
#4,9,SUCCESS,1662647217746,2022-09-08T14:26:57.000+00:00,,"{""ConnectionId"":1}",_raw_jenkins_api_builds,109,
+1,pipeline-test,1,1429,dir-test » pipeline-test 
#1,745,SUCCESS,1658385602419,2022-07-21T06:40:02.000+00:00,,"{""ConnectionId"":1}",_raw_jenkins_api_builds,97,
+1,pipeline-test,2,61,dir-test » pipeline-test 
#2,745,SUCCESS,1662647211512,2022-09-08T14:26:51.000+00:00,,"{""ConnectionId"":1}",_raw_jenkins_api_builds,96,
+1,pipeline-test2,1,4564,pipeline-test2 
#1,1972,SUCCESS,1662651613681,2022-09-08T15:40:13.000+00:00,,"{""ConnectionId"":1}",_raw_jenkins_api_builds,100,
+1,pipeline-test2,2,551,pipeline-test2 
#2,1972,SUCCESS,1662651633991,2022-09-08T15:40:33.000+00:00,,"{""ConnectionId"":1}",_raw_jenkins_api_builds,99,
+1,pipeline-test2,3,802,pipeline-test2 
#3,1972,SUCCESS,1662651648992,2022-09-08T15:40:48.000+00:00,,"{""ConnectionId"":1}",_raw_jenkins_api_builds,98,
+1,testfile,1,4,dir-test » testfile 
#1,8,SUCCESS,1658385600801,2022-07-21T06:40:00.000+00:00,,"{""ConnectionId"":1}",_raw_jenkins_api_builds,102,
+1,testfile,2,11,dir-test » testfile 
#2,8,SUCCESS,1662647212436,2022-09-08T14:26:52.000+00:00,,"{""ConnectionId"":1}",_raw_jenkins_api_builds,101,
+1,测试流水线,1,1539,测试流水线 
#1,568,SUCCESS,1662647205888,2022-09-08T14:26:45.000+00:00,,"{""ConnectionId"":1}",_raw_jenkins_api_builds,108,
+1,测试流水线,2,74,测试流水线 
#2,568,SUCCESS,1662647232072,2022-09-08T14:27:12.000+00:00,,"{""ConnectionId"":1}",_raw_jenkins_api_builds,107,
+1,测试流水线,3,90,测试流水线 
#3,568,SUCCESS,1662651649571,2022-09-08T15:40:49.000+00:00,,"{""ConnectionId"":1}",_raw_jenkins_api_builds,106,
+1,这是一个改了名字的测试任务,1,57,这是一个改了名字的测试任务 
#1,6,SUCCESS,1650017153775,2022-04-15T10:05:53.000+00:00,,"{""ConnectionId"":1}",_raw_jenkins_api_builds,124,
+1,这是一个改了名字的测试任务,2,4,这是一个改了名字的测试任务 
#2,6,SUCCESS,1650017177939,2022-04-15T10:06:17.000+00:00,,"{""ConnectionId"":1}",_raw_jenkins_api_builds,123,
+1,这是一个改了名字的测试任务,3,3,这是一个改了名字的测试任务 
#3,6,SUCCESS,1650017186253,2022-04-15T10:06:26.000+00:00,,"{""ConnectionId"":1}",_raw_jenkins_api_builds,122,
+1,这是一个改了名字的测试任务,4,6,这是一个改了名字的测试任务 
#4,6,SUCCESS,1650022556910,2022-04-15T11:35:56.000+00:00,,"{""ConnectionId"":1}",_raw_jenkins_api_builds,121,
+1,这是一个改了名字的测试任务,5,6,这是一个改了名字的测试任务 
#5,6,SUCCESS,1650022558491,2022-04-15T11:35:58.000+00:00,,"{""ConnectionId"":1}",_raw_jenkins_api_builds,120,
+1,这是一个改了名字的测试任务,6,10,这是一个改了名字的测试任务 
#6,6,SUCCESS,1650022560954,2022-04-15T11:36:00.000+00:00,,"{""ConnectionId"":1}",_raw_jenkins_api_builds,119,
+1,这是一个改了名字的测试任务,7,8,这是一个改了名字的测试任务 
#7,6,SUCCESS,1650023883294,2022-04-15T11:58:03.000+00:00,,"{""ConnectionId"":1}",_raw_jenkins_api_builds,118,
+1,这是一个改了名字的测试任务,8,11,这是一个改了名字的测试任务 
#8,6,SUCCESS,1650023894336,2022-04-15T11:58:14.000+00:00,,"{""ConnectionId"":1}",_raw_jenkins_api_builds,117,
+1,这是一个改了名字的测试任务,9,78,这是一个改了名字的测试任务 
#9,6,SUCCESS,1662647207972,2022-09-08T14:26:47.000+00:00,,"{""ConnectionId"":1}",_raw_jenkins_api_builds,116,
+1,这是一个改了名字的测试任务,10,12,这是一个改了名字的测试任务 
#10,6,SUCCESS,1662647233074,2022-09-08T14:27:13.000+00:00,,"{""ConnectionId"":1}",_raw_jenkins_api_builds,115,
+1,这是一个改了名字的测试任务,11,4,这是一个改了名字的测试任务 
#11,6,SUCCESS,1662651656567,2022-09-08T15:40:56.000+00:00,,"{""ConnectionId"":1}",_raw_jenkins_api_builds,114,
+1,这是一个改了名字的测试任务,12,2,这是一个改了名字的测试任务 
#12,6,SUCCESS,1662651657893,2022-09-08T15:40:57.000+00:00,,"{""ConnectionId"":1}",_raw_jenkins_api_builds,113,
diff --git a/plugins/jenkins/e2e/snapshot_tables/_tool_jenkins_jobs.csv 
b/plugins/jenkins/e2e/snapshot_tables/_tool_jenkins_jobs.csv
index 4b3db8a0..2b01ef9b 100644
--- a/plugins/jenkins/e2e/snapshot_tables/_tool_jenkins_jobs.csv
+++ b/plugins/jenkins/e2e/snapshot_tables/_tool_jenkins_jobs.csv
@@ -1,9 +1,11 @@
 
connection_id,name,path,class,color,base,_raw_data_params,_raw_data_table,_raw_data_id,_raw_data_remark
-1,devlake,,hudson.model.FreeStyleProject,blue,,"{""ConnectionId"":1}",_raw_jenkins_api_jobs,12,
-1,dir-test,,com.cloudbees.hudson.plugins.folder.Folder,,,"{""ConnectionId"":1}",_raw_jenkins_api_jobs,13,
-1,dir-test-2,job/dir-test/,com.cloudbees.hudson.plugins.folder.Folder,,,"{""ConnectionId"":1}",_raw_jenkins_api_jobs,16,
-1,free,job/dir-test/job/dir-test-2/,hudson.model.FreeStyleProject,notbuilt,,"{""ConnectionId"":1}",_raw_jenkins_api_jobs,19,
-1,pipeline-test,job/dir-test/,org.jenkinsci.plugins.workflow.job.WorkflowJob,notbuilt,,"{""ConnectionId"":1}",_raw_jenkins_api_jobs,17,
-1,testfile,job/dir-test/,hudson.model.FreeStyleProject,notbuilt,,"{""ConnectionId"":1}",_raw_jenkins_api_jobs,18,
-1,测试流水线,,org.jenkinsci.plugins.workflow.job.WorkflowJob,notbuilt,,"{""ConnectionId"":1}",_raw_jenkins_api_jobs,14,
-1,这是一个改了名字的测试任务,,hudson.model.FreeStyleProject,blue,,"{""ConnectionId"":1}",_raw_jenkins_api_jobs,15,
+1,devlake,,hudson.model.FreeStyleProject,blue,,"{""ConnectionId"":1}",_raw_jenkins_api_jobs,28,
+1,dir-test,,com.cloudbees.hudson.plugins.folder.Folder,,,"{""ConnectionId"":1}",_raw_jenkins_api_jobs,29,
+1,dir-test-2,job/dir-test/,com.cloudbees.hudson.plugins.folder.Folder,,,"{""ConnectionId"":1}",_raw_jenkins_api_jobs,33,
+1,free,job/dir-test/job/dir-test-2/,hudson.model.FreeStyleProject,blue,,"{""ConnectionId"":1}",_raw_jenkins_api_jobs,36,
+1,free1,job/dir-test/job/dir-test-2/,hudson.model.FreeStyleProject,blue,,"{""ConnectionId"":1}",_raw_jenkins_api_jobs,37,
+1,pipeline-test,job/dir-test/,org.jenkinsci.plugins.workflow.job.WorkflowJob,blue,,"{""ConnectionId"":1}",_raw_jenkins_api_jobs,34,
+1,pipeline-test2,,org.jenkinsci.plugins.workflow.job.WorkflowJob,blue,,"{""ConnectionId"":1}",_raw_jenkins_api_jobs,30,
+1,testfile,job/dir-test/,hudson.model.FreeStyleProject,blue,,"{""ConnectionId"":1}",_raw_jenkins_api_jobs,35,
+1,测试流水线,,org.jenkinsci.plugins.workflow.job.WorkflowJob,blue,,"{""ConnectionId"":1}",_raw_jenkins_api_jobs,31,
+1,这是一个改了名字的测试任务,,hudson.model.FreeStyleProject,blue,,"{""ConnectionId"":1}",_raw_jenkins_api_jobs,32,
diff --git 
a/plugins/jenkins/e2e/snapshot_tables/cicd_pipeline_relationships.csv 
b/plugins/jenkins/e2e/snapshot_tables/cicd_pipeline_relationships.csv
new file mode 100644
index 00000000..91f497f3
--- /dev/null
+++ b/plugins/jenkins/e2e/snapshot_tables/cicd_pipeline_relationships.csv
@@ -0,0 +1 @@
+parent_pipeline_id,child_pipeline_id
diff --git a/plugins/jenkins/e2e/snapshot_tables/cicd_pipelines.csv 
b/plugins/jenkins/e2e/snapshot_tables/cicd_pipelines.csv
new file mode 100644
index 00000000..fa0e6af3
--- /dev/null
+++ b/plugins/jenkins/e2e/snapshot_tables/cicd_pipelines.csv
@@ -0,0 +1,38 @@
+id,name,result,status,type,duration_sec,environment,created_date,finished_date
+jenkins:JenkinsPipeline:1:devlake 
#1,devlake,SUCCESS,DONE,CI/CD,14,,2022-04-15T10:10:16.000+00:00,2022-04-15T10:10:30.000+00:00
+jenkins:JenkinsPipeline:1:devlake 
#2,devlake,SUCCESS,DONE,CI/CD,2,,2022-04-15T11:35:48.000+00:00,2022-04-15T11:35:50.000+00:00
+jenkins:JenkinsPipeline:1:devlake 
#3,devlake,SUCCESS,DONE,CI/CD,1,,2022-04-15T12:00:49.000+00:00,2022-04-15T12:00:50.000+00:00
+jenkins:JenkinsPipeline:1:devlake 
#4,devlake,SUCCESS,DONE,CI/CD,13,,2022-09-08T14:26:43.000+00:00,2022-09-08T14:26:56.000+00:00
+jenkins:JenkinsPipeline:1:devlake 
#5,devlake,SUCCESS,DONE,CI/CD,1,,2022-09-08T14:27:11.000+00:00,2022-09-08T14:27:12.000+00:00
+jenkins:JenkinsPipeline:1:devlake 
#6,devlake,SUCCESS,DONE,CI/CD,1,,2022-09-08T14:27:22.000+00:00,2022-09-08T14:27:23.000+00:00
+jenkins:JenkinsPipeline:1:devlake 
#7,devlake,SUCCESS,DONE,CI/CD,1,,2022-09-08T15:40:25.000+00:00,2022-09-08T15:40:26.000+00:00
+jenkins:JenkinsPipeline:1:devlake 
#8,devlake,SUCCESS,DONE,CI/CD,1,,2022-09-08T15:40:40.000+00:00,2022-09-08T15:40:41.000+00:00
+jenkins:JenkinsPipeline:1:dir-test » dir-test-2 » free 
#1,free,SUCCESS,DONE,CI/CD,0,,2022-07-21T06:39:26.000+00:00,2022-07-21T06:39:26.000+00:00
+jenkins:JenkinsPipeline:1:dir-test » dir-test-2 » free 
#2,free,SUCCESS,DONE,CI/CD,0,,2022-07-21T06:39:36.000+00:00,2022-07-21T06:39:36.000+00:00
+jenkins:JenkinsPipeline:1:dir-test » dir-test-2 » free 
#3,free,SUCCESS,DONE,CI/CD,0,,2022-09-08T14:26:57.000+00:00,2022-09-08T14:26:57.000+00:00
+jenkins:JenkinsPipeline:1:dir-test » dir-test-2 » free1 
#1,free1,SUCCESS,DONE,CI/CD,0,,2022-07-21T06:50:40.000+00:00,2022-07-21T06:50:40.000+00:00
+jenkins:JenkinsPipeline:1:dir-test » dir-test-2 » free1 
#2,free1,SUCCESS,DONE,CI/CD,0,,2022-07-21T06:50:50.000+00:00,2022-07-21T06:50:50.000+00:00
+jenkins:JenkinsPipeline:1:dir-test » dir-test-2 » free1 
#3,free1,SUCCESS,DONE,CI/CD,0,,2022-07-21T06:50:55.000+00:00,2022-07-21T06:50:55.000+00:00
+jenkins:JenkinsPipeline:1:dir-test » dir-test-2 » free1 
#4,free1,SUCCESS,DONE,CI/CD,0,,2022-09-08T14:26:57.000+00:00,2022-09-08T14:26:57.000+00:00
+jenkins:JenkinsPipeline:1:dir-test » pipeline-test 
#1,pipeline-test,SUCCESS,DONE,CI/CD,1,,2022-07-21T06:40:02.000+00:00,2022-07-21T06:40:03.000+00:00
+jenkins:JenkinsPipeline:1:dir-test » pipeline-test 
#2,pipeline-test,SUCCESS,DONE,CI/CD,0,,2022-09-08T14:26:51.000+00:00,2022-09-08T14:26:51.000+00:00
+jenkins:JenkinsPipeline:1:dir-test » testfile 
#1,testfile,SUCCESS,DONE,CI/CD,0,,2022-07-21T06:40:00.000+00:00,2022-07-21T06:40:00.000+00:00
+jenkins:JenkinsPipeline:1:dir-test » testfile 
#2,testfile,SUCCESS,DONE,CI/CD,0,,2022-09-08T14:26:52.000+00:00,2022-09-08T14:26:52.000+00:00
+jenkins:JenkinsPipeline:1:pipeline-test2 
#1,pipeline-test2,SUCCESS,DONE,CI/CD,4,,2022-09-08T15:40:13.000+00:00,2022-09-08T15:40:17.000+00:00
+jenkins:JenkinsPipeline:1:pipeline-test2 
#2,pipeline-test2,SUCCESS,DONE,CI/CD,0,,2022-09-08T15:40:33.000+00:00,2022-09-08T15:40:33.000+00:00
+jenkins:JenkinsPipeline:1:pipeline-test2 
#3,pipeline-test2,SUCCESS,DONE,CI/CD,0,,2022-09-08T15:40:48.000+00:00,2022-09-08T15:40:48.000+00:00
+jenkins:JenkinsPipeline:1:测试流水线 
#1,测试流水线,SUCCESS,DONE,CI/CD,1,,2022-09-08T14:26:45.000+00:00,2022-09-08T14:26:46.000+00:00
+jenkins:JenkinsPipeline:1:测试流水线 
#2,测试流水线,SUCCESS,DONE,CI/CD,0,,2022-09-08T14:27:12.000+00:00,2022-09-08T14:27:12.000+00:00
+jenkins:JenkinsPipeline:1:测试流水线 
#3,测试流水线,SUCCESS,DONE,CI/CD,0,,2022-09-08T15:40:49.000+00:00,2022-09-08T15:40:49.000+00:00
+jenkins:JenkinsPipeline:1:这是一个改了名字的测试任务 
#1,这是一个改了名字的测试任务,SUCCESS,DONE,CI/CD,0,,2022-04-15T10:05:53.000+00:00,2022-04-15T10:05:53.000+00:00
+jenkins:JenkinsPipeline:1:这是一个改了名字的测试任务 
#10,这是一个改了名字的测试任务,SUCCESS,DONE,CI/CD,0,,2022-09-08T14:27:13.000+00:00,2022-09-08T14:27:13.000+00:00
+jenkins:JenkinsPipeline:1:这是一个改了名字的测试任务 
#11,这是一个改了名字的测试任务,SUCCESS,DONE,CI/CD,0,,2022-09-08T15:40:56.000+00:00,2022-09-08T15:40:56.000+00:00
+jenkins:JenkinsPipeline:1:这是一个改了名字的测试任务 
#12,这是一个改了名字的测试任务,SUCCESS,DONE,CI/CD,0,,2022-09-08T15:40:57.000+00:00,2022-09-08T15:40:57.000+00:00
+jenkins:JenkinsPipeline:1:这是一个改了名字的测试任务 
#2,这是一个改了名字的测试任务,SUCCESS,DONE,CI/CD,0,,2022-04-15T10:06:17.000+00:00,2022-04-15T10:06:17.000+00:00
+jenkins:JenkinsPipeline:1:这是一个改了名字的测试任务 
#3,这是一个改了名字的测试任务,SUCCESS,DONE,CI/CD,0,,2022-04-15T10:06:26.000+00:00,2022-04-15T10:06:26.000+00:00
+jenkins:JenkinsPipeline:1:这是一个改了名字的测试任务 
#4,这是一个改了名字的测试任务,SUCCESS,DONE,CI/CD,0,,2022-04-15T11:35:56.000+00:00,2022-04-15T11:35:56.000+00:00
+jenkins:JenkinsPipeline:1:这是一个改了名字的测试任务 
#5,这是一个改了名字的测试任务,SUCCESS,DONE,CI/CD,0,,2022-04-15T11:35:58.000+00:00,2022-04-15T11:35:58.000+00:00
+jenkins:JenkinsPipeline:1:这是一个改了名字的测试任务 
#6,这是一个改了名字的测试任务,SUCCESS,DONE,CI/CD,0,,2022-04-15T11:36:00.000+00:00,2022-04-15T11:36:00.000+00:00
+jenkins:JenkinsPipeline:1:这是一个改了名字的测试任务 
#7,这是一个改了名字的测试任务,SUCCESS,DONE,CI/CD,0,,2022-04-15T11:58:03.000+00:00,2022-04-15T11:58:03.000+00:00
+jenkins:JenkinsPipeline:1:这是一个改了名字的测试任务 
#8,这是一个改了名字的测试任务,SUCCESS,DONE,CI/CD,0,,2022-04-15T11:58:14.000+00:00,2022-04-15T11:58:14.000+00:00
+jenkins:JenkinsPipeline:1:这是一个改了名字的测试任务 
#9,这是一个改了名字的测试任务,SUCCESS,DONE,CI/CD,0,,2022-09-08T14:26:47.000+00:00,2022-09-08T14:26:47.000+00:00
diff --git a/plugins/jenkins/e2e/snapshot_tables/cicd_tasks.csv 
b/plugins/jenkins/e2e/snapshot_tables/cicd_tasks.csv
new file mode 100644
index 00000000..a9353102
--- /dev/null
+++ b/plugins/jenkins/e2e/snapshot_tables/cicd_tasks.csv
@@ -0,0 +1,38 @@
+id,name,pipeline_id,result,status,type,environment,duration_sec,started_date,finished_date
+jenkins:JenkinsTask:1:devlake #1,devlake,jenkins:JenkinsPipeline:1:devlake 
#1,SUCCESS,DONE,CI/CD,,14,2022-04-15T10:10:16.000+00:00,2022-04-15T10:10:30.000+00:00
+jenkins:JenkinsTask:1:devlake #2,devlake,jenkins:JenkinsPipeline:1:devlake 
#2,SUCCESS,DONE,CI/CD,,2,2022-04-15T11:35:48.000+00:00,2022-04-15T11:35:50.000+00:00
+jenkins:JenkinsTask:1:devlake #3,devlake,jenkins:JenkinsPipeline:1:devlake 
#3,SUCCESS,DONE,CI/CD,,1,2022-04-15T12:00:49.000+00:00,2022-04-15T12:00:50.000+00:00
+jenkins:JenkinsTask:1:devlake #4,devlake,jenkins:JenkinsPipeline:1:devlake 
#4,SUCCESS,DONE,CI/CD,,13,2022-09-08T14:26:43.000+00:00,2022-09-08T14:26:56.000+00:00
+jenkins:JenkinsTask:1:devlake #5,devlake,jenkins:JenkinsPipeline:1:devlake 
#5,SUCCESS,DONE,CI/CD,,1,2022-09-08T14:27:11.000+00:00,2022-09-08T14:27:12.000+00:00
+jenkins:JenkinsTask:1:devlake #6,devlake,jenkins:JenkinsPipeline:1:devlake 
#6,SUCCESS,DONE,CI/CD,,1,2022-09-08T14:27:22.000+00:00,2022-09-08T14:27:23.000+00:00
+jenkins:JenkinsTask:1:devlake #7,devlake,jenkins:JenkinsPipeline:1:devlake 
#7,SUCCESS,DONE,CI/CD,,1,2022-09-08T15:40:25.000+00:00,2022-09-08T15:40:26.000+00:00
+jenkins:JenkinsTask:1:devlake #8,devlake,jenkins:JenkinsPipeline:1:devlake 
#8,SUCCESS,DONE,CI/CD,,1,2022-09-08T15:40:40.000+00:00,2022-09-08T15:40:41.000+00:00
+jenkins:JenkinsTask:1:dir-test » dir-test-2 » free 
#1,free,jenkins:JenkinsPipeline:1:dir-test » dir-test-2 » free 
#1,SUCCESS,DONE,CI/CD,,0,2022-07-21T06:39:26.000+00:00,2022-07-21T06:39:26.000+00:00
+jenkins:JenkinsTask:1:dir-test » dir-test-2 » free 
#2,free,jenkins:JenkinsPipeline:1:dir-test » dir-test-2 » free 
#2,SUCCESS,DONE,CI/CD,,0,2022-07-21T06:39:36.000+00:00,2022-07-21T06:39:36.000+00:00
+jenkins:JenkinsTask:1:dir-test » dir-test-2 » free 
#3,free,jenkins:JenkinsPipeline:1:dir-test » dir-test-2 » free 
#3,SUCCESS,DONE,CI/CD,,0,2022-09-08T14:26:57.000+00:00,2022-09-08T14:26:57.000+00:00
+jenkins:JenkinsTask:1:dir-test » dir-test-2 » free1 
#1,free1,jenkins:JenkinsPipeline:1:dir-test » dir-test-2 » free1 
#1,SUCCESS,DONE,CI/CD,,0,2022-07-21T06:50:40.000+00:00,2022-07-21T06:50:40.000+00:00
+jenkins:JenkinsTask:1:dir-test » dir-test-2 » free1 
#2,free1,jenkins:JenkinsPipeline:1:dir-test » dir-test-2 » free1 
#2,SUCCESS,DONE,CI/CD,,0,2022-07-21T06:50:50.000+00:00,2022-07-21T06:50:50.000+00:00
+jenkins:JenkinsTask:1:dir-test » dir-test-2 » free1 
#3,free1,jenkins:JenkinsPipeline:1:dir-test » dir-test-2 » free1 
#3,SUCCESS,DONE,CI/CD,,0,2022-07-21T06:50:55.000+00:00,2022-07-21T06:50:55.000+00:00
+jenkins:JenkinsTask:1:dir-test » dir-test-2 » free1 
#4,free1,jenkins:JenkinsPipeline:1:dir-test » dir-test-2 » free1 
#4,SUCCESS,DONE,CI/CD,,0,2022-09-08T14:26:57.000+00:00,2022-09-08T14:26:57.000+00:00
+jenkins:JenkinsTask:1:dir-test » pipeline-test 
#1,pipeline-test,jenkins:JenkinsPipeline:1:dir-test » pipeline-test 
#1,SUCCESS,DONE,CI/CD,,1,2022-07-21T06:40:02.000+00:00,2022-07-21T06:40:03.000+00:00
+jenkins:JenkinsTask:1:dir-test » pipeline-test 
#2,pipeline-test,jenkins:JenkinsPipeline:1:dir-test » pipeline-test 
#2,SUCCESS,DONE,CI/CD,,0,2022-09-08T14:26:51.000+00:00,2022-09-08T14:26:51.000+00:00
+jenkins:JenkinsTask:1:dir-test » testfile 
#1,testfile,jenkins:JenkinsPipeline:1:dir-test » testfile 
#1,SUCCESS,DONE,CI/CD,,0,2022-07-21T06:40:00.000+00:00,2022-07-21T06:40:00.000+00:00
+jenkins:JenkinsTask:1:dir-test » testfile 
#2,testfile,jenkins:JenkinsPipeline:1:dir-test » testfile 
#2,SUCCESS,DONE,CI/CD,,0,2022-09-08T14:26:52.000+00:00,2022-09-08T14:26:52.000+00:00
+jenkins:JenkinsTask:1:pipeline-test2 
#1,pipeline-test2,jenkins:JenkinsPipeline:1:pipeline-test2 
#1,SUCCESS,DONE,CI/CD,,4,2022-09-08T15:40:13.000+00:00,2022-09-08T15:40:17.000+00:00
+jenkins:JenkinsTask:1:pipeline-test2 
#2,pipeline-test2,jenkins:JenkinsPipeline:1:pipeline-test2 
#2,SUCCESS,DONE,CI/CD,,0,2022-09-08T15:40:33.000+00:00,2022-09-08T15:40:33.000+00:00
+jenkins:JenkinsTask:1:pipeline-test2 
#3,pipeline-test2,jenkins:JenkinsPipeline:1:pipeline-test2 
#3,SUCCESS,DONE,CI/CD,,0,2022-09-08T15:40:48.000+00:00,2022-09-08T15:40:48.000+00:00
+jenkins:JenkinsTask:1:测试流水线 #1,测试流水线,jenkins:JenkinsPipeline:1:测试流水线 
#1,SUCCESS,DONE,CI/CD,,1,2022-09-08T14:26:45.000+00:00,2022-09-08T14:26:46.000+00:00
+jenkins:JenkinsTask:1:测试流水线 #2,测试流水线,jenkins:JenkinsPipeline:1:测试流水线 
#2,SUCCESS,DONE,CI/CD,,0,2022-09-08T14:27:12.000+00:00,2022-09-08T14:27:12.000+00:00
+jenkins:JenkinsTask:1:测试流水线 #3,测试流水线,jenkins:JenkinsPipeline:1:测试流水线 
#3,SUCCESS,DONE,CI/CD,,0,2022-09-08T15:40:49.000+00:00,2022-09-08T15:40:49.000+00:00
+jenkins:JenkinsTask:1:这是一个改了名字的测试任务 
#1,这是一个改了名字的测试任务,jenkins:JenkinsPipeline:1:这是一个改了名字的测试任务 
#1,SUCCESS,DONE,CI/CD,,0,2022-04-15T10:05:53.000+00:00,2022-04-15T10:05:53.000+00:00
+jenkins:JenkinsTask:1:这是一个改了名字的测试任务 
#10,这是一个改了名字的测试任务,jenkins:JenkinsPipeline:1:这是一个改了名字的测试任务 
#10,SUCCESS,DONE,CI/CD,,0,2022-09-08T14:27:13.000+00:00,2022-09-08T14:27:13.000+00:00
+jenkins:JenkinsTask:1:这是一个改了名字的测试任务 
#11,这是一个改了名字的测试任务,jenkins:JenkinsPipeline:1:这是一个改了名字的测试任务 
#11,SUCCESS,DONE,CI/CD,,0,2022-09-08T15:40:56.000+00:00,2022-09-08T15:40:56.000+00:00
+jenkins:JenkinsTask:1:这是一个改了名字的测试任务 
#12,这是一个改了名字的测试任务,jenkins:JenkinsPipeline:1:这是一个改了名字的测试任务 
#12,SUCCESS,DONE,CI/CD,,0,2022-09-08T15:40:57.000+00:00,2022-09-08T15:40:57.000+00:00
+jenkins:JenkinsTask:1:这是一个改了名字的测试任务 
#2,这是一个改了名字的测试任务,jenkins:JenkinsPipeline:1:这是一个改了名字的测试任务 
#2,SUCCESS,DONE,CI/CD,,0,2022-04-15T10:06:17.000+00:00,2022-04-15T10:06:17.000+00:00
+jenkins:JenkinsTask:1:这是一个改了名字的测试任务 
#3,这是一个改了名字的测试任务,jenkins:JenkinsPipeline:1:这是一个改了名字的测试任务 
#3,SUCCESS,DONE,CI/CD,,0,2022-04-15T10:06:26.000+00:00,2022-04-15T10:06:26.000+00:00
+jenkins:JenkinsTask:1:这是一个改了名字的测试任务 
#4,这是一个改了名字的测试任务,jenkins:JenkinsPipeline:1:这是一个改了名字的测试任务 
#4,SUCCESS,DONE,CI/CD,,0,2022-04-15T11:35:56.000+00:00,2022-04-15T11:35:56.000+00:00
+jenkins:JenkinsTask:1:这是一个改了名字的测试任务 
#5,这是一个改了名字的测试任务,jenkins:JenkinsPipeline:1:这是一个改了名字的测试任务 
#5,SUCCESS,DONE,CI/CD,,0,2022-04-15T11:35:58.000+00:00,2022-04-15T11:35:58.000+00:00
+jenkins:JenkinsTask:1:这是一个改了名字的测试任务 
#6,这是一个改了名字的测试任务,jenkins:JenkinsPipeline:1:这是一个改了名字的测试任务 
#6,SUCCESS,DONE,CI/CD,,0,2022-04-15T11:36:00.000+00:00,2022-04-15T11:36:00.000+00:00
+jenkins:JenkinsTask:1:这是一个改了名字的测试任务 
#7,这是一个改了名字的测试任务,jenkins:JenkinsPipeline:1:这是一个改了名字的测试任务 
#7,SUCCESS,DONE,CI/CD,,0,2022-04-15T11:58:03.000+00:00,2022-04-15T11:58:03.000+00:00
+jenkins:JenkinsTask:1:这是一个改了名字的测试任务 
#8,这是一个改了名字的测试任务,jenkins:JenkinsPipeline:1:这是一个改了名字的测试任务 
#8,SUCCESS,DONE,CI/CD,,0,2022-04-15T11:58:14.000+00:00,2022-04-15T11:58:14.000+00:00
+jenkins:JenkinsTask:1:这是一个改了名字的测试任务 
#9,这是一个改了名字的测试任务,jenkins:JenkinsPipeline:1:这是一个改了名字的测试任务 
#9,SUCCESS,DONE,CI/CD,,0,2022-09-08T14:26:47.000+00:00,2022-09-08T14:26:47.000+00:00
diff --git a/plugins/jenkins/e2e/snapshot_tables/jobs.csv 
b/plugins/jenkins/e2e/snapshot_tables/jobs.csv
index 2d511d14..a9414d62 100644
--- a/plugins/jenkins/e2e/snapshot_tables/jobs.csv
+++ b/plugins/jenkins/e2e/snapshot_tables/jobs.csv
@@ -1,9 +1,11 @@
 id,name,_raw_data_params,_raw_data_table,_raw_data_id,_raw_data_remark,type
-jenkins:JenkinsJob:1:devlake,devlake,"{""ConnectionId"":1}",_raw_jenkins_api_jobs,12,,hudson.model.FreeStyleProject
-jenkins:JenkinsJob:1:dir-test,dir-test,"{""ConnectionId"":1}",_raw_jenkins_api_jobs,13,,com.cloudbees.hudson.plugins.folder.Folder
-jenkins:JenkinsJob:1:dir-test-2,dir-test-2,"{""ConnectionId"":1}",_raw_jenkins_api_jobs,16,,com.cloudbees.hudson.plugins.folder.Folder
-jenkins:JenkinsJob:1:free,free,"{""ConnectionId"":1}",_raw_jenkins_api_jobs,19,,hudson.model.FreeStyleProject
-jenkins:JenkinsJob:1:pipeline-test,pipeline-test,"{""ConnectionId"":1}",_raw_jenkins_api_jobs,17,,org.jenkinsci.plugins.workflow.job.WorkflowJob
-jenkins:JenkinsJob:1:testfile,testfile,"{""ConnectionId"":1}",_raw_jenkins_api_jobs,18,,hudson.model.FreeStyleProject
-jenkins:JenkinsJob:1:测试流水线,测试流水线,"{""ConnectionId"":1}",_raw_jenkins_api_jobs,14,,org.jenkinsci.plugins.workflow.job.WorkflowJob
-jenkins:JenkinsJob:1:这是一个改了名字的测试任务,这是一个改了名字的测试任务,"{""ConnectionId"":1}",_raw_jenkins_api_jobs,15,,hudson.model.FreeStyleProject
+jenkins:JenkinsJob:1:devlake,devlake,"{""ConnectionId"":1}",_raw_jenkins_api_jobs,28,,hudson.model.FreeStyleProject
+jenkins:JenkinsJob:1:dir-test,dir-test,"{""ConnectionId"":1}",_raw_jenkins_api_jobs,29,,com.cloudbees.hudson.plugins.folder.Folder
+jenkins:JenkinsJob:1:dir-test-2,dir-test-2,"{""ConnectionId"":1}",_raw_jenkins_api_jobs,33,,com.cloudbees.hudson.plugins.folder.Folder
+jenkins:JenkinsJob:1:free,free,"{""ConnectionId"":1}",_raw_jenkins_api_jobs,36,,hudson.model.FreeStyleProject
+jenkins:JenkinsJob:1:free1,free1,"{""ConnectionId"":1}",_raw_jenkins_api_jobs,37,,hudson.model.FreeStyleProject
+jenkins:JenkinsJob:1:pipeline-test,pipeline-test,"{""ConnectionId"":1}",_raw_jenkins_api_jobs,34,,org.jenkinsci.plugins.workflow.job.WorkflowJob
+jenkins:JenkinsJob:1:pipeline-test2,pipeline-test2,"{""ConnectionId"":1}",_raw_jenkins_api_jobs,30,,org.jenkinsci.plugins.workflow.job.WorkflowJob
+jenkins:JenkinsJob:1:testfile,testfile,"{""ConnectionId"":1}",_raw_jenkins_api_jobs,35,,hudson.model.FreeStyleProject
+jenkins:JenkinsJob:1:测试流水线,测试流水线,"{""ConnectionId"":1}",_raw_jenkins_api_jobs,31,,org.jenkinsci.plugins.workflow.job.WorkflowJob
+jenkins:JenkinsJob:1:这是一个改了名字的测试任务,这是一个改了名字的测试任务,"{""ConnectionId"":1}",_raw_jenkins_api_jobs,32,,hudson.model.FreeStyleProject

Reply via email to