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

warren 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 be41363d feat(jenkins): add cicd scope id (#3707)
be41363d is described below

commit be41363d91df16a5e46d9f942cb0300bed79d453
Author: Warren Chen <[email protected]>
AuthorDate: Thu Nov 10 19:38:51 2022 +0800

    feat(jenkins): add cicd scope id (#3707)
---
 models/domainlayer/devops/cicd_pipeline.go         |  1 +
 models/domainlayer/devops/cicd_scope.go            | 11 +++
 models/domainlayer/devops/cicd_task.go             |  1 +
 .../dora/e2e/snapshot_tables/lake_cicd_tasks.csv   | 50 ++++++------
 .../e2e/snapshot_tables/lake_cicd_tasks_prefix.csv |  4 +-
 plugins/jenkins/e2e/builds_test.go                 |  3 +
 plugins/jenkins/e2e/jobs_test.go                   | 11 +++
 .../e2e/snapshot_tables/_tool_jenkins_jobs.csv     |  4 +-
 .../jenkins/e2e/snapshot_tables/cicd_pipelines.csv | 60 +++++++-------
 .../jenkins/e2e/snapshot_tables/cicd_scopes.csv    |  2 +
 plugins/jenkins/e2e/snapshot_tables/cicd_tasks.csv | 60 +++++++-------
 .../snapshot_tables/cicd_tasks_after_stages.csv    | 34 ++++----
 plugins/jenkins/e2e/stages_test.go                 |  2 +
 plugins/jenkins/impl/impl.go                       |  1 +
 plugins/jenkins/models/job.go                      |  2 +-
 .../20221110_change_index_of_job_path.go           | 95 ++++++++++++++++++++++
 .../jenkins/models/migrationscripts/register.go    |  1 +
 plugins/jenkins/tasks/build_cicd_convertor.go      |  3 +
 plugins/jenkins/tasks/job_convertor.go             | 90 ++++++++++++++++++++
 plugins/jenkins/tasks/job_extractor.go             |  2 +-
 plugins/jenkins/tasks/stage_convertor.go           |  3 +
 plugins/jenkins/tasks/task_data.go                 |  1 +
 22 files changed, 333 insertions(+), 108 deletions(-)

diff --git a/models/domainlayer/devops/cicd_pipeline.go 
b/models/domainlayer/devops/cicd_pipeline.go
index e92c1c4e..0decb3bd 100644
--- a/models/domainlayer/devops/cicd_pipeline.go
+++ b/models/domainlayer/devops/cicd_pipeline.go
@@ -33,6 +33,7 @@ type CICDPipeline struct {
        Environment  string `gorm:"type:varchar(255)"`
        CreatedDate  time.Time
        FinishedDate *time.Time
+       CicdScopeId  string `gorm:"index;type:varchar(255)"`
 }
 
 func (CICDPipeline) TableName() string {
diff --git a/models/domainlayer/devops/cicd_scope.go 
b/models/domainlayer/devops/cicd_scope.go
index 068ee5cf..fcb3646e 100644
--- a/models/domainlayer/devops/cicd_scope.go
+++ b/models/domainlayer/devops/cicd_scope.go
@@ -19,9 +19,12 @@ package devops
 
 import (
        "github.com/apache/incubator-devlake/models/domainlayer"
+       "github.com/apache/incubator-devlake/plugins/core"
        "time"
 )
 
+var _ core.Scope = (*CicdScope)(nil)
+
 type CicdScope struct {
        domainlayer.DomainEntity
        Name        string `gorm:"type:varchar(255)"`
@@ -34,3 +37,11 @@ type CicdScope struct {
 func (CicdScope) TableName() string {
        return "cicd_scopes"
 }
+
+func (r *CicdScope) ScopeId() string {
+       return r.Id
+}
+
+func (r *CicdScope) ScopeName() string {
+       return r.Name
+}
diff --git a/models/domainlayer/devops/cicd_task.go 
b/models/domainlayer/devops/cicd_task.go
index 2a786e13..d7d933b6 100644
--- a/models/domainlayer/devops/cicd_task.go
+++ b/models/domainlayer/devops/cicd_task.go
@@ -47,6 +47,7 @@ type CICDTask struct {
        DurationSec  uint64
        StartedDate  time.Time
        FinishedDate *time.Time
+       CicdScopeId  string `gorm:"index;type:varchar(255)"`
 }
 
 func (CICDTask) TableName() string {
diff --git a/plugins/dora/e2e/snapshot_tables/lake_cicd_tasks.csv 
b/plugins/dora/e2e/snapshot_tables/lake_cicd_tasks.csv
index 1db38869..f444b048 100644
--- a/plugins/dora/e2e/snapshot_tables/lake_cicd_tasks.csv
+++ b/plugins/dora/e2e/snapshot_tables/lake_cicd_tasks.csv
@@ -1,25 +1,25 @@
-id,name,pipeline_id,result,status,type,environment,duration_sec,started_date,finished_date
-github:GithubJob:1:7773010057,build_deploy,github:GithubRun:1:3022300997,SUCCESS,DONE,,PRODUCTION,57,2022-09-09T12:12:52.000+00:00,2022-09-09T12:13:49.000+00:00
-github:GithubJob:1:7773010060,deployment,github:GithubRun:1:3022301033,SUCCESS,DONE,,PRODUCTION,991,2022-09-09T12:13:58.000+00:00,2022-09-09T12:30:29.000+00:00
-github:GithubJob:1:7773010062,deploy,github:GithubRun:1:3022348786,SUCCESS,DONE,,PRODUCTION,1006,2022-09-09T12:21:30.000+00:00,2022-09-09T12:38:16.000+00:00
-github:GithubJob:1:8269045794,deploy,github:GithubRun:1:3022052551,FAILURE,DONE,DEPLOYMENT,PRODUCTION,72,2022-09-09T11:27:13.000+00:00,2022-09-09T11:28:25.000+00:00
-github:GithubJob:1:8269045795,test 
(ubuntu-latest),github:GithubRun:1:3022052557,SUCCESS,DONE,DEPLOYMENT,,191,2022-09-09T11:27:42.000+00:00,2022-09-09T11:30:53.000+00:00
-github:GithubJob:1:8269045819,commit-msg,github:GithubRun:1:3022052555,SUCCESS,DONE,DEPLOYMENT,,8,2022-09-09T11:26:38.000+00:00,2022-09-09T11:26:46.000+00:00
-github:GithubJob:1:8269045928,e2e-mysql,github:GithubRun:1:3022052558,SUCCESS,DONE,,,200,2022-09-09T11:28:00.000+00:00,2022-09-09T11:31:20.000+00:00
-github:GithubJob:1:8269046116,check Apache license 
header,github:GithubRun:1:3022052589,SUCCESS,DONE,,,57,2022-09-09T11:28:34.000+00:00,2022-09-09T11:29:31.000+00:00
-github:GithubJob:1:8269415129,deploy,github:GithubRun:1:3022190519,FAILURE,DONE,,PRODUCTION,84,2022-09-09T11:51:21.000+00:00,2022-09-09T11:52:45.000+00:00
-github:GithubJob:1:8269415130,test 
(ubuntu-latest),github:GithubRun:1:3022190524,SUCCESS,DONE,,,182,2022-09-09T11:50:31.000+00:00,2022-09-09T11:53:33.000+00:00
-github:GithubJob:1:8269415142,check Apache license 
header,github:GithubRun:1:3022190525,SUCCESS,DONE,,,63,2022-09-09T11:52:06.000+00:00,2022-09-09T11:53:09.000+00:00
-github:GithubJob:1:8269415165,commit-msg,github:GithubRun:1:3022190521,SUCCESS,DONE,,,10,2022-09-09T11:52:46.000+00:00,2022-09-09T11:52:56.000+00:00
-github:GithubJob:1:8269415315,deployment,github:GithubRun:1:3022190520,SUCCESS,DONE,,PRODUCTION,242,2022-09-09T11:53:45.000+00:00,2022-09-09T11:57:47.000+00:00
-github:GithubJob:1:8269598312,e2e-mysql,github:GithubRun:1:3022255519,SUCCESS,DONE,,,828,2022-09-09T12:05:04.000+00:00,2022-09-09T12:18:52.000+00:00
-github:GithubJob:1:8269598316,test 
(ubuntu-latest),github:GithubRun:1:3022255511,SUCCESS,DONE,,,1016,2022-09-09T12:05:49.000+00:00,2022-09-09T12:22:45.000+00:00
-github:GithubJob:1:8269598318,lint,github:GithubRun:1:3022255516,FAILURE,DONE,,,62,2022-09-09T12:02:28.000+00:00,2022-09-09T12:03:30.000+00:00
-github:GithubJob:1:8269598325,check Apache license 
header,github:GithubRun:1:3022255517,SUCCESS,DONE,,,52,2022-09-09T12:03:51.000+00:00,2022-09-09T12:04:43.000+00:00
-github:GithubJob:1:8269598469,commit-msg,github:GithubRun:1:3022255524,FAILURE,DONE,,,41,2022-09-09T12:06:55.000+00:00,2022-09-09T12:07:36.000+00:00
-github:GithubJob:1:8269729324,e2e-mysql,github:GithubRun:1:3022300995,SUCCESS,DONE,,,1007,2022-09-09T12:10:08.000+00:00,2022-09-09T12:26:55.000+00:00
-github:GithubJob:1:8269729327,xx_deploy_xx,github:GithubRun:1:3022301001,FAILURE,DONE,,PRODUCTION,82,2022-09-09T12:11:22.000+00:00,2022-09-09T12:12:44.000+00:00
-github:GithubJob:1:8269729550,build_deployment,github:GithubRun:1:3022301007,SUCCESS,DONE,,PRODUCTION,6,2022-09-09T12:12:02.000+00:00,2022-09-09T12:12:08.000+00:00
-github:GithubJob:1:8269729553,build_deploy,github:GithubRun:1:3022300997,SUCCESS,DONE,,PRODUCTION,57,2022-09-09T12:12:52.000+00:00,2022-09-09T12:13:49.000+00:00
-github:GithubJob:1:8269729821,deployment,github:GithubRun:1:3022301033,SUCCESS,DONE,,PRODUCTION,991,2022-09-09T12:13:58.000+00:00,2022-09-09T12:30:29.000+00:00
-github:GithubJob:1:8269872730,deploy,github:GithubRun:1:3022348786,SUCCESS,DONE,,PRODUCTION,1006,2022-09-09T12:21:30.000+00:00,2022-09-09T12:38:16.000+00:00
+id,name,pipeline_id,result,status,type,environment,duration_sec,started_date,finished_date,cicd_scope_id
+github:GithubJob:1:7773010057,build_deploy,github:GithubRun:1:3022300997,SUCCESS,DONE,,PRODUCTION,57,2022-09-09T12:12:52.000+00:00,2022-09-09T12:13:49.000+00:00,
+github:GithubJob:1:7773010060,deployment,github:GithubRun:1:3022301033,SUCCESS,DONE,,PRODUCTION,991,2022-09-09T12:13:58.000+00:00,2022-09-09T12:30:29.000+00:00,
+github:GithubJob:1:7773010062,deploy,github:GithubRun:1:3022348786,SUCCESS,DONE,,PRODUCTION,1006,2022-09-09T12:21:30.000+00:00,2022-09-09T12:38:16.000+00:00,
+github:GithubJob:1:8269045794,deploy,github:GithubRun:1:3022052551,FAILURE,DONE,DEPLOYMENT,PRODUCTION,72,2022-09-09T11:27:13.000+00:00,2022-09-09T11:28:25.000+00:00,
+github:GithubJob:1:8269045795,test 
(ubuntu-latest),github:GithubRun:1:3022052557,SUCCESS,DONE,DEPLOYMENT,,191,2022-09-09T11:27:42.000+00:00,2022-09-09T11:30:53.000+00:00,
+github:GithubJob:1:8269045819,commit-msg,github:GithubRun:1:3022052555,SUCCESS,DONE,DEPLOYMENT,,8,2022-09-09T11:26:38.000+00:00,2022-09-09T11:26:46.000+00:00,
+github:GithubJob:1:8269045928,e2e-mysql,github:GithubRun:1:3022052558,SUCCESS,DONE,,,200,2022-09-09T11:28:00.000+00:00,2022-09-09T11:31:20.000+00:00,
+github:GithubJob:1:8269046116,check Apache license 
header,github:GithubRun:1:3022052589,SUCCESS,DONE,,,57,2022-09-09T11:28:34.000+00:00,2022-09-09T11:29:31.000+00:00,
+github:GithubJob:1:8269415129,deploy,github:GithubRun:1:3022190519,FAILURE,DONE,,PRODUCTION,84,2022-09-09T11:51:21.000+00:00,2022-09-09T11:52:45.000+00:00,
+github:GithubJob:1:8269415130,test 
(ubuntu-latest),github:GithubRun:1:3022190524,SUCCESS,DONE,,,182,2022-09-09T11:50:31.000+00:00,2022-09-09T11:53:33.000+00:00,
+github:GithubJob:1:8269415142,check Apache license 
header,github:GithubRun:1:3022190525,SUCCESS,DONE,,,63,2022-09-09T11:52:06.000+00:00,2022-09-09T11:53:09.000+00:00,
+github:GithubJob:1:8269415165,commit-msg,github:GithubRun:1:3022190521,SUCCESS,DONE,,,10,2022-09-09T11:52:46.000+00:00,2022-09-09T11:52:56.000+00:00,
+github:GithubJob:1:8269415315,deployment,github:GithubRun:1:3022190520,SUCCESS,DONE,,PRODUCTION,242,2022-09-09T11:53:45.000+00:00,2022-09-09T11:57:47.000+00:00,
+github:GithubJob:1:8269598312,e2e-mysql,github:GithubRun:1:3022255519,SUCCESS,DONE,,,828,2022-09-09T12:05:04.000+00:00,2022-09-09T12:18:52.000+00:00,
+github:GithubJob:1:8269598316,test 
(ubuntu-latest),github:GithubRun:1:3022255511,SUCCESS,DONE,,,1016,2022-09-09T12:05:49.000+00:00,2022-09-09T12:22:45.000+00:00,
+github:GithubJob:1:8269598318,lint,github:GithubRun:1:3022255516,FAILURE,DONE,,,62,2022-09-09T12:02:28.000+00:00,2022-09-09T12:03:30.000+00:00,
+github:GithubJob:1:8269598325,check Apache license 
header,github:GithubRun:1:3022255517,SUCCESS,DONE,,,52,2022-09-09T12:03:51.000+00:00,2022-09-09T12:04:43.000+00:00,
+github:GithubJob:1:8269598469,commit-msg,github:GithubRun:1:3022255524,FAILURE,DONE,,,41,2022-09-09T12:06:55.000+00:00,2022-09-09T12:07:36.000+00:00,
+github:GithubJob:1:8269729324,e2e-mysql,github:GithubRun:1:3022300995,SUCCESS,DONE,,,1007,2022-09-09T12:10:08.000+00:00,2022-09-09T12:26:55.000+00:00,
+github:GithubJob:1:8269729327,xx_deploy_xx,github:GithubRun:1:3022301001,FAILURE,DONE,,PRODUCTION,82,2022-09-09T12:11:22.000+00:00,2022-09-09T12:12:44.000+00:00,
+github:GithubJob:1:8269729550,build_deployment,github:GithubRun:1:3022301007,SUCCESS,DONE,,PRODUCTION,6,2022-09-09T12:12:02.000+00:00,2022-09-09T12:12:08.000+00:00,
+github:GithubJob:1:8269729553,build_deploy,github:GithubRun:1:3022300997,SUCCESS,DONE,,PRODUCTION,57,2022-09-09T12:12:52.000+00:00,2022-09-09T12:13:49.000+00:00,
+github:GithubJob:1:8269729821,deployment,github:GithubRun:1:3022301033,SUCCESS,DONE,,PRODUCTION,991,2022-09-09T12:13:58.000+00:00,2022-09-09T12:30:29.000+00:00,
+github:GithubJob:1:8269872730,deploy,github:GithubRun:1:3022348786,SUCCESS,DONE,,PRODUCTION,1006,2022-09-09T12:21:30.000+00:00,2022-09-09T12:38:16.000+00:00,
diff --git a/plugins/dora/e2e/snapshot_tables/lake_cicd_tasks_prefix.csv 
b/plugins/dora/e2e/snapshot_tables/lake_cicd_tasks_prefix.csv
index 482b9f9b..deb5f3c8 100644
--- a/plugins/dora/e2e/snapshot_tables/lake_cicd_tasks_prefix.csv
+++ b/plugins/dora/e2e/snapshot_tables/lake_cicd_tasks_prefix.csv
@@ -1,2 +1,2 @@
-id,name,pipeline_id,result,status,type,environment,duration_sec,started_date,finished_date
-jenkins:GithubJob:1:8269872730,deploy,jenkins:GithubRun:1:3022348786,SUCCESS,DONE,,PRODUCTION,1006,2022-09-09T12:21:30.000+00:00,2022-09-09T12:38:16.000+00:00
+id,name,pipeline_id,result,status,type,environment,duration_sec,started_date,finished_date,cicd_scope_id
+jenkins:GithubJob:1:8269872730,deploy,jenkins:GithubRun:1:3022348786,SUCCESS,DONE,,PRODUCTION,1006,2022-09-09T12:21:30.000+00:00,2022-09-09T12:38:16.000+00:00,
diff --git a/plugins/jenkins/e2e/builds_test.go 
b/plugins/jenkins/e2e/builds_test.go
index 7021975c..5a925c09 100644
--- a/plugins/jenkins/e2e/builds_test.go
+++ b/plugins/jenkins/e2e/builds_test.go
@@ -38,6 +38,7 @@ func TestJenkinsBuildsDataFlow(t *testing.T) {
                        JobName:      `devlake`,
                        JobPath:      
`job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/`,
                },
+               Job: &models.JenkinsJob{FullName: "Test-jenkins-dir » 
test-jenkins-sub-dir » test-sub-sub-dir » devlake"},
        }
 
        // import raw data table
@@ -99,6 +100,7 @@ func TestJenkinsBuildsDataFlow(t *testing.T) {
                        "duration_sec",
                        "started_date",
                        "finished_date",
+                       "cicd_scope_id",
                ),
        )
 
@@ -114,6 +116,7 @@ func TestJenkinsBuildsDataFlow(t *testing.T) {
                        "environment",
                        "created_date",
                        "finished_date",
+                       "cicd_scope_id",
                ),
        )
 
diff --git a/plugins/jenkins/e2e/jobs_test.go b/plugins/jenkins/e2e/jobs_test.go
index 8dfee7ff..a8ffa278 100644
--- a/plugins/jenkins/e2e/jobs_test.go
+++ b/plugins/jenkins/e2e/jobs_test.go
@@ -18,6 +18,8 @@ limitations under the License.
 package e2e
 
 import (
+       "github.com/apache/incubator-devlake/models/common"
+       "github.com/apache/incubator-devlake/models/domainlayer/devops"
        "testing"
 
        "github.com/apache/incubator-devlake/helpers/e2ehelper"
@@ -37,6 +39,7 @@ func TestJenkinsJobsDataFlow(t *testing.T) {
                        JobName:      `devlake`,
                        JobPath:      
`job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/`,
                },
+               Job: &models.JenkinsJob{FullName: "Test-jenkins-dir » 
test-jenkins-sub-dir » test-sub-sub-dir » devlake"},
        }
 
        // import raw data table
@@ -62,4 +65,12 @@ func TestJenkinsJobsDataFlow(t *testing.T) {
                        "primary_view",
                ),
        )
+
+       // verify extraction
+       dataflowTester.FlushTabler(&devops.CicdScope{})
+       dataflowTester.Subtask(tasks.ConvertJobsMeta, taskData)
+       dataflowTester.VerifyTableWithOptions(&devops.CicdScope{}, 
e2ehelper.TableOptions{
+               CSVRelPath:  "./snapshot_tables/cicd_scopes.csv",
+               IgnoreTypes: []interface{}{common.NoPKModel{}},
+       })
 }
diff --git a/plugins/jenkins/e2e/snapshot_tables/_tool_jenkins_jobs.csv 
b/plugins/jenkins/e2e/snapshot_tables/_tool_jenkins_jobs.csv
index 8666233b..0fbab23f 100644
--- a/plugins/jenkins/e2e/snapshot_tables/_tool_jenkins_jobs.csv
+++ b/plugins/jenkins/e2e/snapshot_tables/_tool_jenkins_jobs.csv
@@ -1,2 +1,2 @@
-connection_id,full_name,path,name,class,color,base,url,description,primary_view,_raw_data_params,_raw_data_table,_raw_data_id,_raw_data_remark
-1,Test-jenkins-dir/test-jenkins-sub-dir/test-sub-sub-dir/test-job,job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/,test-job,hudson.model.FreeStyleProject,blue,,https://jenkins-zjk.merico.cn/job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/job/test-job/,12121,All,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/""}",_raw_jenkins_api_jobs,16247,
+connection_id,full_name,name,path,class,color,base,url,description,primary_view,_raw_data_params,_raw_data_table,_raw_data_id,_raw_data_remark
+1,Test-jenkins-dir/test-jenkins-sub-dir/test-sub-sub-dir/test-job,test-job,job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/,hudson.model.FreeStyleProject,blue,,https://jenkins-zjk.merico.cn/job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/job/test-job/,12121,All,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/""}",_raw_jenkins_api_jobs,16247,
diff --git a/plugins/jenkins/e2e/snapshot_tables/cicd_pipelines.csv 
b/plugins/jenkins/e2e/snapshot_tables/cicd_pipelines.csv
index 25f1e658..c64339d0 100644
--- a/plugins/jenkins/e2e/snapshot_tables/cicd_pipelines.csv
+++ b/plugins/jenkins/e2e/snapshot_tables/cicd_pipelines.csv
@@ -1,30 +1,30 @@
-id,name,result,status,type,duration_sec,environment,created_date,finished_date,_raw_data_params,_raw_data_table,_raw_data_id,_raw_data_remark
-jenkins:JenkinsBuild:1:pipeline-test2 
#1,job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/devlake,SUCCESS,DONE,,4,,2022-09-08T15:40:13.000+00:00,2022-09-08T15:40:17.000+00:00,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/""}",_raw_jenkins_api_builds,100,
-jenkins:JenkinsBuild:1:Test-jenkins-dir » test-jenkins-sub-dir » 
test-sub-sub-dir » devlake 
#11,job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/devlake,SUCCESS,DONE,,14,,2022-04-15T10:10:16.000+00:00,2022-04-15T10:10:30.000+00:00,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/""}",_raw_jenkins_api_builds,95,
-jenkins:JenkinsBuild:1:Test-jenkins-dir » test-jenkins-sub-dir » 
test-sub-sub-dir » devlake 
#13,job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/devlake,SUCCESS,DONE,,1,,2022-07-21T06:40:02.000+00:00,2022-07-21T06:40:03.000+00:00,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/""}",_raw_jenkins_api_builds,97,
-jenkins:JenkinsBuild:1:Test-jenkins-dir » test-jenkins-sub-dir » 
test-sub-sub-dir » devlake 
#15,job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/devlake,SUCCESS,DONE,,0,,2022-07-21T06:39:26.000+00:00,2022-07-21T06:39:26.000+00:00,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/""}",_raw_jenkins_api_builds,105,
-jenkins:JenkinsBuild:1:Test-jenkins-dir » test-jenkins-sub-dir » 
test-sub-sub-dir » devlake 
#17,job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/devlake,SUCCESS,DONE,,0,,2022-04-15T10:05:53.000+00:00,2022-04-15T10:05:53.000+00:00,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/""}",_raw_jenkins_api_builds,124,
-jenkins:JenkinsBuild:1:Test-jenkins-dir » test-jenkins-sub-dir » 
test-sub-sub-dir » devlake 
#170,job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/devlake,SUCCESS,DONE,,0,,2022-09-08T14:27:13.000+00:00,2022-09-08T14:27:13.000+00:00,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/""}",_raw_jenkins_api_builds,115,
-jenkins:JenkinsBuild:1:Test-jenkins-dir » test-jenkins-sub-dir » 
test-sub-sub-dir » devlake 
#171,job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/devlake,SUCCESS,DONE,,0,,2022-09-08T15:40:56.000+00:00,2022-09-08T15:40:56.000+00:00,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/""}",_raw_jenkins_api_builds,114,
-jenkins:JenkinsBuild:1:Test-jenkins-dir » test-jenkins-sub-dir » 
test-sub-sub-dir » devlake 
#172,job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/devlake,SUCCESS,DONE,,0,,2022-09-08T15:40:57.000+00:00,2022-09-08T15:40:57.000+00:00,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/""}",_raw_jenkins_api_builds,113,
-jenkins:JenkinsBuild:1:Test-jenkins-dir » test-jenkins-sub-dir » 
test-sub-sub-dir » devlake 
#21,job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/devlake,SUCCESS,DONE,,2,,2022-04-15T11:35:48.000+00:00,2022-04-15T11:35:50.000+00:00,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/""}",_raw_jenkins_api_builds,94,
-jenkins:JenkinsBuild:1:Test-jenkins-dir » test-jenkins-sub-dir » 
test-sub-sub-dir » devlake 
#215,job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/devlake,SUCCESS,DONE,,0,,2022-09-08T14:26:52.000+00:00,2022-09-08T14:26:52.000+00:00,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/""}",_raw_jenkins_api_builds,101,
-jenkins:JenkinsBuild:1:Test-jenkins-dir » test-jenkins-sub-dir » 
test-sub-sub-dir » devlake 
#23,job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/devlake,SUCCESS,DONE,,0,,2022-09-08T14:26:51.000+00:00,2022-09-08T14:26:51.000+00:00,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/""}",_raw_jenkins_api_builds,96,
-jenkins:JenkinsBuild:1:Test-jenkins-dir » test-jenkins-sub-dir » 
test-sub-sub-dir » devlake 
#24,job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/devlake,SUCCESS,DONE,,0,,2022-09-08T15:40:33.000+00:00,2022-09-08T15:40:33.000+00:00,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/""}",_raw_jenkins_api_builds,99,
-jenkins:JenkinsBuild:1:Test-jenkins-dir » test-jenkins-sub-dir » 
test-sub-sub-dir » devlake 
#25,job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/devlake,SUCCESS,DONE,,0,,2022-07-21T06:39:36.000+00:00,2022-07-21T06:39:36.000+00:00,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/""}",_raw_jenkins_api_builds,104,
-jenkins:JenkinsBuild:1:Test-jenkins-dir » test-jenkins-sub-dir » 
test-sub-sub-dir » devlake 
#27,job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/devlake,,IN_PROGRESS,,0,,2022-04-15T10:06:17.000+00:00,,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/""}",_raw_jenkins_api_builds,123,
-jenkins:JenkinsBuild:1:Test-jenkins-dir » test-jenkins-sub-dir » 
test-sub-sub-dir » devlake 
#31,job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/devlake,SUCCESS,DONE,,1,,2022-04-15T12:00:49.000+00:00,2022-04-15T12:00:50.000+00:00,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/""}",_raw_jenkins_api_builds,93,
-jenkins:JenkinsBuild:1:Test-jenkins-dir » test-jenkins-sub-dir » 
test-sub-sub-dir » devlake 
#34,job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/devlake,SUCCESS,DONE,,0,,2022-09-08T15:40:48.000+00:00,2022-09-08T15:40:48.000+00:00,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/""}",_raw_jenkins_api_builds,98,
-jenkins:JenkinsBuild:1:Test-jenkins-dir » test-jenkins-sub-dir » 
test-sub-sub-dir » devlake 
#35,job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/devlake,SUCCESS,DONE,,0,,2022-09-08T14:26:57.000+00:00,2022-09-08T14:26:57.000+00:00,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/""}",_raw_jenkins_api_builds,103,
-jenkins:JenkinsBuild:1:Test-jenkins-dir » test-jenkins-sub-dir » 
test-sub-sub-dir » devlake 
#37,job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/devlake,SUCCESS,DONE,,0,,2022-04-15T10:06:26.000+00:00,2022-04-15T10:06:26.000+00:00,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/""}",_raw_jenkins_api_builds,122,
-jenkins:JenkinsBuild:1:Test-jenkins-dir » test-jenkins-sub-dir » 
test-sub-sub-dir » devlake 
#41,job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/devlake,SUCCESS,DONE,,13,,2022-09-08T14:26:43.000+00:00,2022-09-08T14:26:56.000+00:00,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/""}",_raw_jenkins_api_builds,92,
-jenkins:JenkinsBuild:1:Test-jenkins-dir » test-jenkins-sub-dir » 
test-sub-sub-dir » devlake 
#47,job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/devlake,SUCCESS,DONE,,0,,2022-04-15T11:35:56.000+00:00,2022-04-15T11:35:56.000+00:00,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/""}",_raw_jenkins_api_builds,121,
-jenkins:JenkinsBuild:1:Test-jenkins-dir » test-jenkins-sub-dir » 
test-sub-sub-dir » devlake 
#51,job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/devlake,SUCCESS,DONE,,1,,2022-09-08T14:27:11.000+00:00,2022-09-08T14:27:12.000+00:00,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/""}",_raw_jenkins_api_builds,91,
-jenkins:JenkinsBuild:1:Test-jenkins-dir » test-jenkins-sub-dir » 
test-sub-sub-dir » devlake 
#57,job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/devlake,SUCCESS,DONE,,0,,2022-04-15T11:35:58.000+00:00,2022-04-15T11:35:58.000+00:00,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/""}",_raw_jenkins_api_builds,120,
-jenkins:JenkinsBuild:1:Test-jenkins-dir » test-jenkins-sub-dir » 
test-sub-sub-dir » devlake 
#61,job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/devlake,SUCCESS,DONE,,1,,2022-09-08T14:27:22.000+00:00,2022-09-08T14:27:23.000+00:00,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/""}",_raw_jenkins_api_builds,90,
-jenkins:JenkinsBuild:1:Test-jenkins-dir » test-jenkins-sub-dir » 
test-sub-sub-dir » devlake 
#67,job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/devlake,SUCCESS,DONE,,0,,2022-04-15T11:36:00.000+00:00,2022-04-15T11:36:00.000+00:00,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/""}",_raw_jenkins_api_builds,119,
-jenkins:JenkinsBuild:1:Test-jenkins-dir » test-jenkins-sub-dir » 
test-sub-sub-dir » devlake 
#71,job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/devlake,SUCCESS,DONE,,1,,2022-09-08T15:40:25.000+00:00,2022-09-08T15:40:26.000+00:00,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/""}",_raw_jenkins_api_builds,89,
-jenkins:JenkinsBuild:1:Test-jenkins-dir » test-jenkins-sub-dir » 
test-sub-sub-dir » devlake 
#77,job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/devlake,SUCCESS,DONE,,0,,2022-04-15T11:58:03.000+00:00,2022-04-15T11:58:03.000+00:00,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/""}",_raw_jenkins_api_builds,118,
-jenkins:JenkinsBuild:1:Test-jenkins-dir » test-jenkins-sub-dir » 
test-sub-sub-dir » devlake 
#81,job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/devlake,SUCCESS,DONE,,1,,2022-09-08T15:40:40.000+00:00,2022-09-08T15:40:41.000+00:00,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/""}",_raw_jenkins_api_builds,88,
-jenkins:JenkinsBuild:1:Test-jenkins-dir » test-jenkins-sub-dir » 
test-sub-sub-dir » devlake 
#87,job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/devlake,SUCCESS,DONE,,0,,2022-04-15T11:58:14.000+00:00,2022-04-15T11:58:14.000+00:00,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/""}",_raw_jenkins_api_builds,117,
-jenkins:JenkinsBuild:1:Test-jenkins-dir » test-jenkins-sub-dir » 
test-sub-sub-dir » devlake 
#97,job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/devlake,SUCCESS,DONE,,0,,2022-09-08T14:26:47.000+00:00,2022-09-08T14:26:47.000+00:00,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/""}",_raw_jenkins_api_builds,116,
+id,name,result,status,type,duration_sec,environment,created_date,finished_date,cicd_scope_id,_raw_data_params,_raw_data_table,_raw_data_id,_raw_data_remark
+jenkins:JenkinsBuild:1:pipeline-test2 
#1,job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/devlake,SUCCESS,DONE,,4,,2022-09-08T15:40:13.000+00:00,2022-09-08T15:40:17.000+00:00,jenkins:JenkinsJob:1:Test-jenkins-dir
 » test-jenkins-sub-dir » test-sub-sub-dir » 
devlake,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/""}",_raw_jenkins_api_builds,100,
+jenkins:JenkinsBuild:1:Test-jenkins-dir » test-jenkins-sub-dir » 
test-sub-sub-dir » devlake 
#11,job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/devlake,SUCCESS,DONE,,14,,2022-04-15T10:10:16.000+00:00,2022-04-15T10:10:30.000+00:00,jenkins:JenkinsJob:1:Test-jenkins-dir
 » test-jenkins-sub-dir » test-sub-sub-dir » 
devlake,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/""}",_raw_jenkins_api_builds,95,
+jenkins:JenkinsBuild:1:Test-jenkins-dir » test-jenkins-sub-dir » 
test-sub-sub-dir » devlake 
#13,job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/devlake,SUCCESS,DONE,,1,,2022-07-21T06:40:02.000+00:00,2022-07-21T06:40:03.000+00:00,jenkins:JenkinsJob:1:Test-jenkins-dir
 » test-jenkins-sub-dir » test-sub-sub-dir » 
devlake,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/""}",_raw_jenkins_api_builds,97,
+jenkins:JenkinsBuild:1:Test-jenkins-dir » test-jenkins-sub-dir » 
test-sub-sub-dir » devlake 
#15,job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/devlake,SUCCESS,DONE,,0,,2022-07-21T06:39:26.000+00:00,2022-07-21T06:39:26.000+00:00,jenkins:JenkinsJob:1:Test-jenkins-dir
 » test-jenkins-sub-dir » test-sub-sub-dir » 
