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

mappjzc 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 817246fec refactor: bamboo change lead time (#4991)
817246fec is described below

commit 817246fec6b6ab4dd97e75ccb849a754f743c51b
Author: Liang Zhang <[email protected]>
AuthorDate: Sun Apr 23 11:47:44 2023 +0800

    refactor: bamboo change lead time (#4991)
    
    * refactor: bamboo change lead time
    
    * fix: fix e2e
---
 backend/plugins/bamboo/bamboo.go                   |  6 ++
 backend/plugins/bamboo/e2e/deploy_build_test.go    | 15 +++--
 backend/plugins/bamboo/e2e/job_build_test.go       |  7 ++-
 backend/plugins/bamboo/e2e/plan_build_test.go      |  6 ++
 .../e2e/raw_tables/_raw_bamboo_api_job_build.csv   |  4 +-
 .../e2e/raw_tables/_raw_bamboo_api_plan_build.csv  |  4 +-
 .../snapshot_tables/_tool_bamboo_deploy_build.csv  | 20 +++----
 .../snapshot_tables/_tool_bamboo_job_builds.csv    | 20 +++----
 .../snapshot_tables/_tool_bamboo_plan_builds.csv   | 20 +++----
 .../bamboo/e2e/snapshot_tables/cicd_pipelines.csv  |  4 +-
 .../bamboo/e2e/snapshot_tables/cicd_tasks.csv      |  4 +-
 backend/plugins/bamboo/impl/impl.go                | 14 ++++-
 backend/plugins/bamboo/models/deploy_build.go      |  6 +-
 backend/plugins/bamboo/models/job_build.go         |  2 +
 .../20230419_add_type_and_environment.go           | 64 ++++++++++++++++++++++
 .../bamboo/models/migrationscripts/register.go     |  1 +
 backend/plugins/bamboo/models/plan_build.go        |  2 +
 .../plugins/bamboo/tasks/deploy_build_convertor.go |  5 +-
 .../plugins/bamboo/tasks/deploy_build_extractor.go |  2 +
 .../plugins/bamboo/tasks/job_build_convertor.go    | 14 +----
 .../plugins/bamboo/tasks/job_build_extractor.go    |  3 +
 .../plugins/bamboo/tasks/plan_build_convertor.go   |  7 +--
 .../plugins/bamboo/tasks/plan_build_extractor.go   |  3 +
 backend/plugins/bamboo/tasks/task_data.go          |  5 +-
 24 files changed, 170 insertions(+), 68 deletions(-)

diff --git a/backend/plugins/bamboo/bamboo.go b/backend/plugins/bamboo/bamboo.go
index 5d8f30e22..72233823e 100644
--- a/backend/plugins/bamboo/bamboo.go
+++ b/backend/plugins/bamboo/bamboo.go
@@ -31,11 +31,17 @@ func main() {
        bambooCmd := &cobra.Command{Use: "bamboo"}
        connectionId := bambooCmd.Flags().Uint64P("Connection-id", "c", 0, 
"bamboo connection id")
        projectKey := bambooCmd.Flags().StringP("project-key", "p", "", "bamboo 
project key")
+       deploymentPattern := bambooCmd.Flags().StringP("deployment", "", "", 
"deployment pattern")
+       productionPattern := bambooCmd.Flags().StringP("production", "", "", 
"production pattern")
        _ = bambooCmd.MarkFlagRequired("project-key")
        bambooCmd.Run = func(cmd *cobra.Command, args []string) {
                runner.DirectRun(cmd, args, PluginEntry, map[string]interface{}{
                        "connectionId": *connectionId,
                        "projectKey":   *projectKey,
+                       "transformationRules": map[string]string{
+                               "deploymentPattern": *deploymentPattern,
+                               "productionPattern": *productionPattern,
+                       },
                })
        }
        runner.RunCmd(bambooCmd)
diff --git a/backend/plugins/bamboo/e2e/deploy_build_test.go 
b/backend/plugins/bamboo/e2e/deploy_build_test.go
index ad154ea8a..e5ea6657a 100644
--- a/backend/plugins/bamboo/e2e/deploy_build_test.go
+++ b/backend/plugins/bamboo/e2e/deploy_build_test.go
@@ -23,6 +23,7 @@ import (
        "github.com/apache/incubator-devlake/core/models/common"
        "github.com/apache/incubator-devlake/core/models/domainlayer/devops"
        "github.com/apache/incubator-devlake/helpers/e2ehelper"
+       helper "github.com/apache/incubator-devlake/helpers/pluginhelper/api"
        "github.com/apache/incubator-devlake/plugins/bamboo/impl"
        "github.com/apache/incubator-devlake/plugins/bamboo/models"
        "github.com/apache/incubator-devlake/plugins/bamboo/tasks"
@@ -33,12 +34,17 @@ func TestBambooDeployBuildDataFlow(t *testing.T) {
        dataflowTester := e2ehelper.NewDataFlowTester(t, "bamboo", bamboo)
        taskData := &tasks.BambooTaskData{
                Options: &models.BambooOptions{
-                       ConnectionId:             1,
-                       ProjectKey:               "TEST1",
-                       BambooTransformationRule: 
new(models.BambooTransformationRule),
+                       ConnectionId: 1,
+                       ProjectKey:   "TEST1",
+                       BambooTransformationRule: 
&models.BambooTransformationRule{
+                               DeploymentPattern: "(?i)release",
+                               ProductionPattern: "(?i)release",
+                       },
                },
+               RegexEnricher: helper.NewRegexEnricher(),
        }
-
+       taskData.RegexEnricher.TryAdd(devops.DEPLOYMENT, 
taskData.Options.DeploymentPattern)
+       taskData.RegexEnricher.TryAdd(devops.PRODUCTION, 
taskData.Options.ProductionPattern)
        // import raw data table
        
dataflowTester.ImportCsvIntoRawTable("./raw_tables/_raw_bamboo_api_deploy_build.csv",
 "_raw_bamboo_api_deploy_build")
 
@@ -68,6 +74,7 @@ func TestBambooDeployBuildDataFlow(t *testing.T) {
                        "can_execute",
                        "allowed_to_create_version",
                        "allowed_to_set_version_status",
+                       "environment",
                ),
        )
 
diff --git a/backend/plugins/bamboo/e2e/job_build_test.go 
b/backend/plugins/bamboo/e2e/job_build_test.go
index 7266a0cad..79b80fe4b 100644
--- a/backend/plugins/bamboo/e2e/job_build_test.go
+++ b/backend/plugins/bamboo/e2e/job_build_test.go
@@ -23,6 +23,7 @@ import (
        "github.com/apache/incubator-devlake/core/models/common"
        "github.com/apache/incubator-devlake/core/models/domainlayer/devops"
        "github.com/apache/incubator-devlake/helpers/e2ehelper"
+       helper "github.com/apache/incubator-devlake/helpers/pluginhelper/api"
        "github.com/apache/incubator-devlake/plugins/bamboo/impl"
        "github.com/apache/incubator-devlake/plugins/bamboo/models"
        "github.com/apache/incubator-devlake/plugins/bamboo/tasks"
@@ -32,7 +33,6 @@ func TestBambooJobBuildDataFlow(t *testing.T) {
 
        var bamboo impl.Bamboo
        dataflowTester := e2ehelper.NewDataFlowTester(t, "bamboo", bamboo)
-
        taskData := &tasks.BambooTaskData{
                Options: &models.BambooOptions{
                        ConnectionId: 3,
@@ -42,7 +42,10 @@ func TestBambooJobBuildDataFlow(t *testing.T) {
                                ProductionPattern: "(?i)compile",
                        },
                },
+               RegexEnricher: helper.NewRegexEnricher(),
        }
+       taskData.RegexEnricher.TryAdd(devops.DEPLOYMENT, 
taskData.Options.DeploymentPattern)
+       taskData.RegexEnricher.TryAdd(devops.PRODUCTION, 
taskData.Options.ProductionPattern)
        // import raw data table
        // SELECT * FROM _raw_bamboo_api_job_build INTO OUTFILE 
"/tmp/_raw_bamboo_api_job_build.csv" FIELDS TERMINATED BY ',' OPTIONALLY 
ENCLOSED BY '"' LINES TERMINATED BY '\r\n';
        
dataflowTester.ImportCsvIntoRawTable("./raw_tables/_raw_bamboo_api_job_build.csv",
 "_raw_bamboo_api_job_build")
@@ -92,6 +95,8 @@ func TestBambooJobBuildDataFlow(t *testing.T) {
                        "state",
                        "build_state",
                        "job_result_key",
+                       "type",
+                       "environment",
                ),
        )
 
diff --git a/backend/plugins/bamboo/e2e/plan_build_test.go 
b/backend/plugins/bamboo/e2e/plan_build_test.go
index 67daa0492..5e1bd9d8d 100644
--- a/backend/plugins/bamboo/e2e/plan_build_test.go
+++ b/backend/plugins/bamboo/e2e/plan_build_test.go
@@ -23,6 +23,7 @@ import (
        "github.com/apache/incubator-devlake/core/models/common"
        "github.com/apache/incubator-devlake/core/models/domainlayer/devops"
        "github.com/apache/incubator-devlake/helpers/e2ehelper"
+       helper "github.com/apache/incubator-devlake/helpers/pluginhelper/api"
        "github.com/apache/incubator-devlake/plugins/bamboo/impl"
        "github.com/apache/incubator-devlake/plugins/bamboo/models"
        "github.com/apache/incubator-devlake/plugins/bamboo/tasks"
@@ -42,7 +43,10 @@ func TestBambooPlanBuildDataFlow(t *testing.T) {
                                ProductionPattern: "(?i)compile",
                        },
                },
+               RegexEnricher: helper.NewRegexEnricher(),
        }
+       taskData.RegexEnricher.TryAdd(devops.DEPLOYMENT, 
taskData.Options.DeploymentPattern)
+       taskData.RegexEnricher.TryAdd(devops.PRODUCTION, 
taskData.Options.ProductionPattern)
        // import raw data table
        // SELECT * FROM _raw_bamboo_api_job_build INTO OUTFILE 
"/tmp/_raw_bamboo_api_job_build.csv" FIELDS TERMINATED BY ',' OPTIONALLY 
ENCLOSED BY '"' LINES TERMINATED BY '\r\n';
        
dataflowTester.ImportCsvIntoRawTable("./raw_tables/_raw_bamboo_api_plan_build.csv",
 "_raw_bamboo_api_plan_build")
@@ -89,6 +93,8 @@ func TestBambooPlanBuildDataFlow(t *testing.T) {
                        "state",
                        "build_state",
                        "plan_result_key",
+                       "type",
+                       "environment",
                ),
        )
 
diff --git 
a/backend/plugins/bamboo/e2e/raw_tables/_raw_bamboo_api_job_build.csv 
b/backend/plugins/bamboo/e2e/raw_tables/_raw_bamboo_api_job_build.csv
index 45ead0026..c202e2d05 100644
--- a/backend/plugins/bamboo/e2e/raw_tables/_raw_bamboo_api_job_build.csv
+++ b/backend/plugins/bamboo/e2e/raw_tables/_raw_bamboo_api_job_build.csv
@@ -1,7 +1,7 @@
 "id","params","data","url","input","created_at"
-122,"{""connectionId"":3,""ProjectKey"":""TEST1""}","{""expand"":""plan,artifacts,comments,labels,jiraIssues,variables"",""link"":{""href"":""http://54.172.92.89:8085/rest/api/latest/result/TEST1-TEST2-JOB1-3"",""rel"":""self""},""plan"":{""shortName"":""Default
 
Job"",""shortKey"":""TEST2-JOB1"",""type"":""job"",""enabled"":true,""link"":{""href"":""http://54.172.92.89:8085/rest/api/latest/plan/TEST1-TEST2-JOB1"",""rel"":""self""},""key"":""TEST1-TEST2-JOB1"",""name"":""test_project
 - te [...]
+122,"{""connectionId"":3,""ProjectKey"":""TEST1""}","{""expand"":""plan,artifacts,comments,labels,jiraIssues,variables"",""link"":{""href"":""http://54.172.92.89:8085/rest/api/latest/result/TEST1-TEST2-JOB1-3"",""rel"":""self""},""plan"":{""shortName"":""Default
 
Job"",""shortKey"":""TEST2-JOB1"",""type"":""job"",""enabled"":true,""link"":{""href"":""http://54.172.92.89:8085/rest/api/latest/plan/TEST1-TEST2-JOB1"",""rel"":""self""},""key"":""TEST1-TEST2-JOB1"",""name"":""test_project
 - te [...]
 
123,"{""connectionId"":3,""ProjectKey"":""TEST1""}","{""expand"":""plan,artifacts,comments,labels,jiraIssues,variables"",""link"":{""href"":""http://54.172.92.89:8085/rest/api/latest/result/TEST1-TEST2-JOB1-2"",""rel"":""self""},""plan"":{""shortName"":""Default
 
Job"",""shortKey"":""TEST2-JOB1"",""type"":""job"",""enabled"":true,""link"":{""href"":""http://54.172.92.89:8085/rest/api/latest/plan/TEST1-TEST2-JOB1"",""rel"":""self""},""key"":""TEST1-TEST2-JOB1"",""name"":""test_project
 - te [...]
-137,"{""connectionId"":3,""ProjectKey"":""TEST1""}","{""expand"":""plan,artifacts,comments,labels,jiraIssues,variables"",""link"":{""href"":""http://54.172.92.89:8085/rest/api/latest/result/TEST1-TEST4-JOB1-3"",""rel"":""self""},""plan"":{""shortName"":""Default
 
Job"",""shortKey"":""TEST4-JOB1"",""type"":""job"",""enabled"":true,""link"":{""href"":""http://54.172.92.89:8085/rest/api/latest/plan/TEST1-TEST4-JOB1"",""rel"":""self""},""key"":""TEST1-TEST4-JOB1"",""name"":""test_project
 - te [...]
+137,"{""connectionId"":3,""ProjectKey"":""TEST1""}","{""expand"":""plan,artifacts,comments,labels,jiraIssues,variables"",""link"":{""href"":""http://54.172.92.89:8085/rest/api/latest/result/TEST1-TEST4-JOB1-3"",""rel"":""self""},""plan"":{""shortName"":""Default
 
Job"",""shortKey"":""TEST4-JOB1"",""type"":""job"",""enabled"":true,""link"":{""href"":""http://54.172.92.89:8085/rest/api/latest/plan/TEST1-TEST4-JOB1"",""rel"":""self""},""key"":""TEST1-TEST4-JOB1"",""name"":""test_project
 - te [...]
 
138,"{""connectionId"":3,""ProjectKey"":""TEST1""}","{""expand"":""plan,artifacts,comments,labels,jiraIssues,variables"",""link"":{""href"":""http://54.172.92.89:8085/rest/api/latest/result/TEST1-TEST4-JOB1-2"",""rel"":""self""},""plan"":{""shortName"":""Default
 
Job"",""shortKey"":""TEST4-JOB1"",""type"":""job"",""enabled"":true,""link"":{""href"":""http://54.172.92.89:8085/rest/api/latest/plan/TEST1-TEST4-JOB1"",""rel"":""self""},""key"":""TEST1-TEST4-JOB1"",""name"":""test_project
 - te [...]
 
139,"{""connectionId"":3,""ProjectKey"":""TEST1""}","{""expand"":""plan,artifacts,comments,labels,jiraIssues,variables"",""link"":{""href"":""http://54.172.92.89:8085/rest/api/latest/result/TEST1-TEST4-JOB1-1"",""rel"":""self""},""plan"":{""shortName"":""Default
 
Job"",""shortKey"":""TEST4-JOB1"",""type"":""job"",""enabled"":true,""link"":{""href"":""http://54.172.92.89:8085/rest/api/latest/plan/TEST1-TEST4-JOB1"",""rel"":""self""},""key"":""TEST1-TEST4-JOB1"",""name"":""test_project
 - te [...]
 
153,"{""connectionId"":3,""ProjectKey"":""TEST1""}","{""expand"":""plan,artifacts,comments,labels,jiraIssues,variables"",""link"":{""href"":""http://54.172.92.89:8085/rest/api/latest/result/TEST1-TEST3-JOB1-3"",""rel"":""self""},""plan"":{""shortName"":""Default
 
Job"",""shortKey"":""TEST3-JOB1"",""type"":""job"",""enabled"":true,""link"":{""href"":""http://54.172.92.89:8085/rest/api/latest/plan/TEST1-TEST3-JOB1"",""rel"":""self""},""key"":""TEST1-TEST3-JOB1"",""name"":""test_project
 - te [...]
diff --git 
a/backend/plugins/bamboo/e2e/raw_tables/_raw_bamboo_api_plan_build.csv 
b/backend/plugins/bamboo/e2e/raw_tables/_raw_bamboo_api_plan_build.csv
index 69cf75ccc..6976741ff 100644
--- a/backend/plugins/bamboo/e2e/raw_tables/_raw_bamboo_api_plan_build.csv
+++ b/backend/plugins/bamboo/e2e/raw_tables/_raw_bamboo_api_plan_build.csv
@@ -2,9 +2,9 @@
 
232,"{""connectionId"":3,""ProjectKey"":""TEST1""}","{""expand"":""plan,artifacts,comments,labels,jiraIssues,variables,stages"",""link"":{""href"":""http://54.172.92.89:8085/rest/api/latest/result/TEST1-TEST2-3"",""rel"":""self""},""plan"":{""shortName"":""test2"",""shortKey"":""TEST2"",""type"":""chain"",""enabled"":true,""link"":{""href"":""http://54.172.92.89:8085/rest/api/latest/plan/TEST1-TEST2"",""rel"":""self""},""key"":""TEST1-TEST2"",""name"":""test_project
 - test2"",""planKey"" [...]
 
233,"{""connectionId"":3,""ProjectKey"":""TEST1""}","{""expand"":""plan,artifacts,comments,labels,jiraIssues,variables,stages"",""link"":{""href"":""http://54.172.92.89:8085/rest/api/latest/result/TEST1-TEST2-2"",""rel"":""self""},""plan"":{""shortName"":""test2"",""shortKey"":""TEST2"",""type"":""chain"",""enabled"":true,""link"":{""href"":""http://54.172.92.89:8085/rest/api/latest/plan/TEST1-TEST2"",""rel"":""self""},""key"":""TEST1-TEST2"",""name"":""test_project
 - test2"",""planKey"" [...]
 
234,"{""connectionId"":3,""ProjectKey"":""TEST1""}","{""expand"":""plan,artifacts,comments,labels,jiraIssues,variables,stages"",""link"":{""href"":""http://54.172.92.89:8085/rest/api/latest/result/TEST1-TEST2-1"",""rel"":""self""},""plan"":{""shortName"":""test2"",""shortKey"":""TEST2"",""type"":""chain"",""enabled"":true,""link"":{""href"":""http://54.172.92.89:8085/rest/api/latest/plan/TEST1-TEST2"",""rel"":""self""},""key"":""TEST1-TEST2"",""name"":""test_project
 - test2"",""planKey"" [...]
-248,"{""connectionId"":3,""ProjectKey"":""TEST1""}","{""expand"":""plan,artifacts,comments,labels,jiraIssues,variables,stages"",""link"":{""href"":""http://54.172.92.89:8085/rest/api/latest/result/TEST1-TEST4-2"",""rel"":""self""},""plan"":{""shortName"":""test4"",""shortKey"":""TEST4"",""type"":""chain"",""enabled"":true,""link"":{""href"":""http://54.172.92.89:8085/rest/api/latest/plan/TEST1-TEST4"",""rel"":""self""},""key"":""TEST1-TEST4"",""name"":""test_project
 - test4"",""planKey"" [...]
+248,"{""connectionId"":3,""ProjectKey"":""TEST1""}","{""expand"":""plan,artifacts,comments,labels,jiraIssues,variables,stages"",""link"":{""href"":""http://54.172.92.89:8085/rest/api/latest/result/TEST1-TEST4-2"",""rel"":""self""},""plan"":{""shortName"":""test4"",""shortKey"":""TEST4"",""type"":""chain"",""enabled"":true,""link"":{""href"":""http://54.172.92.89:8085/rest/api/latest/plan/TEST1-TEST4"",""rel"":""self""},""key"":""TEST1-TEST4"",""name"":""test_project
 - test4"",""planKey"" [...]
 
249,"{""connectionId"":3,""ProjectKey"":""TEST1""}","{""expand"":""plan,artifacts,comments,labels,jiraIssues,variables,stages"",""link"":{""href"":""http://54.172.92.89:8085/rest/api/latest/result/TEST1-TEST4-1"",""rel"":""self""},""plan"":{""shortName"":""test4"",""shortKey"":""TEST4"",""type"":""chain"",""enabled"":true,""link"":{""href"":""http://54.172.92.89:8085/rest/api/latest/plan/TEST1-TEST4"",""rel"":""self""},""key"":""TEST1-TEST4"",""name"":""test_project
 - test4"",""planKey"" [...]
-264,"{""connectionId"":3,""ProjectKey"":""TEST1""}","{""expand"":""plan,artifacts,comments,labels,jiraIssues,variables,stages"",""link"":{""href"":""http://54.172.92.89:8085/rest/api/latest/result/TEST1-TEST3-2"",""rel"":""self""},""plan"":{""shortName"":""test3"",""shortKey"":""TEST3"",""type"":""chain"",""enabled"":true,""link"":{""href"":""http://54.172.92.89:8085/rest/api/latest/plan/TEST1-TEST3"",""rel"":""self""},""key"":""TEST1-TEST3"",""name"":""test_project
 - test3"",""planKey"" [...]
+264,"{""connectionId"":3,""ProjectKey"":""TEST1""}","{""expand"":""plan,artifacts,comments,labels,jiraIssues,variables,stages"",""link"":{""href"":""http://54.172.92.89:8085/rest/api/latest/result/TEST1-TEST3-2"",""rel"":""self""},""plan"":{""shortName"":""test3"",""shortKey"":""TEST3"",""type"":""chain"",""enabled"":true,""link"":{""href"":""http://54.172.92.89:8085/rest/api/latest/plan/TEST1-TEST3"",""rel"":""self""},""key"":""TEST1-TEST3"",""name"":""test_project
 - test3"",""planKey"" [...]
 
265,"{""connectionId"":3,""ProjectKey"":""TEST1""}","{""expand"":""plan,artifacts,comments,labels,jiraIssues,variables,stages"",""link"":{""href"":""http://54.172.92.89:8085/rest/api/latest/result/TEST1-TEST3-1"",""rel"":""self""},""plan"":{""shortName"":""test3"",""shortKey"":""TEST3"",""type"":""chain"",""enabled"":true,""link"":{""href"":""http://54.172.92.89:8085/rest/api/latest/plan/TEST1-TEST3"",""rel"":""self""},""key"":""TEST1-TEST3"",""name"":""test_project
 - test3"",""planKey"" [...]
 
308,"{""connectionId"":3,""ProjectKey"":""TEST1""}","{""expand"":""plan,artifacts,comments,labels,jiraIssues,variables,stages"",""link"":{""href"":""http://54.172.92.89:8085/rest/api/latest/result/TEST1-TEST1-23"",""rel"":""self""},""plan"":{""shortName"":""test_plan"",""shortKey"":""TEST1"",""type"":""chain"",""enabled"":true,""link"":{""href"":""http://54.172.92.89:8085/rest/api/latest/plan/TEST1-TEST1"",""rel"":""self""},""key"":""TEST1-TEST1"",""name"":""test_project
 - test_plan"","" [...]
 
309,"{""connectionId"":3,""ProjectKey"":""TEST1""}","{""expand"":""plan,artifacts,comments,labels,jiraIssues,variables,stages"",""link"":{""href"":""http://54.172.92.89:8085/rest/api/latest/result/TEST1-TEST1-22"",""rel"":""self""},""plan"":{""shortName"":""test_plan"",""shortKey"":""TEST1"",""type"":""chain"",""enabled"":true,""link"":{""href"":""http://54.172.92.89:8085/rest/api/latest/plan/TEST1-TEST1"",""rel"":""self""},""key"":""TEST1-TEST1"",""name"":""test_project
 - test_plan"","" [...]
diff --git 
a/backend/plugins/bamboo/e2e/snapshot_tables/_tool_bamboo_deploy_build.csv 
b/backend/plugins/bamboo/e2e/snapshot_tables/_tool_bamboo_deploy_build.csv
index d4ad2ca4b..838252d57 100644
--- a/backend/plugins/bamboo/e2e/snapshot_tables/_tool_bamboo_deploy_build.csv
+++ b/backend/plugins/bamboo/e2e/snapshot_tables/_tool_bamboo_deploy_build.csv
@@ -1,10 +1,10 @@
-connection_id,deploy_build_id,deployment_version_name,deployment_state,life_cycle_state,started_date,queued_date,executed_date,finished_date,reason_summary,plan_key,project_key,can_view,can_edit,can_delete,allowed_to_execute,can_execute,allowed_to_create_version,allowed_to_set_version_status,_raw_data_params,_raw_data_table,_raw_data_id,_raw_data_remark
-1,1769473,release-2,FAILED,FINISHED,2023-03-10T12:15:45.000+00:00,2023-03-10T12:15:45.000+00:00,2023-03-10T12:15:46.000+00:00,2023-03-10T12:15:46.000+00:00,"Manual
 run by <a 
href=""http://54.172.92.89:8085/browse/user/bamboo"";>devlake</a>",TEST1-TEST1,TEST1,1,1,1,1,1,0,0,"{""connectionId"":1,""ProjectKey"":""TEST1""}",_raw_bamboo_api_deploy_build,9,
-1,1769474,release-2,FAILED,FINISHED,2023-03-10T12:27:28.000+00:00,2023-03-10T12:27:28.000+00:00,2023-03-10T12:27:28.000+00:00,2023-03-10T12:27:28.000+00:00,"Manual
 run by <a 
href=""http://54.172.92.89:8085/browse/user/bamboo"";>devlake</a>",TEST1-TEST1,TEST1,1,1,1,1,1,0,0,"{""connectionId"":1,""ProjectKey"":""TEST1""}",_raw_bamboo_api_deploy_build,8,
-1,1769475,release-2,FAILED,FINISHED,2023-03-10T12:27:56.000+00:00,2023-03-10T12:27:56.000+00:00,2023-03-10T12:27:56.000+00:00,2023-03-10T12:27:56.000+00:00,"Manual
 run by <a 
href=""http://54.172.92.89:8085/browse/user/bamboo"";>devlake</a>",TEST1-TEST1,TEST1,1,1,1,1,1,0,0,"{""connectionId"":1,""ProjectKey"":""TEST1""}",_raw_bamboo_api_deploy_build,7,
-1,1769476,release-2,FAILED,FINISHED,2023-03-10T12:28:12.000+00:00,2023-03-10T12:28:12.000+00:00,2023-03-10T12:28:12.000+00:00,2023-03-10T12:28:12.000+00:00,"Manual
 run by <a 
href=""http://54.172.92.89:8085/browse/user/bamboo"";>devlake</a>",TEST1-TEST1,TEST1,1,1,1,1,1,0,0,"{""connectionId"":1,""ProjectKey"":""TEST1""}",_raw_bamboo_api_deploy_build,6,
-1,1769477,release-1,FAILED,FINISHED,2023-03-10T12:29:08.000+00:00,2023-03-10T12:29:09.000+00:00,2023-03-10T12:29:09.000+00:00,2023-03-10T12:29:09.000+00:00,"Manual
 run by <a 
href=""http://54.172.92.89:8085/browse/user/bamboo"";>devlake</a>",TEST1-TEST1,TEST1,1,1,1,1,1,0,0,"{""connectionId"":1,""ProjectKey"":""TEST1""}",_raw_bamboo_api_deploy_build,4,
-1,1769478,release-1,FAILED,FINISHED,2023-03-10T12:29:28.000+00:00,2023-03-10T12:29:28.000+00:00,2023-03-10T12:29:28.000+00:00,2023-03-10T12:29:28.000+00:00,"Manual
 run by <a 
href=""http://54.172.92.89:8085/browse/user/bamboo"";>devlake</a>",TEST1-TEST1,TEST1,1,1,1,1,1,0,0,"{""connectionId"":1,""ProjectKey"":""TEST1""}",_raw_bamboo_api_deploy_build,3,
-1,1769479,release-3,FAILED,FINISHED,2023-03-10T12:30:37.000+00:00,2023-03-10T12:30:37.000+00:00,2023-03-10T12:30:37.000+00:00,2023-03-10T12:30:37.000+00:00,"Manual
 run by <a 
href=""http://54.172.92.89:8085/browse/user/bamboo"";>devlake</a>",TEST1-TEST1,TEST1,1,1,1,1,1,0,0,"{""connectionId"":1,""ProjectKey"":""TEST1""}",_raw_bamboo_api_deploy_build,2,
-1,1769480,release-3,FAILED,FINISHED,2023-03-10T12:30:49.000+00:00,2023-03-10T12:30:49.000+00:00,2023-03-10T12:30:49.000+00:00,2023-03-10T12:30:49.000+00:00,"Manual
 run by <a 
href=""http://54.172.92.89:8085/browse/user/bamboo"";>devlake</a>",TEST1-TEST1,TEST1,1,1,1,1,1,0,0,"{""connectionId"":1,""ProjectKey"":""TEST1""}",_raw_bamboo_api_deploy_build,1,
-1,1769481,release-2,FAILED,FINISHED,2023-03-13T09:43:26.000+00:00,2023-03-13T09:43:26.000+00:00,2023-03-13T09:43:26.000+00:00,2023-03-13T09:43:26.000+00:00,"Manual
 run by <a 
href=""http://54.172.92.89:8085/browse/user/bamboo"";>devlake</a>",TEST1-TEST1,TEST1,1,1,1,1,1,0,0,"{""connectionId"":1,""ProjectKey"":""TEST1""}",_raw_bamboo_api_deploy_build,5,
+connection_id,deploy_build_id,deployment_version_name,deployment_state,life_cycle_state,started_date,queued_date,executed_date,finished_date,reason_summary,plan_key,project_key,can_view,can_edit,can_delete,allowed_to_execute,can_execute,allowed_to_create_version,allowed_to_set_version_status,environment,_raw_data_params,_raw_data_table,_raw_data_id,_raw_data_remark
+1,1769473,release-2,FAILED,FINISHED,2023-03-10T12:15:45.000+00:00,2023-03-10T12:15:45.000+00:00,2023-03-10T12:15:46.000+00:00,2023-03-10T12:15:46.000+00:00,"Manual
 run by <a 
href=""http://54.172.92.89:8085/browse/user/bamboo"";>devlake</a>",TEST1-TEST1,TEST1,1,1,1,1,1,0,0,PRODUCTION,"{""connectionId"":1,""ProjectKey"":""TEST1""}",_raw_bamboo_api_deploy_build,9,
+1,1769474,release-2,FAILED,FINISHED,2023-03-10T12:27:28.000+00:00,2023-03-10T12:27:28.000+00:00,2023-03-10T12:27:28.000+00:00,2023-03-10T12:27:28.000+00:00,"Manual
 run by <a 
href=""http://54.172.92.89:8085/browse/user/bamboo"";>devlake</a>",TEST1-TEST1,TEST1,1,1,1,1,1,0,0,PRODUCTION,"{""connectionId"":1,""ProjectKey"":""TEST1""}",_raw_bamboo_api_deploy_build,8,
+1,1769475,release-2,FAILED,FINISHED,2023-03-10T12:27:56.000+00:00,2023-03-10T12:27:56.000+00:00,2023-03-10T12:27:56.000+00:00,2023-03-10T12:27:56.000+00:00,"Manual
 run by <a 
href=""http://54.172.92.89:8085/browse/user/bamboo"";>devlake</a>",TEST1-TEST1,TEST1,1,1,1,1,1,0,0,PRODUCTION,"{""connectionId"":1,""ProjectKey"":""TEST1""}",_raw_bamboo_api_deploy_build,7,
+1,1769476,release-2,FAILED,FINISHED,2023-03-10T12:28:12.000+00:00,2023-03-10T12:28:12.000+00:00,2023-03-10T12:28:12.000+00:00,2023-03-10T12:28:12.000+00:00,"Manual
 run by <a 
href=""http://54.172.92.89:8085/browse/user/bamboo"";>devlake</a>",TEST1-TEST1,TEST1,1,1,1,1,1,0,0,PRODUCTION,"{""connectionId"":1,""ProjectKey"":""TEST1""}",_raw_bamboo_api_deploy_build,6,
+1,1769477,release-1,FAILED,FINISHED,2023-03-10T12:29:08.000+00:00,2023-03-10T12:29:09.000+00:00,2023-03-10T12:29:09.000+00:00,2023-03-10T12:29:09.000+00:00,"Manual
 run by <a 
href=""http://54.172.92.89:8085/browse/user/bamboo"";>devlake</a>",TEST1-TEST1,TEST1,1,1,1,1,1,0,0,PRODUCTION,"{""connectionId"":1,""ProjectKey"":""TEST1""}",_raw_bamboo_api_deploy_build,4,
+1,1769478,release-1,FAILED,FINISHED,2023-03-10T12:29:28.000+00:00,2023-03-10T12:29:28.000+00:00,2023-03-10T12:29:28.000+00:00,2023-03-10T12:29:28.000+00:00,"Manual
 run by <a 
href=""http://54.172.92.89:8085/browse/user/bamboo"";>devlake</a>",TEST1-TEST1,TEST1,1,1,1,1,1,0,0,PRODUCTION,"{""connectionId"":1,""ProjectKey"":""TEST1""}",_raw_bamboo_api_deploy_build,3,
+1,1769479,release-3,FAILED,FINISHED,2023-03-10T12:30:37.000+00:00,2023-03-10T12:30:37.000+00:00,2023-03-10T12:30:37.000+00:00,2023-03-10T12:30:37.000+00:00,"Manual
 run by <a 
href=""http://54.172.92.89:8085/browse/user/bamboo"";>devlake</a>",TEST1-TEST1,TEST1,1,1,1,1,1,0,0,PRODUCTION,"{""connectionId"":1,""ProjectKey"":""TEST1""}",_raw_bamboo_api_deploy_build,2,
+1,1769480,release-3,FAILED,FINISHED,2023-03-10T12:30:49.000+00:00,2023-03-10T12:30:49.000+00:00,2023-03-10T12:30:49.000+00:00,2023-03-10T12:30:49.000+00:00,"Manual
 run by <a 
href=""http://54.172.92.89:8085/browse/user/bamboo"";>devlake</a>",TEST1-TEST1,TEST1,1,1,1,1,1,0,0,PRODUCTION,"{""connectionId"":1,""ProjectKey"":""TEST1""}",_raw_bamboo_api_deploy_build,1,
+1,1769481,release-2,FAILED,FINISHED,2023-03-13T09:43:26.000+00:00,2023-03-13T09:43:26.000+00:00,2023-03-13T09:43:26.000+00:00,2023-03-13T09:43:26.000+00:00,"Manual
 run by <a 
href=""http://54.172.92.89:8085/browse/user/bamboo"";>devlake</a>",TEST1-TEST1,TEST1,1,1,1,1,1,0,0,PRODUCTION,"{""connectionId"":1,""ProjectKey"":""TEST1""}",_raw_bamboo_api_deploy_build,5,
diff --git 
a/backend/plugins/bamboo/e2e/snapshot_tables/_tool_bamboo_job_builds.csv 
b/backend/plugins/bamboo/e2e/snapshot_tables/_tool_bamboo_job_builds.csv
index 4e66cd5be..c60cf7e82 100644
--- a/backend/plugins/bamboo/e2e/snapshot_tables/_tool_bamboo_job_builds.csv
+++ b/backend/plugins/bamboo/e2e/snapshot_tables/_tool_bamboo_job_builds.csv
@@ -1,10 +1,10 @@
-connection_id,job_build_key,job_key,plan_build_key,expand,number,build_number,job_name,plan_name,plan_key,project_name,project_key,build_result_key,life_cycle_state,build_started_time,pretty_build_started_time,build_completed_time,build_completed_date,pretty_build_completed_time,build_duration_in_seconds,build_duration,build_duration_description,build_relative_time,vcs_revision_key,build_test_summary,successful_test_count,failed_test_count,quarantined_test_count,skipped_test_count,contin
 [...]
-3,TEST1-TEST1-JOB1-22,TEST1-TEST1-JOB1,TEST1-TEST1-22,"plan,artifacts,comments,labels,jiraIssues,variables",22,22,Default
 
Job,test_plan,TEST1-TEST1,test_project,TEST1,TEST1-TEST1-JOB1-22,Finished,2023-02-22T08:31:51.580+00:00,"Wed,
 22 Feb, 08:31 
AM",2023-02-22T08:31:51.590+00:00,2023-02-22T08:31:51.590+00:00,"Wed, 22 Feb, 
08:31 AM",0,10,< 1 second,1 hour ago,,No tests found,0,0,0,0,0,0,0,0,"Manual 
run by <a 
href=""http://54.172.92.89:8085/browse/user/bamboo"";>devlake</a>","Manual run 
by  [...]
-3,TEST1-TEST1-JOB1-23,TEST1-TEST1-JOB1,TEST1-TEST1-23,"plan,artifacts,comments,labels,jiraIssues,variables",23,23,Default
 
Job,test_plan,TEST1-TEST1,test_project,TEST1,TEST1-TEST1-JOB1-23,Finished,2023-02-22T08:31:54.768+00:00,"Wed,
 22 Feb, 08:31 
AM",2023-02-22T08:31:54.778+00:00,2023-02-22T08:31:54.778+00:00,"Wed, 22 Feb, 
08:31 AM",0,10,< 1 second,1 hour ago,,No tests found,0,0,0,0,0,0,0,0,"Manual 
run by <a 
href=""http://54.172.92.89:8085/browse/user/bamboo"";>devlake</a>","Manual run 
by  [...]
-3,TEST1-TEST2-JOB1-2,TEST1-TEST2-JOB1,TEST1-TEST2-2,"plan,artifacts,comments,labels,jiraIssues,variables",2,2,Default
 
Job,test2,TEST1-TEST2,test_project,TEST1,TEST1-TEST2-JOB1-2,Finished,2023-02-22T08:57:02.876+00:00,"Wed,
 22 Feb, 08:57 
AM",2023-02-22T08:57:02.879+00:00,2023-02-22T08:57:02.879+00:00,"Wed, 22 Feb, 
08:57 AM",0,3,< 1 second,1 hour ago,,No tests found,0,0,0,0,0,0,0,0,"Manual run 
by <a href=""http://54.172.92.89:8085/browse/user/bamboo"";>devlake</a>","Manual 
run by <a href="" [...]
-3,TEST1-TEST2-JOB1-3,TEST1-TEST2-JOB1,TEST1-TEST2-3,"plan,artifacts,comments,labels,jiraIssues,variables",3,3,Default
 
Job,test2,TEST1-TEST2,test_project,TEST1,TEST1-TEST2-JOB1-3,Finished,2023-02-22T08:57:06.722+00:00,"Wed,
 22 Feb, 08:57 
AM",2023-02-22T08:57:06.725+00:00,2023-02-22T08:57:06.725+00:00,"Wed, 22 Feb, 
08:57 AM",0,3,< 1 second,1 hour ago,,No tests found,0,0,0,0,0,0,0,0,"Manual run 
by <a href=""http://54.172.92.89:8085/browse/user/bamboo"";>devlake</a>","Manual 
run by <a href="" [...]
-3,TEST1-TEST3-JOB1-2,TEST1-TEST3-JOB1,TEST1-TEST3-2,"plan,artifacts,comments,labels,jiraIssues,variables",2,2,Default
 
Job,test3,TEST1-TEST3,test_project,TEST1,TEST1-TEST3-JOB1-2,Finished,2023-02-22T08:55:21.897+00:00,"Wed,
 22 Feb, 08:55 
AM",2023-02-22T08:55:21.901+00:00,2023-02-22T08:55:21.901+00:00,"Wed, 22 Feb, 
08:55 AM",0,4,< 1 second,1 hour ago,,No tests found,0,0,0,0,0,0,0,0,"Manual run 
by <a href=""http://54.172.92.89:8085/browse/user/bamboo"";>devlake</a>","Manual 
run by <a href="" [...]
-3,TEST1-TEST3-JOB1-3,TEST1-TEST3-JOB1,TEST1-TEST3-3,"plan,artifacts,comments,labels,jiraIssues,variables",3,3,Default
 
Job,test3,TEST1-TEST3,test_project,TEST1,TEST1-TEST3-JOB1-3,Finished,2023-02-22T08:55:25.123+00:00,"Wed,
 22 Feb, 08:55 
AM",2023-02-22T08:55:25.126+00:00,2023-02-22T08:55:25.126+00:00,"Wed, 22 Feb, 
08:55 AM",0,3,< 1 second,1 hour ago,,No tests found,0,0,0,0,0,0,0,0,"Manual run 
by <a href=""http://54.172.92.89:8085/browse/user/bamboo"";>devlake</a>","Manual 
run by <a href="" [...]
-3,TEST1-TEST4-JOB1-1,TEST1-TEST4-JOB1,TEST1-TEST4-1,"plan,artifacts,comments,labels,jiraIssues,variables",1,1,Default
 
Job,test4,TEST1-TEST4,test_project,TEST1,TEST1-TEST4-JOB1-1,Finished,2023-02-22T08:56:25.943+00:00,"Wed,
 22 Feb, 08:56 
AM",2023-02-22T08:56:25.947+00:00,2023-02-22T08:56:25.947+00:00,"Wed, 22 Feb, 
08:56 AM",0,4,< 1 second,1 hour ago,,No tests found,0,0,0,0,0,0,0,0,"Manual run 
by <a href=""http://54.172.92.89:8085/browse/user/bamboo"";>devlake</a>","Manual 
run by <a href="" [...]
-3,TEST1-TEST4-JOB1-2,TEST1-TEST4-JOB1,TEST1-TEST4-2,"plan,artifacts,comments,labels,jiraIssues,variables",2,2,Default
 
Job,test4,TEST1-TEST4,test_project,TEST1,TEST1-TEST4-JOB1-2,Finished,2023-02-22T08:56:27.888+00:00,"Wed,
 22 Feb, 08:56 
AM",2023-02-22T08:56:27.891+00:00,2023-02-22T08:56:27.891+00:00,"Wed, 22 Feb, 
08:56 AM",0,3,< 1 second,1 hour ago,,No tests found,0,0,0,0,0,0,0,0,"Manual run 
by <a href=""http://54.172.92.89:8085/browse/user/bamboo"";>devlake</a>","Manual 
run by <a href="" [...]
-3,TEST1-TEST4-JOB1-3,TEST1-TEST4-JOB1,TEST1-TEST4-3,"plan,artifacts,comments,labels,jiraIssues,variables",3,3,Default
 
Job,test4,TEST1-TEST4,test_project,TEST1,TEST1-TEST4-JOB1-3,Finished,2023-02-22T08:57:01.230+00:00,"Wed,
 22 Feb, 08:57 
AM",2023-02-22T08:57:01.234+00:00,2023-02-22T08:57:01.234+00:00,"Wed, 22 Feb, 
08:57 AM",0,4,< 1 second,1 hour ago,,No tests found,0,0,0,0,0,0,0,0,"Manual run 
by <a href=""http://54.172.92.89:8085/browse/user/bamboo"";>devlake</a>","Manual 
run by <a href="" [...]
+connection_id,job_build_key,job_key,plan_build_key,expand,number,build_number,job_name,plan_name,plan_key,project_name,project_key,build_result_key,life_cycle_state,build_started_time,pretty_build_started_time,build_completed_time,build_completed_date,pretty_build_completed_time,build_duration_in_seconds,build_duration,build_duration_description,build_relative_time,vcs_revision_key,build_test_summary,successful_test_count,failed_test_count,quarantined_test_count,skipped_test_count,contin
 [...]
+3,TEST1-TEST1-JOB1-22,TEST1-TEST1-JOB1,TEST1-TEST1-22,"plan,artifacts,comments,labels,jiraIssues,variables",22,22,Default
 
Job,test_plan,TEST1-TEST1,test_project,TEST1,TEST1-TEST1-JOB1-22,Finished,2023-02-22T08:31:51.580+00:00,"Wed,
 22 Feb, 08:31 
AM",2023-02-22T08:31:51.590+00:00,2023-02-22T08:31:51.590+00:00,"Wed, 22 Feb, 
08:31 AM",0,10,< 1 second,1 hour ago,,No tests found,0,0,0,0,0,0,0,0,"Manual 
run by <a 
href=""http://54.172.92.89:8085/browse/user/bamboo"";>devlake</a>","Manual run 
by  [...]
+3,TEST1-TEST1-JOB1-23,TEST1-TEST1-JOB1,TEST1-TEST1-23,"plan,artifacts,comments,labels,jiraIssues,variables",23,23,Default
 
Job,test_plan,TEST1-TEST1,test_project,TEST1,TEST1-TEST1-JOB1-23,Finished,2023-02-22T08:31:54.768+00:00,"Wed,
 22 Feb, 08:31 
AM",2023-02-22T08:31:54.778+00:00,2023-02-22T08:31:54.778+00:00,"Wed, 22 Feb, 
08:31 AM",0,10,< 1 second,1 hour ago,,No tests found,0,0,0,0,0,0,0,0,"Manual 
run by <a 
href=""http://54.172.92.89:8085/browse/user/bamboo"";>devlake</a>","Manual run 
by  [...]
+3,TEST1-TEST2-JOB1-2,TEST1-TEST2-JOB1,TEST1-TEST2-2,"plan,artifacts,comments,labels,jiraIssues,variables",2,2,Default
 
Job,test2,TEST1-TEST2,test_project,TEST1,TEST1-TEST2-JOB1-2,Finished,2023-02-22T08:57:02.876+00:00,"Wed,
 22 Feb, 08:57 
AM",2023-02-22T08:57:02.879+00:00,2023-02-22T08:57:02.879+00:00,"Wed, 22 Feb, 
08:57 AM",0,3,< 1 second,1 hour ago,,No tests found,0,0,0,0,0,0,0,0,"Manual run 
by <a href=""http://54.172.92.89:8085/browse/user/bamboo"";>devlake</a>","Manual 
run by <a href="" [...]
+3,TEST1-TEST2-JOB1-3,TEST1-TEST2-JOB1,TEST1-TEST2-3,"plan,artifacts,comments,labels,jiraIssues,variables",3,3,compile,test2,TEST1-TEST2,test_project,TEST1,TEST1-TEST2-JOB1-3,Finished,2023-02-22T08:57:06.722+00:00,"Wed,
 22 Feb, 08:57 
AM",2023-02-22T08:57:06.725+00:00,2023-02-22T08:57:06.725+00:00,"Wed, 22 Feb, 
08:57 AM",0,3,< 1 second,1 hour ago,,No tests found,0,0,0,0,0,0,0,0,"Manual run 
by <a href=""http://54.172.92.89:8085/browse/user/bamboo"";>devlake</a>","Manual 
run by <a href=""http [...]
+3,TEST1-TEST3-JOB1-2,TEST1-TEST3-JOB1,TEST1-TEST3-2,"plan,artifacts,comments,labels,jiraIssues,variables",2,2,Default
 
Job,test3,TEST1-TEST3,test_project,TEST1,TEST1-TEST3-JOB1-2,Finished,2023-02-22T08:55:21.897+00:00,"Wed,
 22 Feb, 08:55 
AM",2023-02-22T08:55:21.901+00:00,2023-02-22T08:55:21.901+00:00,"Wed, 22 Feb, 
08:55 AM",0,4,< 1 second,1 hour ago,,No tests found,0,0,0,0,0,0,0,0,"Manual run 
by <a href=""http://54.172.92.89:8085/browse/user/bamboo"";>devlake</a>","Manual 
run by <a href="" [...]
+3,TEST1-TEST3-JOB1-3,TEST1-TEST3-JOB1,TEST1-TEST3-3,"plan,artifacts,comments,labels,jiraIssues,variables",3,3,Default
 
Job,test3,TEST1-TEST3,test_project,TEST1,TEST1-TEST3-JOB1-3,Finished,2023-02-22T08:55:25.123+00:00,"Wed,
 22 Feb, 08:55 
AM",2023-02-22T08:55:25.126+00:00,2023-02-22T08:55:25.126+00:00,"Wed, 22 Feb, 
08:55 AM",0,3,< 1 second,1 hour ago,,No tests found,0,0,0,0,0,0,0,0,"Manual run 
by <a href=""http://54.172.92.89:8085/browse/user/bamboo"";>devlake</a>","Manual 
run by <a href="" [...]
+3,TEST1-TEST4-JOB1-1,TEST1-TEST4-JOB1,TEST1-TEST4-1,"plan,artifacts,comments,labels,jiraIssues,variables",1,1,Default
 
Job,test4,TEST1-TEST4,test_project,TEST1,TEST1-TEST4-JOB1-1,Finished,2023-02-22T08:56:25.943+00:00,"Wed,
 22 Feb, 08:56 
AM",2023-02-22T08:56:25.947+00:00,2023-02-22T08:56:25.947+00:00,"Wed, 22 Feb, 
08:56 AM",0,4,< 1 second,1 hour ago,,No tests found,0,0,0,0,0,0,0,0,"Manual run 
by <a href=""http://54.172.92.89:8085/browse/user/bamboo"";>devlake</a>","Manual 
run by <a href="" [...]
+3,TEST1-TEST4-JOB1-2,TEST1-TEST4-JOB1,TEST1-TEST4-2,"plan,artifacts,comments,labels,jiraIssues,variables",2,2,Default
 
Job,test4,TEST1-TEST4,test_project,TEST1,TEST1-TEST4-JOB1-2,Finished,2023-02-22T08:56:27.888+00:00,"Wed,
 22 Feb, 08:56 
AM",2023-02-22T08:56:27.891+00:00,2023-02-22T08:56:27.891+00:00,"Wed, 22 Feb, 
08:56 AM",0,3,< 1 second,1 hour ago,,No tests found,0,0,0,0,0,0,0,0,"Manual run 
by <a href=""http://54.172.92.89:8085/browse/user/bamboo"";>devlake</a>","Manual 
run by <a href="" [...]
+3,TEST1-TEST4-JOB1-3,TEST1-TEST4-JOB1,TEST1-TEST4-3,"plan,artifacts,comments,labels,jiraIssues,variables",3,3,compile,test4,TEST1-TEST4,test_project,TEST1,TEST1-TEST4-JOB1-3,Finished,2023-02-22T08:57:01.230+00:00,"Wed,
 22 Feb, 08:57 
AM",2023-02-22T08:57:01.234+00:00,2023-02-22T08:57:01.234+00:00,"Wed, 22 Feb, 
08:57 AM",0,4,< 1 second,1 hour ago,,No tests found,0,0,0,0,0,0,0,0,"Manual run 
by <a href=""http://54.172.92.89:8085/browse/user/bamboo"";>devlake</a>","Manual 
run by <a href=""http [...]
diff --git 
a/backend/plugins/bamboo/e2e/snapshot_tables/_tool_bamboo_plan_builds.csv 
b/backend/plugins/bamboo/e2e/snapshot_tables/_tool_bamboo_plan_builds.csv
index 33755df56..ba4de5ef8 100644
--- a/backend/plugins/bamboo/e2e/snapshot_tables/_tool_bamboo_plan_builds.csv
+++ b/backend/plugins/bamboo/e2e/snapshot_tables/_tool_bamboo_plan_builds.csv
@@ -1,10 +1,10 @@
-connection_id,plan_build_key,expand,number,build_number,plan_name,plan_key,project_name,project_key,build_result_key,life_cycle_state,build_started_time,pretty_build_started_time,build_completed_time,build_completed_date,pretty_build_completed_time,build_duration_in_seconds,build_duration,build_duration_description,build_relative_time,vcs_revision_key,build_test_summary,successful_test_count,failed_test_count,quarantined_test_count,skipped_test_count,continuable,once_off,restartable,not_
 [...]
-3,TEST1-TEST1-22,"plan,artifacts,comments,labels,jiraIssues,variables,stages",22,22,test_plan,TEST1-TEST1,test_project,TEST1,TEST1-TEST1-22,Finished,2023-02-22T08:31:51.532+00:00,"Wed,
 22 Feb, 08:31 
AM",2023-02-22T08:31:51.624+00:00,2023-02-22T08:31:51.624+00:00,"Wed, 22 Feb, 
08:31 AM",0,92,< 1 second,3 hours ago,,No tests found,0,0,0,0,0,0,0,0,"Manual 
run by <a 
href=""http://54.172.92.89:8085/browse/user/bamboo"";>devlake</a>","Manual run 
by <a href=""http://54.172.92.89:8085/browse/user [...]
-3,TEST1-TEST1-23,"plan,artifacts,comments,labels,jiraIssues,variables,stages",23,23,test_plan,TEST1-TEST1,test_project,TEST1,TEST1-TEST1-23,Finished,2023-02-22T08:31:54.760+00:00,"Wed,
 22 Feb, 08:31 
AM",2023-02-22T08:31:54.811+00:00,2023-02-22T08:31:54.811+00:00,"Wed, 22 Feb, 
08:31 AM",0,51,< 1 second,3 hours ago,,No tests found,0,0,0,0,0,0,0,0,"Manual 
run by <a 
href=""http://54.172.92.89:8085/browse/user/bamboo"";>devlake</a>","Manual run 
by <a href=""http://54.172.92.89:8085/browse/user [...]
-3,TEST1-TEST2-1,"plan,artifacts,comments,labels,jiraIssues,variables,stages",1,1,test2,TEST1-TEST2,test_project,TEST1,TEST1-TEST2-1,Finished,2023-02-22T08:54:40.831+00:00,"Wed,
 22 Feb, 08:54 
AM",2023-02-22T08:54:40.884+00:00,2023-02-22T08:54:40.884+00:00,"Wed, 22 Feb, 
08:54 AM",0,53,< 1 second,3 hours ago,,No tests found,0,0,0,0,0,0,1,0,"Manual 
run by <a 
href=""http://54.172.92.89:8085/browse/user/bamboo"";>devlake</a>","Manual run 
by <a href=""http://54.172.92.89:8085/browse/user/bamboo"; [...]
-3,TEST1-TEST2-2,"plan,artifacts,comments,labels,jiraIssues,variables,stages",2,2,test2,TEST1-TEST2,test_project,TEST1,TEST1-TEST2-2,Finished,2023-02-22T08:57:02.868+00:00,"Wed,
 22 Feb, 08:57 
AM",2023-02-22T08:57:02.903+00:00,2023-02-22T08:57:02.903+00:00,"Wed, 22 Feb, 
08:57 AM",0,35,< 1 second,3 hours ago,,No tests found,0,0,0,0,0,0,1,0,"Manual 
run by <a 
href=""http://54.172.92.89:8085/browse/user/bamboo"";>devlake</a>","Manual run 
by <a href=""http://54.172.92.89:8085/browse/user/bamboo"; [...]
-3,TEST1-TEST2-3,"plan,artifacts,comments,labels,jiraIssues,variables,stages",3,3,test2,TEST1-TEST2,test_project,TEST1,TEST1-TEST2-3,Finished,2023-02-22T08:57:06.713+00:00,"Wed,
 22 Feb, 08:57 
AM",2023-02-22T08:57:06.770+00:00,2023-02-22T08:57:06.770+00:00,"Wed, 22 Feb, 
08:57 AM",0,57,< 1 second,3 hours ago,,No tests found,0,0,0,0,0,0,1,0,"Manual 
run by <a 
href=""http://54.172.92.89:8085/browse/user/bamboo"";>devlake</a>","Manual run 
by <a href=""http://54.172.92.89:8085/browse/user/bamboo"; [...]
-3,TEST1-TEST3-1,"plan,artifacts,comments,labels,jiraIssues,variables,stages",1,1,test3,TEST1-TEST3,test_project,TEST1,TEST1-TEST3-1,Finished,2023-02-22T08:55:19.422+00:00,"Wed,
 22 Feb, 08:55 
AM",2023-02-22T08:55:19.500+00:00,2023-02-22T08:55:19.500+00:00,"Wed, 22 Feb, 
08:55 AM",0,78,< 1 second,3 hours ago,,No tests found,0,0,0,0,0,0,1,0,"Manual 
run by <a 
href=""http://54.172.92.89:8085/browse/user/bamboo"";>devlake</a>","Manual run 
by <a href=""http://54.172.92.89:8085/browse/user/bamboo"; [...]
-3,TEST1-TEST3-2,"plan,artifacts,comments,labels,jiraIssues,variables,stages",2,2,test3,TEST1-TEST3,test_project,TEST1,TEST1-TEST3-2,Finished,2023-02-22T08:55:21.888+00:00,"Wed,
 22 Feb, 08:55 
AM",2023-02-22T08:55:21.930+00:00,2023-02-22T08:55:21.930+00:00,"Wed, 22 Feb, 
08:55 AM",0,42,< 1 second,3 hours ago,,No tests found,0,0,0,0,0,0,1,0,"Manual 
run by <a 
href=""http://54.172.92.89:8085/browse/user/bamboo"";>devlake</a>","Manual run 
by <a href=""http://54.172.92.89:8085/browse/user/bamboo"; [...]
-3,TEST1-TEST4-1,"plan,artifacts,comments,labels,jiraIssues,variables,stages",1,1,test4,TEST1-TEST4,test_project,TEST1,TEST1-TEST4-1,Finished,2023-02-22T08:56:25.911+00:00,"Wed,
 22 Feb, 08:56 
AM",2023-02-22T08:56:25.972+00:00,2023-02-22T08:56:25.972+00:00,"Wed, 22 Feb, 
08:56 AM",0,61,< 1 second,3 hours ago,,No tests found,0,0,0,0,0,0,1,0,"Manual 
run by <a 
href=""http://54.172.92.89:8085/browse/user/bamboo"";>devlake</a>","Manual run 
by <a href=""http://54.172.92.89:8085/browse/user/bamboo"; [...]
-3,TEST1-TEST4-2,"plan,artifacts,comments,labels,jiraIssues,variables,stages",2,2,test4,TEST1-TEST4,test_project,TEST1,TEST1-TEST4-2,Finished,2023-02-22T08:56:27.881+00:00,"Wed,
 22 Feb, 08:56 
AM",2023-02-22T08:56:27.917+00:00,2023-02-22T08:56:27.917+00:00,"Wed, 22 Feb, 
08:56 AM",0,36,< 1 second,3 hours ago,,No tests found,0,0,0,0,0,0,1,0,"Manual 
run by <a 
href=""http://54.172.92.89:8085/browse/user/bamboo"";>devlake</a>","Manual run 
by <a href=""http://54.172.92.89:8085/browse/user/bamboo"; [...]
+connection_id,plan_build_key,expand,number,build_number,plan_name,plan_key,project_name,project_key,build_result_key,life_cycle_state,build_started_time,pretty_build_started_time,build_completed_time,build_completed_date,pretty_build_completed_time,build_duration_in_seconds,build_duration,build_duration_description,build_relative_time,vcs_revision_key,build_test_summary,successful_test_count,failed_test_count,quarantined_test_count,skipped_test_count,continuable,once_off,restartable,not_
 [...]
+3,TEST1-TEST1-22,"plan,artifacts,comments,labels,jiraIssues,variables,stages",22,22,test_plan,TEST1-TEST1,test_project,TEST1,TEST1-TEST1-22,Finished,2023-02-22T08:31:51.532+00:00,"Wed,
 22 Feb, 08:31 
AM",2023-02-22T08:31:51.624+00:00,2023-02-22T08:31:51.624+00:00,"Wed, 22 Feb, 
08:31 AM",0,92,< 1 second,3 hours ago,,No tests found,0,0,0,0,0,0,0,0,"Manual 
run by <a 
href=""http://54.172.92.89:8085/browse/user/bamboo"";>devlake</a>","Manual run 
by <a href=""http://54.172.92.89:8085/browse/user [...]
+3,TEST1-TEST1-23,"plan,artifacts,comments,labels,jiraIssues,variables,stages",23,23,test_plan,TEST1-TEST1,test_project,TEST1,TEST1-TEST1-23,Finished,2023-02-22T08:31:54.760+00:00,"Wed,
 22 Feb, 08:31 
AM",2023-02-22T08:31:54.811+00:00,2023-02-22T08:31:54.811+00:00,"Wed, 22 Feb, 
08:31 AM",0,51,< 1 second,3 hours ago,,No tests found,0,0,0,0,0,0,0,0,"Manual 
run by <a 
href=""http://54.172.92.89:8085/browse/user/bamboo"";>devlake</a>","Manual run 
by <a href=""http://54.172.92.89:8085/browse/user [...]
+3,TEST1-TEST2-1,"plan,artifacts,comments,labels,jiraIssues,variables,stages",1,1,test2,TEST1-TEST2,test_project,TEST1,TEST1-TEST2-1,Finished,2023-02-22T08:54:40.831+00:00,"Wed,
 22 Feb, 08:54 
AM",2023-02-22T08:54:40.884+00:00,2023-02-22T08:54:40.884+00:00,"Wed, 22 Feb, 
08:54 AM",0,53,< 1 second,3 hours ago,,No tests found,0,0,0,0,0,0,1,0,"Manual 
run by <a 
href=""http://54.172.92.89:8085/browse/user/bamboo"";>devlake</a>","Manual run 
by <a href=""http://54.172.92.89:8085/browse/user/bamboo"; [...]
+3,TEST1-TEST2-2,"plan,artifacts,comments,labels,jiraIssues,variables,stages",2,2,test2,TEST1-TEST2,test_project,TEST1,TEST1-TEST2-2,Finished,2023-02-22T08:57:02.868+00:00,"Wed,
 22 Feb, 08:57 
AM",2023-02-22T08:57:02.903+00:00,2023-02-22T08:57:02.903+00:00,"Wed, 22 Feb, 
08:57 AM",0,35,< 1 second,3 hours ago,,No tests found,0,0,0,0,0,0,1,0,"Manual 
run by <a 
href=""http://54.172.92.89:8085/browse/user/bamboo"";>devlake</a>","Manual run 
by <a href=""http://54.172.92.89:8085/browse/user/bamboo"; [...]
+3,TEST1-TEST2-3,"plan,artifacts,comments,labels,jiraIssues,variables,stages",3,3,test2,TEST1-TEST2,test_project,TEST1,TEST1-TEST2-3,Finished,2023-02-22T08:57:06.713+00:00,"Wed,
 22 Feb, 08:57 
AM",2023-02-22T08:57:06.770+00:00,2023-02-22T08:57:06.770+00:00,"Wed, 22 Feb, 
08:57 AM",0,57,< 1 second,3 hours ago,,No tests found,0,0,0,0,0,0,1,0,"Manual 
run by <a 
href=""http://54.172.92.89:8085/browse/user/bamboo"";>devlake</a>","Manual run 
by <a href=""http://54.172.92.89:8085/browse/user/bamboo"; [...]
+3,TEST1-TEST3-1,"plan,artifacts,comments,labels,jiraIssues,variables,stages",1,1,test3,TEST1-TEST3,test_project,TEST1,TEST1-TEST3-1,Finished,2023-02-22T08:55:19.422+00:00,"Wed,
 22 Feb, 08:55 
AM",2023-02-22T08:55:19.500+00:00,2023-02-22T08:55:19.500+00:00,"Wed, 22 Feb, 
08:55 AM",0,78,< 1 second,3 hours ago,,No tests found,0,0,0,0,0,0,1,0,"Manual 
run by <a 
href=""http://54.172.92.89:8085/browse/user/bamboo"";>devlake</a>","Manual run 
by <a href=""http://54.172.92.89:8085/browse/user/bamboo"; [...]
+3,TEST1-TEST3-2,"plan,artifacts,comments,labels,jiraIssues,variables,stages",2,2,compile,TEST1-TEST3,test_project,TEST1,TEST1-TEST3-2,Finished,2023-02-22T08:55:21.888+00:00,"Wed,
 22 Feb, 08:55 
AM",2023-02-22T08:55:21.930+00:00,2023-02-22T08:55:21.930+00:00,"Wed, 22 Feb, 
08:55 AM",0,42,< 1 second,3 hours ago,,No tests found,0,0,0,0,0,0,1,0,"Manual 
run by <a 
href=""http://54.172.92.89:8085/browse/user/bamboo"";>devlake</a>","Manual run 
by <a href=""http://54.172.92.89:8085/browse/user/bambo [...]
+3,TEST1-TEST4-1,"plan,artifacts,comments,labels,jiraIssues,variables,stages",1,1,test4,TEST1-TEST4,test_project,TEST1,TEST1-TEST4-1,Finished,2023-02-22T08:56:25.911+00:00,"Wed,
 22 Feb, 08:56 
AM",2023-02-22T08:56:25.972+00:00,2023-02-22T08:56:25.972+00:00,"Wed, 22 Feb, 
08:56 AM",0,61,< 1 second,3 hours ago,,No tests found,0,0,0,0,0,0,1,0,"Manual 
run by <a 
href=""http://54.172.92.89:8085/browse/user/bamboo"";>devlake</a>","Manual run 
by <a href=""http://54.172.92.89:8085/browse/user/bamboo"; [...]
+3,TEST1-TEST4-2,"plan,artifacts,comments,labels,jiraIssues,variables,stages",2,2,compile,TEST1-TEST4,test_project,TEST1,TEST1-TEST4-2,Finished,2023-02-22T08:56:27.881+00:00,"Wed,
 22 Feb, 08:56 
AM",2023-02-22T08:56:27.917+00:00,2023-02-22T08:56:27.917+00:00,"Wed, 22 Feb, 
08:56 AM",0,36,< 1 second,3 hours ago,,No tests found,0,0,0,0,0,0,1,0,"Manual 
run by <a 
href=""http://54.172.92.89:8085/browse/user/bamboo"";>devlake</a>","Manual run 
by <a href=""http://54.172.92.89:8085/browse/user/bambo [...]
diff --git a/backend/plugins/bamboo/e2e/snapshot_tables/cicd_pipelines.csv 
b/backend/plugins/bamboo/e2e/snapshot_tables/cicd_pipelines.csv
index a7b20a513..097ed7883 100644
--- a/backend/plugins/bamboo/e2e/snapshot_tables/cicd_pipelines.csv
+++ b/backend/plugins/bamboo/e2e/snapshot_tables/cicd_pipelines.csv
@@ -5,6 +5,6 @@ 
bamboo:BambooPlanBuild:3:TEST1-TEST2-1,test2,FAILURE,DONE,,0,,2023-02-22T08:54:4
 
bamboo:BambooPlanBuild:3:TEST1-TEST2-2,test2,FAILURE,DONE,,0,,2023-02-22T08:57:02.868+00:00,2023-02-22T08:57:02.903+00:00,bamboo:BambooProject:3:TEST1
 
bamboo:BambooPlanBuild:3:TEST1-TEST2-3,test2,FAILURE,DONE,,0,,2023-02-22T08:57:06.713+00:00,2023-02-22T08:57:06.770+00:00,bamboo:BambooProject:3:TEST1
 
bamboo:BambooPlanBuild:3:TEST1-TEST3-1,test3,FAILURE,DONE,,0,,2023-02-22T08:55:19.422+00:00,2023-02-22T08:55:19.500+00:00,bamboo:BambooProject:3:TEST1
-bamboo:BambooPlanBuild:3:TEST1-TEST3-2,test3,FAILURE,DONE,,0,,2023-02-22T08:55:21.888+00:00,2023-02-22T08:55:21.930+00:00,bamboo:BambooProject:3:TEST1
+bamboo:BambooPlanBuild:3:TEST1-TEST3-2,compile,FAILURE,DONE,DEPLOYMENT,0,PRODUCTION,2023-02-22T08:55:21.888+00:00,2023-02-22T08:55:21.930+00:00,bamboo:BambooProject:3:TEST1
 
bamboo:BambooPlanBuild:3:TEST1-TEST4-1,test4,FAILURE,DONE,,0,,2023-02-22T08:56:25.911+00:00,2023-02-22T08:56:25.972+00:00,bamboo:BambooProject:3:TEST1
-bamboo:BambooPlanBuild:3:TEST1-TEST4-2,test4,FAILURE,DONE,,0,,2023-02-22T08:56:27.881+00:00,2023-02-22T08:56:27.917+00:00,bamboo:BambooProject:3:TEST1
+bamboo:BambooPlanBuild:3:TEST1-TEST4-2,compile,FAILURE,DONE,DEPLOYMENT,0,PRODUCTION,2023-02-22T08:56:27.881+00:00,2023-02-22T08:56:27.917+00:00,bamboo:BambooProject:3:TEST1
diff --git a/backend/plugins/bamboo/e2e/snapshot_tables/cicd_tasks.csv 
b/backend/plugins/bamboo/e2e/snapshot_tables/cicd_tasks.csv
index 60f5abb74..4dd1dff7d 100644
--- a/backend/plugins/bamboo/e2e/snapshot_tables/cicd_tasks.csv
+++ b/backend/plugins/bamboo/e2e/snapshot_tables/cicd_tasks.csv
@@ -2,9 +2,9 @@ 
id,name,pipeline_id,result,status,type,environment,duration_sec,started_date,fin
 bamboo:BambooJobBuild:3:TEST1-TEST1-JOB1-22,Default 
Job,bamboo:BambooPlanBuild:3:TEST1-TEST1-22,SUCCESS,DONE,,,0,2023-02-22T08:31:51.580+00:00,2023-02-22T08:31:51.590+00:00,bamboo:BambooProject:3:TEST1
 bamboo:BambooJobBuild:3:TEST1-TEST1-JOB1-23,Default 
Job,bamboo:BambooPlanBuild:3:TEST1-TEST1-23,SUCCESS,DONE,,,0,2023-02-22T08:31:54.768+00:00,2023-02-22T08:31:54.778+00:00,bamboo:BambooProject:3:TEST1
 bamboo:BambooJobBuild:3:TEST1-TEST2-JOB1-2,Default 
Job,bamboo:BambooPlanBuild:3:TEST1-TEST2-2,FAILURE,DONE,,,0,2023-02-22T08:57:02.876+00:00,2023-02-22T08:57:02.879+00:00,bamboo:BambooProject:3:TEST1
-bamboo:BambooJobBuild:3:TEST1-TEST2-JOB1-3,Default 
Job,bamboo:BambooPlanBuild:3:TEST1-TEST2-3,FAILURE,DONE,,,0,2023-02-22T08:57:06.722+00:00,2023-02-22T08:57:06.725+00:00,bamboo:BambooProject:3:TEST1
+bamboo:BambooJobBuild:3:TEST1-TEST2-JOB1-3,compile,bamboo:BambooPlanBuild:3:TEST1-TEST2-3,FAILURE,DONE,DEPLOYMENT,PRODUCTION,0,2023-02-22T08:57:06.722+00:00,2023-02-22T08:57:06.725+00:00,bamboo:BambooProject:3:TEST1
 bamboo:BambooJobBuild:3:TEST1-TEST3-JOB1-2,Default 
Job,bamboo:BambooPlanBuild:3:TEST1-TEST3-2,FAILURE,DONE,,,0,2023-02-22T08:55:21.897+00:00,2023-02-22T08:55:21.901+00:00,bamboo:BambooProject:3:TEST1
 bamboo:BambooJobBuild:3:TEST1-TEST3-JOB1-3,Default 
Job,bamboo:BambooPlanBuild:3:TEST1-TEST3-3,FAILURE,DONE,,,0,2023-02-22T08:55:25.123+00:00,2023-02-22T08:55:25.126+00:00,bamboo:BambooProject:3:TEST1
 bamboo:BambooJobBuild:3:TEST1-TEST4-JOB1-1,Default 
Job,bamboo:BambooPlanBuild:3:TEST1-TEST4-1,FAILURE,DONE,,,0,2023-02-22T08:56:25.943+00:00,2023-02-22T08:56:25.947+00:00,bamboo:BambooProject:3:TEST1
 bamboo:BambooJobBuild:3:TEST1-TEST4-JOB1-2,Default 
Job,bamboo:BambooPlanBuild:3:TEST1-TEST4-2,FAILURE,DONE,,,0,2023-02-22T08:56:27.888+00:00,2023-02-22T08:56:27.891+00:00,bamboo:BambooProject:3:TEST1
-bamboo:BambooJobBuild:3:TEST1-TEST4-JOB1-3,Default 
Job,bamboo:BambooPlanBuild:3:TEST1-TEST4-3,FAILURE,DONE,,,0,2023-02-22T08:57:01.230+00:00,2023-02-22T08:57:01.234+00:00,bamboo:BambooProject:3:TEST1
+bamboo:BambooJobBuild:3:TEST1-TEST4-JOB1-3,compile,bamboo:BambooPlanBuild:3:TEST1-TEST4-3,FAILURE,DONE,DEPLOYMENT,PRODUCTION,0,2023-02-22T08:57:01.230+00:00,2023-02-22T08:57:01.234+00:00,bamboo:BambooProject:3:TEST1
diff --git a/backend/plugins/bamboo/impl/impl.go 
b/backend/plugins/bamboo/impl/impl.go
index f7b9f4c94..499e81947 100644
--- a/backend/plugins/bamboo/impl/impl.go
+++ b/backend/plugins/bamboo/impl/impl.go
@@ -19,9 +19,11 @@ package impl
 
 import (
        "fmt"
+
        "github.com/apache/incubator-devlake/core/context"
        "github.com/apache/incubator-devlake/core/dal"
        "github.com/apache/incubator-devlake/core/errors"
+       "github.com/apache/incubator-devlake/core/models/domainlayer/devops"
        "github.com/apache/incubator-devlake/core/plugin"
        helper "github.com/apache/incubator-devlake/helpers/pluginhelper/api"
        "github.com/apache/incubator-devlake/plugins/bamboo/api"
@@ -169,9 +171,17 @@ func (p Bamboo) PrepareTaskData(taskCtx 
plugin.TaskContext, options map[string]i
        if op.BambooTransformationRule == nil && op.TransformationRuleId == 0 {
                op.BambooTransformationRule = 
new(models.BambooTransformationRule)
        }
+       regexEnricher := helper.NewRegexEnricher()
+       if err := regexEnricher.TryAdd(devops.DEPLOYMENT, 
op.DeploymentPattern); err != nil {
+               return nil, errors.BadInput.Wrap(err, "invalid value for 
`deploymentPattern`")
+       }
+       if err := regexEnricher.TryAdd(devops.PRODUCTION, 
op.ProductionPattern); err != nil {
+               return nil, errors.BadInput.Wrap(err, "invalid value for 
`productionPattern`")
+       }
        return &tasks.BambooTaskData{
-               Options:   op,
-               ApiClient: apiClient,
+               Options:       op,
+               ApiClient:     apiClient,
+               RegexEnricher: regexEnricher,
        }, nil
 }
 
diff --git a/backend/plugins/bamboo/models/deploy_build.go 
b/backend/plugins/bamboo/models/deploy_build.go
index dd43bdfb2..a6b0164d1 100644
--- a/backend/plugins/bamboo/models/deploy_build.go
+++ b/backend/plugins/bamboo/models/deploy_build.go
@@ -36,9 +36,9 @@ type BambooDeployBuild struct {
        FinishedDate          *time.Time `json:"finishedDate"`
        ReasonSummary         string     `json:"reasonSummary"`
 
-       ProjectKey string `json:"project_key" gorm:"index"`
-       PlanKey    string `json:"plan_key" gorm:"index"`
-
+       ProjectKey  string `json:"project_key" gorm:"index"`
+       PlanKey     string `json:"plan_key" gorm:"index"`
+       Environment string `gorm:"type:varchar(255)"`
        ApiBambooOperations
        common.NoPKModel
 }
diff --git a/backend/plugins/bamboo/models/job_build.go 
b/backend/plugins/bamboo/models/job_build.go
index 326201c0c..1478df0c9 100644
--- a/backend/plugins/bamboo/models/job_build.go
+++ b/backend/plugins/bamboo/models/job_build.go
@@ -63,6 +63,8 @@ type BambooJobBuild struct {
        ReasonSummary            string     `json:"reasonSummary"`
        State                    string     `json:"state"`
        BuildState               string     `json:"buildState"`
+       Type                     string     `gorm:"type:varchar(255)"`
+       Environment              string     `gorm:"type:varchar(255)"`
        JobResultKey             string
        common.NoPKModel
 }
diff --git 
a/backend/plugins/bamboo/models/migrationscripts/20230419_add_type_and_environment.go
 
b/backend/plugins/bamboo/models/migrationscripts/20230419_add_type_and_environment.go
new file mode 100644
index 000000000..e3a71a942
--- /dev/null
+++ 
b/backend/plugins/bamboo/models/migrationscripts/20230419_add_type_and_environment.go
@@ -0,0 +1,64 @@
+/*
+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/core/context"
+       "github.com/apache/incubator-devlake/core/errors"
+       "github.com/apache/incubator-devlake/helpers/migrationhelper"
+)
+
+type addTypeAndEnvironment struct{}
+
+type deployBuild20230419 struct {
+       Environment string `gorm:"type:varchar(255)"`
+}
+
+func (deployBuild20230419) TableName() string {
+       return "_tool_bamboo_deploy_build"
+}
+
+type jobBuild20230419 struct {
+       Type        string `gorm:"type:varchar(255)"`
+       Environment string `gorm:"type:varchar(255)"`
+}
+
+func (jobBuild20230419) TableName() string {
+       return "_tool_bamboo_job_builds"
+}
+
+type planBuild20230419 struct {
+       Type        string `gorm:"type:varchar(255)"`
+       Environment string `gorm:"type:varchar(255)"`
+}
+
+func (planBuild20230419) TableName() string {
+       return "_tool_bamboo_plan_builds"
+}
+
+func (u *addTypeAndEnvironment) Up(baseRes context.BasicRes) errors.Error {
+       return migrationhelper.AutoMigrateTables(baseRes, &jobBuild20230419{}, 
&planBuild20230419{}, &deployBuild20230419{})
+}
+
+func (*addTypeAndEnvironment) Version() uint64 {
+       return 20230419141352
+}
+
+func (*addTypeAndEnvironment) Name() string {
+       return "add type and environment to bamboo build tables"
+}
diff --git a/backend/plugins/bamboo/models/migrationscripts/register.go 
b/backend/plugins/bamboo/models/migrationscripts/register.go
index d6c907212..1d63cccba 100644
--- a/backend/plugins/bamboo/models/migrationscripts/register.go
+++ b/backend/plugins/bamboo/models/migrationscripts/register.go
@@ -26,5 +26,6 @@ func All() []plugin.MigrationScript {
        return []plugin.MigrationScript{
                new(addInitTables),
                new(addConnectionIdToTransformationRule),
+               new(addTypeAndEnvironment),
        }
 }
diff --git a/backend/plugins/bamboo/models/plan_build.go 
b/backend/plugins/bamboo/models/plan_build.go
index a80c2e4e5..d4684a741 100644
--- a/backend/plugins/bamboo/models/plan_build.go
+++ b/backend/plugins/bamboo/models/plan_build.go
@@ -60,6 +60,8 @@ type BambooPlanBuild struct {
        ReasonSummary            string     `json:"reasonSummary"`
        State                    string     `json:"state"`
        BuildState               string     `json:"buildState"`
+       Type                     string     `gorm:"type:varchar(255)"`
+       Environment              string     `gorm:"type:varchar(255)"`
        PlanResultKey            string
        common.NoPKModel
 }
diff --git a/backend/plugins/bamboo/tasks/deploy_build_convertor.go 
b/backend/plugins/bamboo/tasks/deploy_build_convertor.go
index d87b70cca..92ac75a5e 100644
--- a/backend/plugins/bamboo/tasks/deploy_build_convertor.go
+++ b/backend/plugins/bamboo/tasks/deploy_build_convertor.go
@@ -20,11 +20,10 @@ package tasks
 import (
        "reflect"
 
-       "github.com/apache/incubator-devlake/core/models/domainlayer/devops"
-
        "github.com/apache/incubator-devlake/core/dal"
        "github.com/apache/incubator-devlake/core/errors"
        "github.com/apache/incubator-devlake/core/models/domainlayer"
+       "github.com/apache/incubator-devlake/core/models/domainlayer/devops"
        "github.com/apache/incubator-devlake/core/models/domainlayer/didgen"
        "github.com/apache/incubator-devlake/core/plugin"
        "github.com/apache/incubator-devlake/helpers/pluginhelper/api"
@@ -93,7 +92,7 @@ func ConvertDeployBuilds(taskCtx plugin.SubTaskContext) 
errors.Error {
                        }
 
                        domainTask.Type = devops.DEPLOYMENT
-                       domainTask.Environment = 
regexEnricher.GetEnrichResult(productionPattern, 
deployBuild.DeploymentVersionName, devops.PRODUCTION)
+                       domainTask.Environment = deployBuild.Environment
 
                        return []interface{}{
                                domainTask,
diff --git a/backend/plugins/bamboo/tasks/deploy_build_extractor.go 
b/backend/plugins/bamboo/tasks/deploy_build_extractor.go
index 385d97cc8..7c8da8e7f 100644
--- a/backend/plugins/bamboo/tasks/deploy_build_extractor.go
+++ b/backend/plugins/bamboo/tasks/deploy_build_extractor.go
@@ -21,6 +21,7 @@ import (
        "encoding/json"
 
        "github.com/apache/incubator-devlake/core/errors"
+       "github.com/apache/incubator-devlake/core/models/domainlayer/devops"
        "github.com/apache/incubator-devlake/core/plugin"
        helper "github.com/apache/incubator-devlake/helpers/pluginhelper/api"
        "github.com/apache/incubator-devlake/plugins/bamboo/models"
@@ -49,6 +50,7 @@ func ExtractDeployBuild(taskCtx plugin.SubTaskContext) 
errors.Error {
 
                        build := res.Convert(data.Options)
                        build.PlanKey = input.PlanKey
+                       build.Environment = 
data.RegexEnricher.ReturnNameIfMatched(devops.PRODUCTION, 
build.DeploymentVersionName)
 
                        return []interface{}{
                                build,
diff --git a/backend/plugins/bamboo/tasks/job_build_convertor.go 
b/backend/plugins/bamboo/tasks/job_build_convertor.go
index da97d4156..8ef924b6d 100644
--- a/backend/plugins/bamboo/tasks/job_build_convertor.go
+++ b/backend/plugins/bamboo/tasks/job_build_convertor.go
@@ -20,11 +20,10 @@ package tasks
 import (
        "reflect"
 
-       "github.com/apache/incubator-devlake/core/models/domainlayer/devops"
-
        "github.com/apache/incubator-devlake/core/dal"
        "github.com/apache/incubator-devlake/core/errors"
        "github.com/apache/incubator-devlake/core/models/domainlayer"
+       "github.com/apache/incubator-devlake/core/models/domainlayer/devops"
        "github.com/apache/incubator-devlake/core/models/domainlayer/didgen"
        "github.com/apache/incubator-devlake/core/plugin"
        "github.com/apache/incubator-devlake/helpers/pluginhelper/api"
@@ -42,13 +41,6 @@ var ConvertJobBuildsMeta = plugin.SubTaskMeta{
 func ConvertJobBuilds(taskCtx plugin.SubTaskContext) errors.Error {
        db := taskCtx.GetDal()
        rawDataSubTaskArgs, data := CreateRawDataSubTaskArgs(taskCtx, 
RAW_JOB_BUILD_TABLE)
-       deploymentPattern := data.Options.DeploymentPattern
-       productionPattern := data.Options.ProductionPattern
-       regexEnricher := api.NewRegexEnricher()
-       err := regexEnricher.AddRegexp(deploymentPattern, productionPattern)
-       if err != nil {
-               return err
-       }
        cursor, err := db.Cursor(
                dal.From(&models.BambooJobBuild{}),
                dal.Where("connection_id = ? and project_key = ?", 
data.Options.ConnectionId, data.Options.ProjectKey))
@@ -87,8 +79,8 @@ func ConvertJobBuilds(taskCtx plugin.SubTaskContext) 
errors.Error {
                                }, line.LifeCycleState),
                        }
 
-                       domainJobBuild.Type = 
regexEnricher.GetEnrichResult(deploymentPattern, line.JobName, 
devops.DEPLOYMENT)
-                       domainJobBuild.Environment = 
regexEnricher.GetEnrichResult(productionPattern, line.JobName, 
devops.PRODUCTION)
+                       domainJobBuild.Type = line.Type
+                       domainJobBuild.Environment = line.Environment
 
                        return []interface{}{
                                domainJobBuild,
diff --git a/backend/plugins/bamboo/tasks/job_build_extractor.go 
b/backend/plugins/bamboo/tasks/job_build_extractor.go
index 2f75d371e..893fc46f7 100644
--- a/backend/plugins/bamboo/tasks/job_build_extractor.go
+++ b/backend/plugins/bamboo/tasks/job_build_extractor.go
@@ -22,6 +22,7 @@ import (
        "fmt"
 
        "github.com/apache/incubator-devlake/core/errors"
+       "github.com/apache/incubator-devlake/core/models/domainlayer/devops"
        "github.com/apache/incubator-devlake/core/plugin"
        helper "github.com/apache/incubator-devlake/helpers/pluginhelper/api"
        "github.com/apache/incubator-devlake/plugins/bamboo/models"
@@ -53,6 +54,8 @@ func ExtractJobBuild(taskCtx plugin.SubTaskContext) 
errors.Error {
                        body.PlanKey = plan.PlanKey
                        body.PlanName = plan.PlanName
                        body.PlanBuildKey = fmt.Sprintf("%s-%v", plan.PlanKey, 
body.Number)
+                       body.Type = 
data.RegexEnricher.ReturnNameIfMatched(devops.DEPLOYMENT, body.JobName)
+                       body.Environment = 
data.RegexEnricher.ReturnNameIfMatched(devops.PRODUCTION, body.JobName)
                        results := make([]interface{}, 0)
                        results = append(results, body)
                        for _, v := range res.VcsRevisions.VcsRevision {
diff --git a/backend/plugins/bamboo/tasks/plan_build_convertor.go 
b/backend/plugins/bamboo/tasks/plan_build_convertor.go
index 72a08293b..25818b7e8 100644
--- a/backend/plugins/bamboo/tasks/plan_build_convertor.go
+++ b/backend/plugins/bamboo/tasks/plan_build_convertor.go
@@ -20,11 +20,10 @@ package tasks
 import (
        "reflect"
 
-       "github.com/apache/incubator-devlake/core/models/domainlayer/devops"
-
        "github.com/apache/incubator-devlake/core/dal"
        "github.com/apache/incubator-devlake/core/errors"
        "github.com/apache/incubator-devlake/core/models/domainlayer"
+       "github.com/apache/incubator-devlake/core/models/domainlayer/devops"
        "github.com/apache/incubator-devlake/core/models/domainlayer/didgen"
        "github.com/apache/incubator-devlake/core/plugin"
        "github.com/apache/incubator-devlake/helpers/pluginhelper/api"
@@ -86,8 +85,8 @@ func ConvertPlanBuilds(taskCtx plugin.SubTaskContext) 
errors.Error {
                                }, line.LifeCycleState),
                        }
 
-                       domainPlanBuild.Type = 
regexEnricher.GetEnrichResult(deploymentPattern, line.PlanName, 
devops.DEPLOYMENT)
-                       domainPlanBuild.Environment = 
regexEnricher.GetEnrichResult(productionPattern, line.PlanName, 
devops.PRODUCTION)
+                       domainPlanBuild.Type = line.Type
+                       domainPlanBuild.Environment = line.Environment
 
                        return []interface{}{
                                domainPlanBuild,
diff --git a/backend/plugins/bamboo/tasks/plan_build_extractor.go 
b/backend/plugins/bamboo/tasks/plan_build_extractor.go
index eebb4ccb5..34cd30b86 100644
--- a/backend/plugins/bamboo/tasks/plan_build_extractor.go
+++ b/backend/plugins/bamboo/tasks/plan_build_extractor.go
@@ -21,6 +21,7 @@ import (
        "encoding/json"
 
        "github.com/apache/incubator-devlake/core/errors"
+       "github.com/apache/incubator-devlake/core/models/domainlayer/devops"
        "github.com/apache/incubator-devlake/core/plugin"
        helper "github.com/apache/incubator-devlake/helpers/pluginhelper/api"
        "github.com/apache/incubator-devlake/plugins/bamboo/models"
@@ -49,6 +50,8 @@ func ExtractPlanBuild(taskCtx plugin.SubTaskContext) 
errors.Error {
                        body.ConnectionId = data.Options.ConnectionId
                        body.ProjectKey = data.Options.ProjectKey
                        body.PlanKey = plan.PlanKey
+                       body.Type = 
data.RegexEnricher.ReturnNameIfMatched(devops.DEPLOYMENT, body.PlanName)
+                       body.Environment = 
data.RegexEnricher.ReturnNameIfMatched(devops.PRODUCTION, body.PlanName)
 
                        results := make([]interface{}, 0)
                        results = append(results, body)
diff --git a/backend/plugins/bamboo/tasks/task_data.go 
b/backend/plugins/bamboo/tasks/task_data.go
index 6859edd3e..da8f05221 100644
--- a/backend/plugins/bamboo/tasks/task_data.go
+++ b/backend/plugins/bamboo/tasks/task_data.go
@@ -24,8 +24,9 @@ import (
 )
 
 type BambooTaskData struct {
-       Options   *models.BambooOptions
-       ApiClient *helper.ApiAsyncClient
+       Options       *models.BambooOptions
+       ApiClient     *helper.ApiAsyncClient
+       RegexEnricher *helper.RegexEnricher
 }
 
 func DecodeAndValidateTaskOptions(options map[string]interface{}) 
(*models.BambooOptions, errors.Error) {

Reply via email to