You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@devlake.apache.org by ma...@apache.org on 2023/04/23 03:47:48 UTC

[incubator-devlake] branch main updated: refactor: bamboo change lead time (#4991)

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 <li...@merico.dev>
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) {