devlake,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/""}",_raw_jenkins_api_builds,105,
+jenkins:JenkinsBuild:1:Test-jenkins-dir » test-jenkins-sub-dir » 
test-sub-sub-dir » devlake 
#17,job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/devlake,SUCCESS,DONE,,0,,2022-04-15T10:05:53.000+00:00,2022-04-15T10:05:53.000+00:00,jenkins:JenkinsJob:1:Test-jenkins-dir
 » test-jenkins-sub-dir » test-sub-sub-dir » 
devlake,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/""}",_raw_jenkins_api_builds,124,
+jenkins:JenkinsBuild:1:Test-jenkins-dir » test-jenkins-sub-dir » 
test-sub-sub-dir » devlake 
#170,job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/devlake,SUCCESS,DONE,,0,,2022-09-08T14:27:13.000+00:00,2022-09-08T14:27:13.000+00:00,jenkins:JenkinsJob:1:Test-jenkins-dir
 » test-jenkins-sub-dir » test-sub-sub-dir » 
devlake,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/""}",_raw_jenkins_api_builds,115,
+jenkins:JenkinsBuild:1:Test-jenkins-dir » test-jenkins-sub-dir » 
test-sub-sub-dir » devlake 
#171,job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/devlake,SUCCESS,DONE,,0,,2022-09-08T15:40:56.000+00:00,2022-09-08T15:40:56.000+00:00,jenkins:JenkinsJob:1:Test-jenkins-dir
 » test-jenkins-sub-dir » test-sub-sub-dir » 
