You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@devlake.apache.org by wa...@apache.org on 2022/11/10 11:38:55 UTC
[incubator-devlake] branch main updated: feat(jenkins): add cicd scope id (#3707)
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 <yi...@merico.dev>
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) {