devlake,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/""}",_raw_jenkins_api_builds,114,
+jenkins:JenkinsBuild:1:Test-jenkins-dir » test-jenkins-sub-dir » 
test-sub-sub-dir » devlake 
#172,job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/devlake,SUCCESS,DONE,,0,,2022-09-08T15:40:57.000+00:00,2022-09-08T15:40:57.000+00:00,jenkins:JenkinsJob:1:Test-jenkins-dir
 » test-jenkins-sub-dir » test-sub-sub-dir » 
devlake,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/""}",_raw_jenkins_api_builds,113,
+jenkins:JenkinsBuild:1:Test-jenkins-dir » test-jenkins-sub-dir » 
test-sub-sub-dir » devlake 
#21,job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/devlake,SUCCESS,DONE,,2,,2022-04-15T11:35:48.000+00:00,2022-04-15T11:35:50.000+00:00,jenkins:JenkinsJob:1:Test-jenkins-dir
 » test-jenkins-sub-dir » test-sub-sub-dir » 
devlake,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/""}",_raw_jenkins_api_builds,94,
+jenkins:JenkinsBuild:1:Test-jenkins-dir » test-jenkins-sub-dir » 
test-sub-sub-dir » devlake 
#215,job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/devlake,SUCCESS,DONE,,0,,2022-09-08T14:26:52.000+00:00,2022-09-08T14:26:52.000+00:00,jenkins:JenkinsJob:1:Test-jenkins-dir
 » test-jenkins-sub-dir » test-sub-sub-dir » 
devlake,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/""}",_raw_jenkins_api_builds,101,
+jenkins:JenkinsBuild:1:Test-jenkins-dir » test-jenkins-sub-dir » 
test-sub-sub-dir » devlake 
#23,job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/devlake,SUCCESS,DONE,,0,,2022-09-08T14:26:51.000+00:00,2022-09-08T14:26:51.000+00:00,jenkins:JenkinsJob:1:Test-jenkins-dir
 » test-jenkins-sub-dir » test-sub-sub-dir » 
devlake,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/""}",_raw_jenkins_api_builds,96,
+jenkins:JenkinsBuild:1:Test-jenkins-dir » test-jenkins-sub-dir » 
test-sub-sub-dir » devlake 
#24,job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/devlake,SUCCESS,DONE,,0,,2022-09-08T15:40:33.000+00:00,2022-09-08T15:40:33.000+00:00,jenkins:JenkinsJob:1:Test-jenkins-dir
 » test-jenkins-sub-dir » test-sub-sub-dir » 
devlake,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/""}",_raw_jenkins_api_builds,99,
+jenkins:JenkinsBuild:1:Test-jenkins-dir » test-jenkins-sub-dir » 
test-sub-sub-dir » devlake 
#25,job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/devlake,SUCCESS,DONE,,0,,2022-07-21T06:39:36.000+00:00,2022-07-21T06:39:36.000+00:00,jenkins:JenkinsJob:1:Test-jenkins-dir
 » test-jenkins-sub-dir » test-sub-sub-dir » 
devlake,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/""}",_raw_jenkins_api_builds,104,
+jenkins:JenkinsBuild:1:Test-jenkins-dir » test-jenkins-sub-dir » 
test-sub-sub-dir » devlake 
#27,job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/devlake,,IN_PROGRESS,,0,,2022-04-15T10:06:17.000+00:00,,jenkins:JenkinsJob:1:Test-jenkins-dir
 » test-jenkins-sub-dir » test-sub-sub-dir » 
devlake,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/""}",_raw_jenkins_api_builds,123,
+jenkins:JenkinsBuild:1:Test-jenkins-dir » test-jenkins-sub-dir » 
test-sub-sub-dir » devlake 
#31,job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/devlake,SUCCESS,DONE,,1,,2022-04-15T12:00:49.000+00:00,2022-04-15T12:00:50.000+00:00,jenkins:JenkinsJob:1:Test-jenkins-dir
 » test-jenkins-sub-dir » test-sub-sub-dir » 
devlake,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/""}",_raw_jenkins_api_builds,93,
+jenkins:JenkinsBuild:1:Test-jenkins-dir » test-jenkins-sub-dir » 
test-sub-sub-dir » devlake 
#34,job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/devlake,SUCCESS,DONE,,0,,2022-09-08T15:40:48.000+00:00,2022-09-08T15:40:48.000+00:00,jenkins:JenkinsJob:1:Test-jenkins-dir
 » test-jenkins-sub-dir » test-sub-sub-dir » 
devlake,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/""}",_raw_jenkins_api_builds,98,
+jenkins:JenkinsBuild:1:Test-jenkins-dir » test-jenkins-sub-dir » 
test-sub-sub-dir » devlake 
#35,job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/devlake,SUCCESS,DONE,,0,,2022-09-08T14:26:57.000+00:00,2022-09-08T14:26:57.000+00:00,jenkins:JenkinsJob:1:Test-jenkins-dir
 » test-jenkins-sub-dir » test-sub-sub-dir » 
devlake,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/""}",_raw_jenkins_api_builds,103,
+jenkins:JenkinsBuild:1:Test-jenkins-dir » test-jenkins-sub-dir » 
test-sub-sub-dir » devlake 
#37,job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/devlake,SUCCESS,DONE,,0,,2022-04-15T10:06:26.000+00:00,2022-04-15T10:06:26.000+00:00,jenkins:JenkinsJob:1:Test-jenkins-dir
 » test-jenkins-sub-dir » test-sub-sub-dir » 
devlake,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/""}",_raw_jenkins_api_builds,122,
+jenkins:JenkinsBuild:1:Test-jenkins-dir » test-jenkins-sub-dir » 
test-sub-sub-dir » devlake 
#41,job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/devlake,SUCCESS,DONE,,13,,2022-09-08T14:26:43.000+00:00,2022-09-08T14:26:56.000+00:00,jenkins:JenkinsJob:1:Test-jenkins-dir
 » test-jenkins-sub-dir » test-sub-sub-dir » 
devlake,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/""}",_raw_jenkins_api_builds,92,
+jenkins:JenkinsBuild:1:Test-jenkins-dir » test-jenkins-sub-dir » 
test-sub-sub-dir » devlake 
#47,job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/devlake,SUCCESS,DONE,,0,,2022-04-15T11:35:56.000+00:00,2022-04-15T11:35:56.000+00:00,jenkins:JenkinsJob:1:Test-jenkins-dir
 » test-jenkins-sub-dir » test-sub-sub-dir » 
devlake,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/""}",_raw_jenkins_api_builds,121,
+jenkins:JenkinsBuild:1:Test-jenkins-dir » test-jenkins-sub-dir » 
test-sub-sub-dir » devlake 
#51,job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/devlake,SUCCESS,DONE,,1,,2022-09-08T14:27:11.000+00:00,2022-09-08T14:27:12.000+00:00,jenkins:JenkinsJob:1:Test-jenkins-dir
 » test-jenkins-sub-dir » test-sub-sub-dir » 
devlake,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/""}",_raw_jenkins_api_builds,91,
+jenkins:JenkinsBuild:1:Test-jenkins-dir » test-jenkins-sub-dir » 
test-sub-sub-dir » devlake 
#57,job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/devlake,SUCCESS,DONE,,0,,2022-04-15T11:35:58.000+00:00,2022-04-15T11:35:58.000+00:00,jenkins:JenkinsJob:1:Test-jenkins-dir
 » test-jenkins-sub-dir » test-sub-sub-dir » 
devlake,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/""}",_raw_jenkins_api_builds,120,
+jenkins:JenkinsBuild:1:Test-jenkins-dir » test-jenkins-sub-dir » 
test-sub-sub-dir » devlake 
#61,job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/devlake,SUCCESS,DONE,,1,,2022-09-08T14:27:22.000+00:00,2022-09-08T14:27:23.000+00:00,jenkins:JenkinsJob:1:Test-jenkins-dir
 » test-jenkins-sub-dir » test-sub-sub-dir » 
devlake,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/""}",_raw_jenkins_api_builds,90,
+jenkins:JenkinsBuild:1:Test-jenkins-dir » test-jenkins-sub-dir » 
test-sub-sub-dir » devlake 
#67,job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/devlake,SUCCESS,DONE,,0,,2022-04-15T11:36:00.000+00:00,2022-04-15T11:36:00.000+00:00,jenkins:JenkinsJob:1:Test-jenkins-dir
 » test-jenkins-sub-dir » test-sub-sub-dir » 
devlake,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/""}",_raw_jenkins_api_builds,119,
+jenkins:JenkinsBuild:1:Test-jenkins-dir » test-jenkins-sub-dir » 
test-sub-sub-dir » devlake 
#71,job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/devlake,SUCCESS,DONE,,1,,2022-09-08T15:40:25.000+00:00,2022-09-08T15:40:26.000+00:00,jenkins:JenkinsJob:1:Test-jenkins-dir
 » test-jenkins-sub-dir » test-sub-sub-dir » 
devlake,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/""}",_raw_jenkins_api_builds,89,
+jenkins:JenkinsBuild:1:Test-jenkins-dir » test-jenkins-sub-dir » 
test-sub-sub-dir » devlake 
#77,job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/devlake,SUCCESS,DONE,,0,,2022-04-15T11:58:03.000+00:00,2022-04-15T11:58:03.000+00:00,jenkins:JenkinsJob:1:Test-jenkins-dir
 » test-jenkins-sub-dir » test-sub-sub-dir » 
devlake,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/""}",_raw_jenkins_api_builds,118,
+jenkins:JenkinsBuild:1:Test-jenkins-dir » test-jenkins-sub-dir » 
test-sub-sub-dir » devlake 
#81,job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/devlake,SUCCESS,DONE,,1,,2022-09-08T15:40:40.000+00:00,2022-09-08T15:40:41.000+00:00,jenkins:JenkinsJob:1:Test-jenkins-dir
 » test-jenkins-sub-dir » test-sub-sub-dir » 
devlake,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/""}",_raw_jenkins_api_builds,88,
+jenkins:JenkinsBuild:1:Test-jenkins-dir » test-jenkins-sub-dir » 
test-sub-sub-dir » devlake 
#87,job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/devlake,SUCCESS,DONE,,0,,2022-04-15T11:58:14.000+00:00,2022-04-15T11:58:14.000+00:00,jenkins:JenkinsJob:1:Test-jenkins-dir
 » test-jenkins-sub-dir » test-sub-sub-dir » 
devlake,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/""}",_raw_jenkins_api_builds,117,
+jenkins:JenkinsBuild:1:Test-jenkins-dir » test-jenkins-sub-dir » 
test-sub-sub-dir » devlake 
#97,job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/devlake,SUCCESS,DONE,,0,,2022-09-08T14:26:47.000+00:00,2022-09-08T14:26:47.000+00:00,jenkins:JenkinsJob:1:Test-jenkins-dir
 » test-jenkins-sub-dir » test-sub-sub-dir » 
devlake,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/""}",_raw_jenkins_api_builds,116,
diff --git a/plugins/jenkins/e2e/snapshot_tables/cicd_scopes.csv 
b/plugins/jenkins/e2e/snapshot_tables/cicd_scopes.csv
new file mode 100644
index 00000000..37ea5de0
--- /dev/null
+++ b/plugins/jenkins/e2e/snapshot_tables/cicd_scopes.csv
@@ -0,0 +1,2 @@
+id,name,description,url,created_date,updated_date
+jenkins:JenkinsJob:1:Test-jenkins-dir/test-jenkins-sub-dir/test-sub-sub-dir/test-job,Test-jenkins-dir/test-jenkins-sub-dir/test-sub-sub-dir/test-job,12121,https://jenkins-zjk.merico.cn/job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/job/test-job/,,
diff --git a/plugins/jenkins/e2e/snapshot_tables/cicd_tasks.csv 
b/plugins/jenkins/e2e/snapshot_tables/cicd_tasks.csv
index 10801db2..cb798e9a 100644
--- a/plugins/jenkins/e2e/snapshot_tables/cicd_tasks.csv
+++ b/plugins/jenkins/e2e/snapshot_tables/cicd_tasks.csv
@@ -1,30 +1,30 @@
-id,name,pipeline_id,result,status,type,environment,duration_sec,started_date,finished_date,_raw_data_params,_raw_data_table,_raw_data_id,_raw_data_remark
-jenkins:JenkinsBuild:1:pipeline-test2 
#1,devlake,jenkins:JenkinsBuild:1:pipeline-test2 
#1,SUCCESS,DONE,,,4,2022-09-08T15:40:13.000+00:00,2022-09-08T15:40:17.000+00:00,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/""}",_raw_jenkins_api_builds,100,
-jenkins:JenkinsBuild:1:Test-jenkins-dir » test-jenkins-sub-dir » 
test-sub-sub-dir » devlake #11,devlake,jenkins:JenkinsBuild:1:Test-jenkins-dir 
» test-jenkins-sub-dir » test-sub-sub-dir » devlake 
#11,SUCCESS,DONE,,,14,2022-04-15T10:10:16.000+00:00,2022-04-15T10:10:30.000+00:00,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/""}",_raw_jenkins_api_builds,95,
-jenkins:JenkinsBuild:1:Test-jenkins-dir » test-jenkins-sub-dir » 
test-sub-sub-dir » devlake #13,devlake,jenkins:JenkinsBuild:1:Test-jenkins-dir 
» test-jenkins-sub-dir » test-sub-sub-dir » devlake 
#13,SUCCESS,DONE,,,1,2022-07-21T06:40:02.000+00:00,2022-07-21T06:40:03.000+00:00,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/""}",_raw_jenkins_api_builds,97,
-jenkins:JenkinsBuild:1:Test-jenkins-dir » test-jenkins-sub-dir » 
test-sub-sub-dir » devlake #15,devlake,jenkins:JenkinsBuild:1:Test-jenkins-dir 
» test-jenkins-sub-dir » test-sub-sub-dir » devlake 
#15,SUCCESS,DONE,,,0,2022-07-21T06:39:26.000+00:00,2022-07-21T06:39:26.000+00:00,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/""}",_raw_jenkins_api_builds,105,
-jenkins:JenkinsBuild:1:Test-jenkins-dir » test-jenkins-sub-dir » 
test-sub-sub-dir » devlake #17,devlake,jenkins:JenkinsBuild:1:Test-jenkins-dir 
» test-jenkins-sub-dir » test-sub-sub-dir » devlake 
#17,SUCCESS,DONE,,,0,2022-04-15T10:05:53.000+00:00,2022-04-15T10:05:53.000+00:00,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/""}",_raw_jenkins_api_builds,124,
-jenkins:JenkinsBuild:1:Test-jenkins-dir » test-jenkins-sub-dir » 
test-sub-sub-dir » devlake #170,devlake,jenkins:JenkinsBuild:1:Test-jenkins-dir 
» test-jenkins-sub-dir » test-sub-sub-dir » devlake 
#170,SUCCESS,DONE,,,0,2022-09-08T14:27:13.000+00:00,2022-09-08T14:27:13.000+00:00,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/""}",_raw_jenkins_api_builds,115,
-jenkins:JenkinsBuild:1:Test-jenkins-dir » test-jenkins-sub-dir » 
test-sub-sub-dir » devlake #171,devlake,jenkins:JenkinsBuild:1:Test-jenkins-dir 
» test-jenkins-sub-dir » test-sub-sub-dir » devlake 
#171,SUCCESS,DONE,,,0,2022-09-08T15:40:56.000+00:00,2022-09-08T15:40:56.000+00:00,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/""}",_raw_jenkins_api_builds,114,
-jenkins:JenkinsBuild:1:Test-jenkins-dir » test-jenkins-sub-dir » 
test-sub-sub-dir » devlake #172,devlake,jenkins:JenkinsBuild:1:Test-jenkins-dir 
» test-jenkins-sub-dir » test-sub-sub-dir » devlake 
#172,SUCCESS,DONE,,,0,2022-09-08T15:40:57.000+00:00,2022-09-08T15:40:57.000+00:00,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/""}",_raw_jenkins_api_builds,113,
-jenkins:JenkinsBuild:1:Test-jenkins-dir » test-jenkins-sub-dir » 
test-sub-sub-dir » devlake #21,devlake,jenkins:JenkinsBuild:1:Test-jenkins-dir 
» test-jenkins-sub-dir » test-sub-sub-dir » devlake 
#21,SUCCESS,DONE,,,2,2022-04-15T11:35:48.000+00:00,2022-04-15T11:35:50.000+00:00,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/""}",_raw_jenkins_api_builds,94,
-jenkins:JenkinsBuild:1:Test-jenkins-dir » test-jenkins-sub-dir » 
test-sub-sub-dir » devlake #215,devlake,jenkins:JenkinsBuild:1:Test-jenkins-dir 
» test-jenkins-sub-dir » test-sub-sub-dir » devlake 
#215,SUCCESS,DONE,,,0,2022-09-08T14:26:52.000+00:00,2022-09-08T14:26:52.000+00:00,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/""}",_raw_jenkins_api_builds,101,
-jenkins:JenkinsBuild:1:Test-jenkins-dir » test-jenkins-sub-dir » 
test-sub-sub-dir » devlake #23,devlake,jenkins:JenkinsBuild:1:Test-jenkins-dir 
» test-jenkins-sub-dir » test-sub-sub-dir » devlake 
#23,SUCCESS,DONE,,,0,2022-09-08T14:26:51.000+00:00,2022-09-08T14:26:51.000+00:00,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/""}",_raw_jenkins_api_builds,96,
-jenkins:JenkinsBuild:1:Test-jenkins-dir » test-jenkins-sub-dir » 
test-sub-sub-dir » devlake #24,devlake,jenkins:JenkinsBuild:1:Test-jenkins-dir 
» test-jenkins-sub-dir » test-sub-sub-dir » devlake 
#24,SUCCESS,DONE,,,0,2022-09-08T15:40:33.000+00:00,2022-09-08T15:40:33.000+00:00,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/""}",_raw_jenkins_api_builds,99,
-jenkins:JenkinsBuild:1:Test-jenkins-dir » test-jenkins-sub-dir » 
test-sub-sub-dir » devlake #25,devlake,jenkins:JenkinsBuild:1:Test-jenkins-dir 
» test-jenkins-sub-dir » test-sub-sub-dir » devlake 
#25,SUCCESS,DONE,,,0,2022-07-21T06:39:36.000+00:00,2022-07-21T06:39:36.000+00:00,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/""}",_raw_jenkins_api_builds,104,
-jenkins:JenkinsBuild:1:Test-jenkins-dir » test-jenkins-sub-dir » 
test-sub-sub-dir » devlake #27,devlake,jenkins:JenkinsBuild:1:Test-jenkins-dir 
» test-jenkins-sub-dir » test-sub-sub-dir » devlake 
#27,,IN_PROGRESS,,,0,2022-04-15T10:06:17.000+00:00,,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/""}",_raw_jenkins_api_builds,123,
-jenkins:JenkinsBuild:1:Test-jenkins-dir » test-jenkins-sub-dir » 
test-sub-sub-dir » devlake #31,devlake,jenkins:JenkinsBuild:1:Test-jenkins-dir 
» test-jenkins-sub-dir » test-sub-sub-dir » devlake 
#31,SUCCESS,DONE,,,1,2022-04-15T12:00:49.000+00:00,2022-04-15T12:00:50.000+00:00,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/""}",_raw_jenkins_api_builds,93,
-jenkins:JenkinsBuild:1:Test-jenkins-dir » test-jenkins-sub-dir » 
test-sub-sub-dir » devlake #34,devlake,jenkins:JenkinsBuild:1:Test-jenkins-dir 
» test-jenkins-sub-dir » test-sub-sub-dir » devlake 
#34,SUCCESS,DONE,,,0,2022-09-08T15:40:48.000+00:00,2022-09-08T15:40:48.000+00:00,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/""}",_raw_jenkins_api_builds,98,
-jenkins:JenkinsBuild:1:Test-jenkins-dir » test-jenkins-sub-dir » 
test-sub-sub-dir » devlake #35,devlake,jenkins:JenkinsBuild:1:Test-jenkins-dir 
» test-jenkins-sub-dir » test-sub-sub-dir » devlake 
#35,SUCCESS,DONE,,,0,2022-09-08T14:26:57.000+00:00,2022-09-08T14:26:57.000+00:00,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/""}",_raw_jenkins_api_builds,103,
-jenkins:JenkinsBuild:1:Test-jenkins-dir » test-jenkins-sub-dir » 
test-sub-sub-dir » devlake #37,devlake,jenkins:JenkinsBuild:1:Test-jenkins-dir 
» test-jenkins-sub-dir » test-sub-sub-dir » devlake 
#37,SUCCESS,DONE,,,0,2022-04-15T10:06:26.000+00:00,2022-04-15T10:06:26.000+00:00,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/""}",_raw_jenkins_api_builds,122,
-jenkins:JenkinsBuild:1:Test-jenkins-dir » test-jenkins-sub-dir » 
test-sub-sub-dir » devlake #41,devlake,jenkins:JenkinsBuild:1:Test-jenkins-dir 
» test-jenkins-sub-dir » test-sub-sub-dir » devlake 
#41,SUCCESS,DONE,,,13,2022-09-08T14:26:43.000+00:00,2022-09-08T14:26:56.000+00:00,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/""}",_raw_jenkins_api_builds,92,
-jenkins:JenkinsBuild:1:Test-jenkins-dir » test-jenkins-sub-dir » 
test-sub-sub-dir » devlake #47,devlake,jenkins:JenkinsBuild:1:Test-jenkins-dir 
» test-jenkins-sub-dir » test-sub-sub-dir » devlake 
#47,SUCCESS,DONE,,,0,2022-04-15T11:35:56.000+00:00,2022-04-15T11:35:56.000+00:00,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/""}",_raw_jenkins_api_builds,121,
-jenkins:JenkinsBuild:1:Test-jenkins-dir » test-jenkins-sub-dir » 
test-sub-sub-dir » devlake #51,devlake,jenkins:JenkinsBuild:1:Test-jenkins-dir 
» test-jenkins-sub-dir » test-sub-sub-dir » devlake 
#51,SUCCESS,DONE,,,1,2022-09-08T14:27:11.000+00:00,2022-09-08T14:27:12.000+00:00,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/""}",_raw_jenkins_api_builds,91,
-jenkins:JenkinsBuild:1:Test-jenkins-dir » test-jenkins-sub-dir » 
test-sub-sub-dir » devlake #57,devlake,jenkins:JenkinsBuild:1:Test-jenkins-dir 
» test-jenkins-sub-dir » test-sub-sub-dir » devlake 
#57,SUCCESS,DONE,,,0,2022-04-15T11:35:58.000+00:00,2022-04-15T11:35:58.000+00:00,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/""}",_raw_jenkins_api_builds,120,
-jenkins:JenkinsBuild:1:Test-jenkins-dir » test-jenkins-sub-dir » 
test-sub-sub-dir » devlake #61,devlake,jenkins:JenkinsBuild:1:Test-jenkins-dir 
» test-jenkins-sub-dir » test-sub-sub-dir » devlake 
#61,SUCCESS,DONE,,,1,2022-09-08T14:27:22.000+00:00,2022-09-08T14:27:23.000+00:00,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/""}",_raw_jenkins_api_builds,90,
-jenkins:JenkinsBuild:1:Test-jenkins-dir » test-jenkins-sub-dir » 
test-sub-sub-dir » devlake #67,devlake,jenkins:JenkinsBuild:1:Test-jenkins-dir 
» test-jenkins-sub-dir » test-sub-sub-dir » devlake 
#67,SUCCESS,DONE,,,0,2022-04-15T11:36:00.000+00:00,2022-04-15T11:36:00.000+00:00,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/""}",_raw_jenkins_api_builds,119,
-jenkins:JenkinsBuild:1:Test-jenkins-dir » test-jenkins-sub-dir » 
test-sub-sub-dir » devlake #71,devlake,jenkins:JenkinsBuild:1:Test-jenkins-dir 
» test-jenkins-sub-dir » test-sub-sub-dir » devlake 
#71,SUCCESS,DONE,,,1,2022-09-08T15:40:25.000+00:00,2022-09-08T15:40:26.000+00:00,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/""}",_raw_jenkins_api_builds,89,
-jenkins:JenkinsBuild:1:Test-jenkins-dir » test-jenkins-sub-dir » 
test-sub-sub-dir » devlake #77,devlake,jenkins:JenkinsBuild:1:Test-jenkins-dir 
» test-jenkins-sub-dir » test-sub-sub-dir » devlake 
#77,SUCCESS,DONE,,,0,2022-04-15T11:58:03.000+00:00,2022-04-15T11:58:03.000+00:00,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/""}",_raw_jenkins_api_builds,118,
-jenkins:JenkinsBuild:1:Test-jenkins-dir » test-jenkins-sub-dir » 
test-sub-sub-dir » devlake #81,devlake,jenkins:JenkinsBuild:1:Test-jenkins-dir 
» test-jenkins-sub-dir » test-sub-sub-dir » devlake 
#81,SUCCESS,DONE,,,1,2022-09-08T15:40:40.000+00:00,2022-09-08T15:40:41.000+00:00,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/""}",_raw_jenkins_api_builds,88,
-jenkins:JenkinsBuild:1:Test-jenkins-dir » test-jenkins-sub-dir » 
test-sub-sub-dir » devlake #87,devlake,jenkins:JenkinsBuild:1:Test-jenkins-dir 
» test-jenkins-sub-dir » test-sub-sub-dir » devlake 
#87,SUCCESS,DONE,,,0,2022-04-15T11:58:14.000+00:00,2022-04-15T11:58:14.000+00:00,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/""}",_raw_jenkins_api_builds,117,
-jenkins:JenkinsBuild:1:Test-jenkins-dir » test-jenkins-sub-dir » 
test-sub-sub-dir » devlake #97,devlake,jenkins:JenkinsBuild:1:Test-jenkins-dir 
» test-jenkins-sub-dir » test-sub-sub-dir » devlake 
#97,SUCCESS,DONE,,,0,2022-09-08T14:26:47.000+00:00,2022-09-08T14:26:47.000+00:00,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/""}",_raw_jenkins_api_builds,116,
+id,name,pipeline_id,result,status,type,environment,duration_sec,started_date,finished_date,cicd_scope_id,_raw_data_params,_raw_data_table,_raw_data_id,_raw_data_remark
+jenkins:JenkinsBuild:1:pipeline-test2 
#1,devlake,jenkins:JenkinsBuild:1:pipeline-test2 
#1,SUCCESS,DONE,,,4,2022-09-08T15:40:13.000+00:00,2022-09-08T15:40:17.000+00:00,jenkins:JenkinsJob:1:Test-jenkins-dir
 » test-jenkins-sub-dir » test-sub-sub-dir » 
devlake,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/""}",_raw_jenkins_api_builds,100,
+jenkins:JenkinsBuild:1:Test-jenkins-dir » test-jenkins-sub-dir » 
test-sub-sub-dir » devlake #11,devlake,jenkins:JenkinsBuild:1:Test-jenkins-dir 
» test-jenkins-sub-dir » test-sub-sub-dir » devlake 
#11,SUCCESS,DONE,,,14,2022-04-15T10:10:16.000+00:00,2022-04-15T10:10:30.000+00:00,jenkins:JenkinsJob:1:Test-jenkins-dir
 » test-jenkins-sub-dir » test-sub-sub-dir » 
devlake,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-di
 [...]
+jenkins:JenkinsBuild:1:Test-jenkins-dir » test-jenkins-sub-dir » 
test-sub-sub-dir » devlake #13,devlake,jenkins:JenkinsBuild:1:Test-jenkins-dir 
» test-jenkins-sub-dir » test-sub-sub-dir » devlake 
#13,SUCCESS,DONE,,,1,2022-07-21T06:40:02.000+00:00,2022-07-21T06:40:03.000+00:00,jenkins:JenkinsJob:1:Test-jenkins-dir
 » test-jenkins-sub-dir » test-sub-sub-dir » 
devlake,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir
 [...]
+jenkins:JenkinsBuild:1:Test-jenkins-dir » test-jenkins-sub-dir » 
test-sub-sub-dir » devlake #15,devlake,jenkins:JenkinsBuild:1:Test-jenkins-dir 
» test-jenkins-sub-dir » test-sub-sub-dir » devlake 
#15,SUCCESS,DONE,,,0,2022-07-21T06:39:26.000+00:00,2022-07-21T06:39:26.000+00:00,jenkins:JenkinsJob:1:Test-jenkins-dir
 » test-jenkins-sub-dir » test-sub-sub-dir » 
devlake,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir
 [...]
+jenkins:JenkinsBuild:1:Test-jenkins-dir » test-jenkins-sub-dir » 
test-sub-sub-dir » devlake #17,devlake,jenkins:JenkinsBuild:1:Test-jenkins-dir 
» test-jenkins-sub-dir » test-sub-sub-dir » devlake 
#17,SUCCESS,DONE,,,0,2022-04-15T10:05:53.000+00:00,2022-04-15T10:05:53.000+00:00,jenkins:JenkinsJob:1:Test-jenkins-dir
 » test-jenkins-sub-dir » test-sub-sub-dir » 
devlake,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir
 [...]
+jenkins:JenkinsBuild:1:Test-jenkins-dir » test-jenkins-sub-dir » 
test-sub-sub-dir » devlake #170,devlake,jenkins:JenkinsBuild:1:Test-jenkins-dir 
» test-jenkins-sub-dir » test-sub-sub-dir » devlake 
#170,SUCCESS,DONE,,,0,2022-09-08T14:27:13.000+00:00,2022-09-08T14:27:13.000+00:00,jenkins:JenkinsJob:1:Test-jenkins-dir
 » test-jenkins-sub-dir » test-sub-sub-dir » 
devlake,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-d
 [...]
+jenkins:JenkinsBuild:1:Test-jenkins-dir » test-jenkins-sub-dir » 
test-sub-sub-dir » devlake #171,devlake,jenkins:JenkinsBuild:1:Test-jenkins-dir 
» test-jenkins-sub-dir » test-sub-sub-dir » devlake 
#171,SUCCESS,DONE,,,0,2022-09-08T15:40:56.000+00:00,2022-09-08T15:40:56.000+00:00,jenkins:JenkinsJob:1:Test-jenkins-dir
 » test-jenkins-sub-dir » test-sub-sub-dir » 
devlake,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-d
 [...]
+jenkins:JenkinsBuild:1:Test-jenkins-dir » test-jenkins-sub-dir » 
test-sub-sub-dir » devlake #172,devlake,jenkins:JenkinsBuild:1:Test-jenkins-dir 
» test-jenkins-sub-dir » test-sub-sub-dir » devlake 
#172,SUCCESS,DONE,,,0,2022-09-08T15:40:57.000+00:00,2022-09-08T15:40:57.000+00:00,jenkins:JenkinsJob:1:Test-jenkins-dir
 » test-jenkins-sub-dir » test-sub-sub-dir » 
devlake,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-d
 [...]
+jenkins:JenkinsBuild:1:Test-jenkins-dir » test-jenkins-sub-dir » 
test-sub-sub-dir » devlake #21,devlake,jenkins:JenkinsBuild:1:Test-jenkins-dir 
» test-jenkins-sub-dir » test-sub-sub-dir » devlake 
#21,SUCCESS,DONE,,,2,2022-04-15T11:35:48.000+00:00,2022-04-15T11:35:50.000+00:00,jenkins:JenkinsJob:1:Test-jenkins-dir
 » test-jenkins-sub-dir » test-sub-sub-dir » 
devlake,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir
 [...]
+jenkins:JenkinsBuild:1:Test-jenkins-dir » test-jenkins-sub-dir » 
test-sub-sub-dir » devlake #215,devlake,jenkins:JenkinsBuild:1:Test-jenkins-dir 
» test-jenkins-sub-dir » test-sub-sub-dir » devlake 
#215,SUCCESS,DONE,,,0,2022-09-08T14:26:52.000+00:00,2022-09-08T14:26:52.000+00:00,jenkins:JenkinsJob:1:Test-jenkins-dir
 » test-jenkins-sub-dir » test-sub-sub-dir » 
devlake,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-d
 [...]
+jenkins:JenkinsBuild:1:Test-jenkins-dir » test-jenkins-sub-dir » 
test-sub-sub-dir » devlake #23,devlake,jenkins:JenkinsBuild:1:Test-jenkins-dir 
» test-jenkins-sub-dir » test-sub-sub-dir » devlake 
#23,SUCCESS,DONE,,,0,2022-09-08T14:26:51.000+00:00,2022-09-08T14:26:51.000+00:00,jenkins:JenkinsJob:1:Test-jenkins-dir
 » test-jenkins-sub-dir » test-sub-sub-dir » 
devlake,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir
 [...]
+jenkins:JenkinsBuild:1:Test-jenkins-dir » test-jenkins-sub-dir » 
test-sub-sub-dir » devlake #24,devlake,jenkins:JenkinsBuild:1:Test-jenkins-dir 
» test-jenkins-sub-dir » test-sub-sub-dir » devlake 
#24,SUCCESS,DONE,,,0,2022-09-08T15:40:33.000+00:00,2022-09-08T15:40:33.000+00:00,jenkins:JenkinsJob:1:Test-jenkins-dir
 » test-jenkins-sub-dir » test-sub-sub-dir » 
devlake,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir
 [...]
+jenkins:JenkinsBuild:1:Test-jenkins-dir » test-jenkins-sub-dir » 
test-sub-sub-dir » devlake #25,devlake,jenkins:JenkinsBuild:1:Test-jenkins-dir 
» test-jenkins-sub-dir » test-sub-sub-dir » devlake 
#25,SUCCESS,DONE,,,0,2022-07-21T06:39:36.000+00:00,2022-07-21T06:39:36.000+00:00,jenkins:JenkinsJob:1:Test-jenkins-dir
 » test-jenkins-sub-dir » test-sub-sub-dir » 
devlake,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir
 [...]
+jenkins:JenkinsBuild:1:Test-jenkins-dir » test-jenkins-sub-dir » 
test-sub-sub-dir » devlake #27,devlake,jenkins:JenkinsBuild:1:Test-jenkins-dir 
» test-jenkins-sub-dir » test-sub-sub-dir » devlake 
#27,,IN_PROGRESS,,,0,2022-04-15T10:06:17.000+00:00,,jenkins:JenkinsJob:1:Test-jenkins-dir
 » test-jenkins-sub-dir » test-sub-sub-dir » 
devlake,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/""}",_raw_jenkins_api_builds,123,
+jenkins:JenkinsBuild:1:Test-jenkins-dir » test-jenkins-sub-dir » 
test-sub-sub-dir » devlake #31,devlake,jenkins:JenkinsBuild:1:Test-jenkins-dir 
» test-jenkins-sub-dir » test-sub-sub-dir » devlake 
#31,SUCCESS,DONE,,,1,2022-04-15T12:00:49.000+00:00,2022-04-15T12:00:50.000+00:00,jenkins:JenkinsJob:1:Test-jenkins-dir
 » test-jenkins-sub-dir » test-sub-sub-dir » 
devlake,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir
 [...]
+jenkins:JenkinsBuild:1:Test-jenkins-dir » test-jenkins-sub-dir » 
test-sub-sub-dir » devlake #34,devlake,jenkins:JenkinsBuild:1:Test-jenkins-dir 
» test-jenkins-sub-dir » test-sub-sub-dir » devlake 
#34,SUCCESS,DONE,,,0,2022-09-08T15:40:48.000+00:00,2022-09-08T15:40:48.000+00:00,jenkins:JenkinsJob:1:Test-jenkins-dir
 » test-jenkins-sub-dir » test-sub-sub-dir » 
devlake,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir
 [...]
+jenkins:JenkinsBuild:1:Test-jenkins-dir » test-jenkins-sub-dir » 
test-sub-sub-dir » devlake #35,devlake,jenkins:JenkinsBuild:1:Test-jenkins-dir 
» test-jenkins-sub-dir » test-sub-sub-dir » devlake 
#35,SUCCESS,DONE,,,0,2022-09-08T14:26:57.000+00:00,2022-09-08T14:26:57.000+00:00,jenkins:JenkinsJob:1:Test-jenkins-dir
 » test-jenkins-sub-dir » test-sub-sub-dir » 
devlake,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir
 [...]
+jenkins:JenkinsBuild:1:Test-jenkins-dir » test-jenkins-sub-dir » 
test-sub-sub-dir » devlake #37,devlake,jenkins:JenkinsBuild:1:Test-jenkins-dir 
» test-jenkins-sub-dir » test-sub-sub-dir » devlake 
#37,SUCCESS,DONE,,,0,2022-04-15T10:06:26.000+00:00,2022-04-15T10:06:26.000+00:00,jenkins:JenkinsJob:1:Test-jenkins-dir
 » test-jenkins-sub-dir » test-sub-sub-dir » 
devlake,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir
 [...]
+jenkins:JenkinsBuild:1:Test-jenkins-dir » test-jenkins-sub-dir » 
test-sub-sub-dir » devlake #41,devlake,jenkins:JenkinsBuild:1:Test-jenkins-dir 
» test-jenkins-sub-dir » test-sub-sub-dir » devlake 
#41,SUCCESS,DONE,,,13,2022-09-08T14:26:43.000+00:00,2022-09-08T14:26:56.000+00:00,jenkins:JenkinsJob:1:Test-jenkins-dir
 » test-jenkins-sub-dir » test-sub-sub-dir » 
devlake,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-di
 [...]
+jenkins:JenkinsBuild:1:Test-jenkins-dir » test-jenkins-sub-dir » 
test-sub-sub-dir » devlake #47,devlake,jenkins:JenkinsBuild:1:Test-jenkins-dir 
» test-jenkins-sub-dir » test-sub-sub-dir » devlake 
#47,SUCCESS,DONE,,,0,2022-04-15T11:35:56.000+00:00,2022-04-15T11:35:56.000+00:00,jenkins:JenkinsJob:1:Test-jenkins-dir
 » test-jenkins-sub-dir » test-sub-sub-dir » 
devlake,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir
 [...]
+jenkins:JenkinsBuild:1:Test-jenkins-dir » test-jenkins-sub-dir » 
test-sub-sub-dir » devlake #51,devlake,jenkins:JenkinsBuild:1:Test-jenkins-dir 
» test-jenkins-sub-dir » test-sub-sub-dir » devlake 
#51,SUCCESS,DONE,,,1,2022-09-08T14:27:11.000+00:00,2022-09-08T14:27:12.000+00:00,jenkins:JenkinsJob:1:Test-jenkins-dir
 » test-jenkins-sub-dir » test-sub-sub-dir » 
devlake,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir
 [...]
+jenkins:JenkinsBuild:1:Test-jenkins-dir » test-jenkins-sub-dir » 
test-sub-sub-dir » devlake #57,devlake,jenkins:JenkinsBuild:1:Test-jenkins-dir 
» test-jenkins-sub-dir » test-sub-sub-dir » devlake 
#57,SUCCESS,DONE,,,0,2022-04-15T11:35:58.000+00:00,2022-04-15T11:35:58.000+00:00,jenkins:JenkinsJob:1:Test-jenkins-dir
 » test-jenkins-sub-dir » test-sub-sub-dir » 
devlake,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir
 [...]
+jenkins:JenkinsBuild:1:Test-jenkins-dir » test-jenkins-sub-dir » 
test-sub-sub-dir » devlake #61,devlake,jenkins:JenkinsBuild:1:Test-jenkins-dir 
» test-jenkins-sub-dir » test-sub-sub-dir » devlake 
#61,SUCCESS,DONE,,,1,2022-09-08T14:27:22.000+00:00,2022-09-08T14:27:23.000+00:00,jenkins:JenkinsJob:1:Test-jenkins-dir
 » test-jenkins-sub-dir » test-sub-sub-dir » 
devlake,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir
 [...]
+jenkins:JenkinsBuild:1:Test-jenkins-dir » test-jenkins-sub-dir » 
test-sub-sub-dir » devlake #67,devlake,jenkins:JenkinsBuild:1:Test-jenkins-dir 
» test-jenkins-sub-dir » test-sub-sub-dir » devlake 
#67,SUCCESS,DONE,,,0,2022-04-15T11:36:00.000+00:00,2022-04-15T11:36:00.000+00:00,jenkins:JenkinsJob:1:Test-jenkins-dir
 » test-jenkins-sub-dir » test-sub-sub-dir » 
devlake,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir
 [...]
+jenkins:JenkinsBuild:1:Test-jenkins-dir » test-jenkins-sub-dir » 
test-sub-sub-dir » devlake #71,devlake,jenkins:JenkinsBuild:1:Test-jenkins-dir 
» test-jenkins-sub-dir » test-sub-sub-dir » devlake 
#71,SUCCESS,DONE,,,1,2022-09-08T15:40:25.000+00:00,2022-09-08T15:40:26.000+00:00,jenkins:JenkinsJob:1:Test-jenkins-dir
 » test-jenkins-sub-dir » test-sub-sub-dir » 
devlake,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir
 [...]
+jenkins:JenkinsBuild:1:Test-jenkins-dir » test-jenkins-sub-dir » 
test-sub-sub-dir » devlake #77,devlake,jenkins:JenkinsBuild:1:Test-jenkins-dir 
» test-jenkins-sub-dir » test-sub-sub-dir » devlake 
#77,SUCCESS,DONE,,,0,2022-04-15T11:58:03.000+00:00,2022-04-15T11:58:03.000+00:00,jenkins:JenkinsJob:1:Test-jenkins-dir
 » test-jenkins-sub-dir » test-sub-sub-dir » 
devlake,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir
 [...]
+jenkins:JenkinsBuild:1:Test-jenkins-dir » test-jenkins-sub-dir » 
test-sub-sub-dir » devlake #81,devlake,jenkins:JenkinsBuild:1:Test-jenkins-dir 
» test-jenkins-sub-dir » test-sub-sub-dir » devlake 
#81,SUCCESS,DONE,,,1,2022-09-08T15:40:40.000+00:00,2022-09-08T15:40:41.000+00:00,jenkins:JenkinsJob:1:Test-jenkins-dir
 » test-jenkins-sub-dir » test-sub-sub-dir » 
devlake,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir
 [...]
+jenkins:JenkinsBuild:1:Test-jenkins-dir » test-jenkins-sub-dir » 
test-sub-sub-dir » devlake #87,devlake,jenkins:JenkinsBuild:1:Test-jenkins-dir 
» test-jenkins-sub-dir » test-sub-sub-dir » devlake 
#87,SUCCESS,DONE,,,0,2022-04-15T11:58:14.000+00:00,2022-04-15T11:58:14.000+00:00,jenkins:JenkinsJob:1:Test-jenkins-dir
 » test-jenkins-sub-dir » test-sub-sub-dir » 
devlake,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir
 [...]
+jenkins:JenkinsBuild:1:Test-jenkins-dir » test-jenkins-sub-dir » 
test-sub-sub-dir » devlake #97,devlake,jenkins:JenkinsBuild:1:Test-jenkins-dir 
» test-jenkins-sub-dir » test-sub-sub-dir » devlake 
#97,SUCCESS,DONE,,,0,2022-09-08T14:26:47.000+00:00,2022-09-08T14:26:47.000+00:00,jenkins:JenkinsJob:1:Test-jenkins-dir
 » test-jenkins-sub-dir » test-sub-sub-dir » 
devlake,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir
 [...]
diff --git a/plugins/jenkins/e2e/snapshot_tables/cicd_tasks_after_stages.csv 
b/plugins/jenkins/e2e/snapshot_tables/cicd_tasks_after_stages.csv
index ba12d5ef..d20d39bb 100644
--- a/plugins/jenkins/e2e/snapshot_tables/cicd_tasks_after_stages.csv
+++ b/plugins/jenkins/e2e/snapshot_tables/cicd_tasks_after_stages.csv
@@ -1,17 +1,17 @@
-id,name,pipeline_id,result,status,type,duration_sec,started_date,finished_date,environment,_raw_data_params,_raw_data_table,_raw_data_id,_raw_data_remark
-jenkins:JenkinsStage:1:Auto Init Gitlab 
#1:12,gitlabInit,jenkins:JenkinsBuild:1:Auto Init Gitlab 
#1,,IN_PROGRESS,,0,1970-01-01T00:00:00.000+00:00,2020-03-04T13:47:24.000+00:00,,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/""}",_raw_jenkins_api_stages,13574,
-jenkins:JenkinsStage:1:Auto Init Gitlab 
#18:6,gitlabInit,jenkins:JenkinsBuild:1:Auto Init Gitlab 
#18,,IN_PROGRESS,,215,1970-01-01T00:03:35.000+00:00,2020-03-17T15:30:50.000+00:00,,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/""}",_raw_jenkins_api_stages,13575,
-jenkins:JenkinsStage:1:Auto Init Gitlab 
#19:2,gitlabInit,jenkins:JenkinsBuild:1:Auto Init Gitlab 
#19,,IN_PROGRESS,,5,1970-01-01T00:00:05.000+00:00,2020-03-18T02:19:22.000+00:00,,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/""}",_raw_jenkins_api_stages,13580,
-jenkins:JenkinsStage:1:Auto Init Gitlab 
#19:7,gitlabInit,jenkins:JenkinsBuild:1:Auto Init Gitlab 
#19,,IN_PROGRESS,,5,1970-01-01T00:00:05.000+00:00,2020-03-18T02:19:22.000+00:00,,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/""}",_raw_jenkins_api_stages,13576,
-jenkins:JenkinsStage:1:Auto Init Gitlab 
#23:4,gitlabInit,jenkins:JenkinsBuild:1:Auto Init Gitlab 
#23,,IN_PROGRESS,,248,1970-01-01T00:04:08.000+00:00,2020-11-19T06:31:57.000+00:00,,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/""}",_raw_jenkins_api_stages,13582,
-jenkins:JenkinsStage:1:Auto Init Gitlab 
#58:9,gitlabInit,jenkins:JenkinsBuild:1:Auto Init Gitlab 
#58,,IN_PROGRESS,,1312,1970-01-01T00:21:52.000+00:00,2021-03-09T13:57:02.000+00:00,,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/""}",_raw_jenkins_api_stages,13578,
-jenkins:JenkinsStage:1:Pipeline expirement 
#5:8,scp-f/b,jenkins:JenkinsBuild:1:Pipeline expirement 
#5,,IN_PROGRESS,,0,1970-01-01T00:00:00.000+00:00,2019-10-29T04:01:34.000+00:00,,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/""}",_raw_jenkins_api_stages,13577,
-jenkins:JenkinsStage:1:pipeline-test2 
#1:10,Hello,jenkins:JenkinsBuild:1:pipeline-test2 
#1,SUCCESS,DONE,,0,1970-01-01T00:00:00.000+00:00,2022-09-08T15:40:17.000+00:00,,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/""}",_raw_jenkins_api_stages,5,
-jenkins:JenkinsStage:1:pipeline-test2 
#1:9,Hello,jenkins:JenkinsBuild:1:pipeline-test2 
#1,SUCCESS,DONE,,0,1970-01-01T00:00:00.000+00:00,2022-09-08T15:40:17.000+00:00,,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/""}",_raw_jenkins_api_stages,4,
-jenkins:JenkinsStage:1:pipeline-test2 
#2:11,Hello,jenkins:JenkinsBuild:1:pipeline-test2 
#2,SUCCESS,DONE,,0,1970-01-01T00:00:00.000+00:00,2022-09-08T15:40:34.000+00:00,,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/""}",_raw_jenkins_api_stages,6,
-jenkins:JenkinsStage:1:pipeline-test2 
#2:6,Hello,jenkins:JenkinsBuild:1:pipeline-test2 
#2,SUCCESS,DONE,,0,1970-01-01T00:00:00.000+00:00,2022-09-08T15:40:34.000+00:00,,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/""}",_raw_jenkins_api_stages,1,
-jenkins:JenkinsStage:1:pipeline-test2 
#3:7,Hello,jenkins:JenkinsBuild:1:pipeline-test2 
#3,SUCCESS,DONE,,0,1970-01-01T00:00:00.000+00:00,2022-09-08T15:40:49.000+00:00,,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/""}",_raw_jenkins_api_stages,2,
-jenkins:JenkinsStage:1:pipeline-test2 
#3:8,Hello,jenkins:JenkinsBuild:1:pipeline-test2 
#3,SUCCESS,DONE,,0,1970-01-01T00:00:00.000+00:00,2022-09-08T15:40:49.000+00:00,,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/""}",_raw_jenkins_api_stages,3,
-jenkins:JenkinsStage:1:Test Gitlab Sync 
#10:5,gitlabAutoSync,jenkins:JenkinsBuild:1:Test Gitlab Sync 
#10,SUCCESS,DONE,,86,1970-01-01T00:01:26.000+00:00,2020-03-12T02:46:46.000+00:00,,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/""}",_raw_jenkins_api_stages,13583,
-jenkins:JenkinsStage:1:Test Gitlab Sync 
#12:3,gitlabAutoSync,jenkins:JenkinsBuild:1:Test Gitlab Sync 
#12,SUCCESS,DONE,,83,1970-01-01T00:01:23.000+00:00,2020-03-12T02:46:48.000+00:00,,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/""}",_raw_jenkins_api_stages,13581,
-jenkins:JenkinsStage:1:Test Gitlab Sync 
#3:1,gitlabAutoSync,jenkins:JenkinsBuild:1:Test Gitlab Sync 
#3,SUCCESS,DONE,,14,1970-01-01T00:00:14.000+00:00,2020-02-07T11:54:42.000+00:00,,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/""}",_raw_jenkins_api_stages,13579,
+id,name,pipeline_id,result,status,type,duration_sec,started_date,finished_date,environment,cicd_scope_id,_raw_data_params,_raw_data_table,_raw_data_id,_raw_data_remark
+jenkins:JenkinsStage:1:Auto Init Gitlab 
#1:12,gitlabInit,jenkins:JenkinsBuild:1:Auto Init Gitlab 
#1,,IN_PROGRESS,,0,1970-01-01T00:00:00.000+00:00,2020-03-04T13:47:24.000+00:00,,jenkins:JenkinsJob:1:Test-jenkins-dir
 » test-jenkins-sub-dir » test-sub-sub-dir » 
devlake,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/""}",_raw_jenkins_api_stages,13574,
+jenkins:JenkinsStage:1:Auto Init Gitlab 
#18:6,gitlabInit,jenkins:JenkinsBuild:1:Auto Init Gitlab 
#18,,IN_PROGRESS,,215,1970-01-01T00:03:35.000+00:00,2020-03-17T15:30:50.000+00:00,,jenkins:JenkinsJob:1:Test-jenkins-dir
 » test-jenkins-sub-dir » test-sub-sub-dir » 
devlake,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/""}",_raw_jenkins_api_stages,13575,
+jenkins:JenkinsStage:1:Auto Init Gitlab 
#19:2,gitlabInit,jenkins:JenkinsBuild:1:Auto Init Gitlab 
#19,,IN_PROGRESS,,5,1970-01-01T00:00:05.000+00:00,2020-03-18T02:19:22.000+00:00,,jenkins:JenkinsJob:1:Test-jenkins-dir
 » test-jenkins-sub-dir » test-sub-sub-dir » 
devlake,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/""}",_raw_jenkins_api_stages,13580,
+jenkins:JenkinsStage:1:Auto Init Gitlab 
#19:7,gitlabInit,jenkins:JenkinsBuild:1:Auto Init Gitlab 
#19,,IN_PROGRESS,,5,1970-01-01T00:00:05.000+00:00,2020-03-18T02:19:22.000+00:00,,jenkins:JenkinsJob:1:Test-jenkins-dir
 » test-jenkins-sub-dir » test-sub-sub-dir » 
devlake,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/""}",_raw_jenkins_api_stages,13576,
+jenkins:JenkinsStage:1:Auto Init Gitlab 
#23:4,gitlabInit,jenkins:JenkinsBuild:1:Auto Init Gitlab 
#23,,IN_PROGRESS,,248,1970-01-01T00:04:08.000+00:00,2020-11-19T06:31:57.000+00:00,,jenkins:JenkinsJob:1:Test-jenkins-dir
 » test-jenkins-sub-dir » test-sub-sub-dir » 
devlake,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/""}",_raw_jenkins_api_stages,13582,
+jenkins:JenkinsStage:1:Auto Init Gitlab 
#58:9,gitlabInit,jenkins:JenkinsBuild:1:Auto Init Gitlab 
#58,,IN_PROGRESS,,1312,1970-01-01T00:21:52.000+00:00,2021-03-09T13:57:02.000+00:00,,jenkins:JenkinsJob:1:Test-jenkins-dir
 » test-jenkins-sub-dir » test-sub-sub-dir » 
devlake,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/""}",_raw_jenkins_api_stages,13578,
+jenkins:JenkinsStage:1:Pipeline expirement 
#5:8,scp-f/b,jenkins:JenkinsBuild:1:Pipeline expirement 
#5,,IN_PROGRESS,,0,1970-01-01T00:00:00.000+00:00,2019-10-29T04:01:34.000+00:00,,jenkins:JenkinsJob:1:Test-jenkins-dir
 » test-jenkins-sub-dir » test-sub-sub-dir » 
devlake,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/""}",_raw_jenkins_api_stages,13577,
+jenkins:JenkinsStage:1:pipeline-test2 
#1:10,Hello,jenkins:JenkinsBuild:1:pipeline-test2 
#1,SUCCESS,DONE,,0,1970-01-01T00:00:00.000+00:00,2022-09-08T15:40:17.000+00:00,,jenkins:JenkinsJob:1:Test-jenkins-dir
 » test-jenkins-sub-dir » test-sub-sub-dir » 
devlake,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/""}",_raw_jenkins_api_stages,5,
+jenkins:JenkinsStage:1:pipeline-test2 
#1:9,Hello,jenkins:JenkinsBuild:1:pipeline-test2 
#1,SUCCESS,DONE,,0,1970-01-01T00:00:00.000+00:00,2022-09-08T15:40:17.000+00:00,,jenkins:JenkinsJob:1:Test-jenkins-dir
 » test-jenkins-sub-dir » test-sub-sub-dir » 
devlake,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/""}",_raw_jenkins_api_stages,4,
+jenkins:JenkinsStage:1:pipeline-test2 
#2:11,Hello,jenkins:JenkinsBuild:1:pipeline-test2 
#2,SUCCESS,DONE,,0,1970-01-01T00:00:00.000+00:00,2022-09-08T15:40:34.000+00:00,,jenkins:JenkinsJob:1:Test-jenkins-dir
 » test-jenkins-sub-dir » test-sub-sub-dir » 
devlake,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/""}",_raw_jenkins_api_stages,6,
+jenkins:JenkinsStage:1:pipeline-test2 
#2:6,Hello,jenkins:JenkinsBuild:1:pipeline-test2 
#2,SUCCESS,DONE,,0,1970-01-01T00:00:00.000+00:00,2022-09-08T15:40:34.000+00:00,,jenkins:JenkinsJob:1:Test-jenkins-dir
 » test-jenkins-sub-dir » test-sub-sub-dir » 
devlake,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/""}",_raw_jenkins_api_stages,1,
+jenkins:JenkinsStage:1:pipeline-test2 
#3:7,Hello,jenkins:JenkinsBuild:1:pipeline-test2 
#3,SUCCESS,DONE,,0,1970-01-01T00:00:00.000+00:00,2022-09-08T15:40:49.000+00:00,,jenkins:JenkinsJob:1:Test-jenkins-dir
 » test-jenkins-sub-dir » test-sub-sub-dir » 
devlake,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/""}",_raw_jenkins_api_stages,2,
+jenkins:JenkinsStage:1:pipeline-test2 
#3:8,Hello,jenkins:JenkinsBuild:1:pipeline-test2 
#3,SUCCESS,DONE,,0,1970-01-01T00:00:00.000+00:00,2022-09-08T15:40:49.000+00:00,,jenkins:JenkinsJob:1:Test-jenkins-dir
 » test-jenkins-sub-dir » test-sub-sub-dir » 
devlake,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/""}",_raw_jenkins_api_stages,3,
+jenkins:JenkinsStage:1:Test Gitlab Sync 
#10:5,gitlabAutoSync,jenkins:JenkinsBuild:1:Test Gitlab Sync 
#10,SUCCESS,DONE,,86,1970-01-01T00:01:26.000+00:00,2020-03-12T02:46:46.000+00:00,,jenkins:JenkinsJob:1:Test-jenkins-dir
 » test-jenkins-sub-dir » test-sub-sub-dir » 
devlake,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/""}",_raw_jenkins_api_stages,13583,
+jenkins:JenkinsStage:1:Test Gitlab Sync 
#12:3,gitlabAutoSync,jenkins:JenkinsBuild:1:Test Gitlab Sync 
#12,SUCCESS,DONE,,83,1970-01-01T00:01:23.000+00:00,2020-03-12T02:46:48.000+00:00,,jenkins:JenkinsJob:1:Test-jenkins-dir
 » test-jenkins-sub-dir » test-sub-sub-dir » 
devlake,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/""}",_raw_jenkins_api_stages,13581,
+jenkins:JenkinsStage:1:Test Gitlab Sync 
#3:1,gitlabAutoSync,jenkins:JenkinsBuild:1:Test Gitlab Sync 
#3,SUCCESS,DONE,,14,1970-01-01T00:00:14.000+00:00,2020-02-07T11:54:42.000+00:00,,jenkins:JenkinsJob:1:Test-jenkins-dir
 » test-jenkins-sub-dir » test-sub-sub-dir » 
devlake,"{""ConnectionId"":1,""JobName"":""devlake"",""JobPath"":""job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/""}",_raw_jenkins_api_stages,13579,
diff --git a/plugins/jenkins/e2e/stages_test.go 
b/plugins/jenkins/e2e/stages_test.go
index d71cafb0..3976695c 100644
--- a/plugins/jenkins/e2e/stages_test.go
+++ b/plugins/jenkins/e2e/stages_test.go
@@ -37,6 +37,7 @@ func TestJenkinsStagesDataFlow(t *testing.T) {
                        JobName:      `devlake`,
                        JobPath:      
`job/Test-jenkins-dir/job/test-jenkins-sub-dir/job/test-sub-sub-dir/`,
                },
+               Job: &models.JenkinsJob{FullName: "Test-jenkins-dir » 
test-jenkins-sub-dir » test-sub-sub-dir » devlake"},
        }
 
        // import raw data table
@@ -85,6 +86,7 @@ func TestJenkinsStagesDataFlow(t *testing.T) {
                        "started_date",
                        "finished_date",
                        "environment",
+                       "cicd_scope_id",
                ),
        )
 }
diff --git a/plugins/jenkins/impl/impl.go b/plugins/jenkins/impl/impl.go
index b0814c69..34b58911 100644
--- a/plugins/jenkins/impl/impl.go
+++ b/plugins/jenkins/impl/impl.go
@@ -68,6 +68,7 @@ func (plugin Jenkins) SubTaskMetas() []core.SubTaskMeta {
        return []core.SubTaskMeta{
                tasks.CollectApiJobsMeta,
                tasks.ExtractApiJobsMeta,
+               tasks.ConvertJobsMeta,
                tasks.CollectApiBuildsMeta,
                tasks.ExtractApiBuildsMeta,
                tasks.CollectApiStagesMeta,
diff --git a/plugins/jenkins/models/job.go b/plugins/jenkins/models/job.go
index 2f2a06e2..075bfa9f 100644
--- a/plugins/jenkins/models/job.go
+++ b/plugins/jenkins/models/job.go
@@ -26,7 +26,7 @@ type JenkinsJob struct {
        ConnectionId uint64 `gorm:"primaryKey"`
        FullName     string `gorm:"primaryKey;type:varchar(255)"`
        Name         string `gorm:"index;type:varchar(255)"`
-       Path         string `gorm:"primaryKey;type:varchar(511)"`
+       Path         string `gorm:"index;type:varchar(511)"`
        Class        string `gorm:"type:varchar(255)"`
        Color        string `gorm:"type:varchar(255)"`
        Base         string `gorm:"type:varchar(255)"`
diff --git 
a/plugins/jenkins/models/migrationscripts/20221110_change_index_of_job_path.go 
b/plugins/jenkins/models/migrationscripts/20221110_change_index_of_job_path.go
new file mode 100644
index 00000000..ccd0c2d9
--- /dev/null
+++ 
b/plugins/jenkins/models/migrationscripts/20221110_change_index_of_job_path.go
@@ -0,0 +1,95 @@
+/*
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements.  See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package migrationscripts
+
+import (
+       "github.com/apache/incubator-devlake/errors"
+       "github.com/apache/incubator-devlake/helpers/migrationhelper"
+       "github.com/apache/incubator-devlake/models/migrationscripts/archived"
+       "github.com/apache/incubator-devlake/plugins/core"
+)
+
+type changeIndexOfJobPath struct{}
+
+type jenkinsJob20221110Before struct {
+       ConnectionId uint64 `gorm:"primaryKey"`
+       FullName     string `gorm:"primaryKey;type:varchar(255)"`
+       Name         string `gorm:"index;type:varchar(255)"`
+       Path         string `gorm:"primaryKey;type:varchar(511)"`
+       Class        string `gorm:"type:varchar(255)"`
+       Color        string `gorm:"type:varchar(255)"`
+       Base         string `gorm:"type:varchar(255)"`
+       Url          string
+       Description  string
+       PrimaryView  string `gorm:"type:varchar(255)"`
+       archived.NoPKModel
+}
+
+func (jenkinsJob20221110Before) TableName() string {
+       return "_tool_jenkins_jobs"
+}
+
+type jenkinsJob20221110After struct {
+       ConnectionId uint64 `gorm:"primaryKey"`
+       FullName     string `gorm:"primaryKey;type:varchar(255)"`
+       Name         string `gorm:"index;type:varchar(255)"`
+       Path         string `gorm:"index;type:varchar(511)"`
+       Class        string `gorm:"type:varchar(255)"`
+       Color        string `gorm:"type:varchar(255)"`
+       Base         string `gorm:"type:varchar(255)"`
+       Url          string
+       Description  string
+       PrimaryView  string `gorm:"type:varchar(255)"`
+       archived.NoPKModel
+}
+
+func (jenkinsJob20221110After) TableName() string {
+       return "_tool_jenkins_jobs"
+}
+
+func (script *changeIndexOfJobPath) Up(basicRes core.BasicRes) errors.Error {
+       return migrationhelper.TransformTable(
+               basicRes,
+               script,
+               "_tool_jenkins_jobs",
+               func(s *jenkinsJob20221110Before) (*jenkinsJob20221110After, 
errors.Error) {
+                       dst := &jenkinsJob20221110After{
+                               ConnectionId: s.ConnectionId,
+                               FullName:     s.FullName,
+                               Name:         s.Name,
+                               Path:         s.Path,
+                               Class:        s.Class,
+                               Color:        s.Color,
+                               Base:         s.Base,
+                               Url:          s.Url,
+                               Description:  s.Description,
+                               PrimaryView:  s.PrimaryView,
+                               NoPKModel:    s.NoPKModel,
+                       }
+                       return dst, nil
+               },
+       )
+}
+
+func (*changeIndexOfJobPath) Version() uint64 {
+       return 20221110231237
+}
+
+func (*changeIndexOfJobPath) Name() string {
+       return "add url to jenkinsJob"
+}
diff --git a/plugins/jenkins/models/migrationscripts/register.go 
b/plugins/jenkins/models/migrationscripts/register.go
index 9642b2a6..8d607959 100644
--- a/plugins/jenkins/models/migrationscripts/register.go
+++ b/plugins/jenkins/models/migrationscripts/register.go
@@ -29,5 +29,6 @@ func All() []core.MigrationScript {
                new(modifyJenkinsBuild),
                new(addJobFields),
                new(addJobPathForBuilds),
+               new(changeIndexOfJobPath),
        }
 }
diff --git a/plugins/jenkins/tasks/build_cicd_convertor.go 
b/plugins/jenkins/tasks/build_cicd_convertor.go
index 46296bd2..9710d433 100644
--- a/plugins/jenkins/tasks/build_cicd_convertor.go
+++ b/plugins/jenkins/tasks/build_cicd_convertor.go
@@ -66,6 +66,7 @@ func ConvertBuildsToCICD(taskCtx core.SubTaskContext) (err 
errors.Error) {
        }
        defer cursor.Close()
        buildIdGen := didgen.NewDomainIdGenerator(&models.JenkinsBuild{})
+       jobIdGen := didgen.NewDomainIdGenerator(&models.JenkinsJob{})
 
        converter, err := helper.NewDataConverter(helper.DataConverterArgs{
                InputRowType: reflect.TypeOf(models.JenkinsBuild{}),
@@ -113,6 +114,7 @@ func ConvertBuildsToCICD(taskCtx core.SubTaskContext) (err 
errors.Error) {
                                FinishedDate: jenkinsPipelineFinishedDate,
                                DurationSec:  uint64(durationSec),
                                CreatedDate:  jenkinsBuild.StartTime,
+                               CicdScopeId:  
jobIdGen.Generate(jenkinsBuild.ConnectionId, data.Job.FullName),
                        }
                        jenkinsPipeline.RawDataOrigin = 
jenkinsBuild.RawDataOrigin
                        results = append(results, jenkinsPipeline)
@@ -129,6 +131,7 @@ func ConvertBuildsToCICD(taskCtx core.SubTaskContext) (err 
errors.Error) {
                                        DurationSec:  uint64(durationSec),
                                        StartedDate:  jenkinsBuild.StartTime,
                                        FinishedDate: 
jenkinsPipelineFinishedDate,
+                                       CicdScopeId:  
jobIdGen.Generate(jenkinsBuild.ConnectionId, data.Job.FullName),
                                }
                                if deployTagRegexp != nil {
                                        if deployFlag := 
deployTagRegexp.FindString(jenkinsBuild.JobName); deployFlag != "" {
diff --git a/plugins/jenkins/tasks/job_convertor.go 
b/plugins/jenkins/tasks/job_convertor.go
new file mode 100644
index 00000000..764b392b
--- /dev/null
+++ b/plugins/jenkins/tasks/job_convertor.go
@@ -0,0 +1,90 @@
+/*
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements.  See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package tasks
+
+import (
+       "github.com/apache/incubator-devlake/errors"
+       "reflect"
+
+       "github.com/apache/incubator-devlake/models/domainlayer"
+       "github.com/apache/incubator-devlake/models/domainlayer/devops"
+       "github.com/apache/incubator-devlake/models/domainlayer/didgen"
+       "github.com/apache/incubator-devlake/plugins/core"
+       "github.com/apache/incubator-devlake/plugins/core/dal"
+       "github.com/apache/incubator-devlake/plugins/helper"
+       "github.com/apache/incubator-devlake/plugins/jenkins/models"
+)
+
+var ConvertJobsMeta = core.SubTaskMeta{
+       Name:             "convertJobs",
+       EntryPoint:       ConvertJobs,
+       EnabledByDefault: true,
+       Description:      "Convert tool layer table jenkins_jobs into  domain 
layer table jobs",
+       DomainTypes:      []string{core.DOMAIN_TYPE_CICD},
+}
+
+func ConvertJobs(taskCtx core.SubTaskContext) errors.Error {
+       db := taskCtx.GetDal()
+       data := taskCtx.GetData().(*JenkinsTaskData)
+
+       clauses := []dal.Clause{
+               dal.Select("*"),
+               dal.From("_tool_jenkins_jobs"),
+               dal.Where("connection_id = ?", data.Options.ConnectionId),
+       }
+       cursor, err := db.Cursor(clauses...)
+       if err != nil {
+               return err
+       }
+       defer cursor.Close()
+
+       jobIdGen := didgen.NewDomainIdGenerator(&models.JenkinsJob{})
+
+       converter, err := helper.NewDataConverter(helper.DataConverterArgs{
+               InputRowType: reflect.TypeOf(models.JenkinsJob{}),
+               Input:        cursor,
+               RawDataSubTaskArgs: helper.RawDataSubTaskArgs{
+                       Params: JenkinsApiParams{
+                               ConnectionId: data.Options.ConnectionId,
+                               JobName:      data.Options.JobName,
+                               JobPath:      data.Options.JobPath,
+                       },
+                       Ctx:   taskCtx,
+                       Table: RAW_JOB_TABLE,
+               },
+               Convert: func(inputRow interface{}) ([]interface{}, 
errors.Error) {
+                       jenkinsJob := inputRow.(*models.JenkinsJob)
+                       job := &devops.CicdScope{
+                               DomainEntity: domainlayer.DomainEntity{
+                                       Id: 
jobIdGen.Generate(jenkinsJob.ConnectionId, jenkinsJob.FullName),
+                               },
+                               Name:        jenkinsJob.FullName,
+                               Description: jenkinsJob.Description,
+                               Url:         jenkinsJob.Url,
+                       }
+                       return []interface{}{
+                               job,
+                       }, nil
+               },
+       })
+       if err != nil {
+               return err
+       }
+
+       return converter.Execute()
+}
diff --git a/plugins/jenkins/tasks/job_extractor.go 
b/plugins/jenkins/tasks/job_extractor.go
index 4d0ec5e7..1ef90e6e 100644
--- a/plugins/jenkins/tasks/job_extractor.go
+++ b/plugins/jenkins/tasks/job_extractor.go
@@ -80,7 +80,7 @@ func ExtractApiJobs(taskCtx core.SubTaskContext) errors.Error 
{
                                }
                                results = append(results, &upDownJob)
                        }
-
+                       data.Job = job
                        results = append(results, job)
 
                        return results, nil
diff --git a/plugins/jenkins/tasks/stage_convertor.go 
b/plugins/jenkins/tasks/stage_convertor.go
index 66b3880b..027fb114 100644
--- a/plugins/jenkins/tasks/stage_convertor.go
+++ b/plugins/jenkins/tasks/stage_convertor.go
@@ -92,6 +92,8 @@ func ConvertStages(taskCtx core.SubTaskContext) (err 
errors.Error) {
        defer cursor.Close()
        stageIdGen := didgen.NewDomainIdGenerator(&models.JenkinsStage{})
        buildIdGen := didgen.NewDomainIdGenerator(&models.JenkinsBuild{})
+       jobIdGen := didgen.NewDomainIdGenerator(&models.JenkinsJob{})
+
        convertor, err := helper.NewDataConverter(helper.DataConverterArgs{
                InputRowType: reflect.TypeOf(JenkinsBuildWithRepoStage{}),
                Input:        cursor,
@@ -141,6 +143,7 @@ func ConvertStages(taskCtx core.SubTaskContext) (err 
errors.Error) {
                                DurationSec:  uint64(body.DurationMillis / 
1000),
                                StartedDate:  time.Unix(durationSec, 0),
                                FinishedDate: jenkinsTaskFinishedDate,
+                               CicdScopeId:  
jobIdGen.Generate(body.ConnectionId, data.Job.FullName),
                        }
                        if deployTagRegexp != nil {
                                if deployFlag := 
deployTagRegexp.FindString(body.Name); deployFlag != "" {
diff --git a/plugins/jenkins/tasks/task_data.go 
b/plugins/jenkins/tasks/task_data.go
index d4de88bc..c76325bf 100644
--- a/plugins/jenkins/tasks/task_data.go
+++ b/plugins/jenkins/tasks/task_data.go
@@ -45,6 +45,7 @@ type JenkinsTaskData struct {
        ApiClient  *helper.ApiAsyncClient
        Connection *models.JenkinsConnection
        Since      *time.Time
+       Job        *models.JenkinsJob
 }
 
 func DecodeAndValidateTaskOptions(options map[string]interface{}) 
(*JenkinsOptions, errors.Error) {


Reply via email to