This is an automated email from the ASF dual-hosted git repository.
abeizn 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 c96f899b fix(jenkins): modify for dora
c96f899b is described below
commit c96f899b6ee564d973ae0c3617411fcb14b3e56e
Author: Yingchu Chen <[email protected]>
AuthorDate: Thu Sep 8 12:38:56 2022 +0800
fix(jenkins): modify for dora
relate to #2957
---
models/domainlayer/devops/cicd_task.go | 1 +
.../{register.go => 20220908_modfiy_cicd_tasks.go} | 54 +++++++-------
models/migrationscripts/register.go | 1 +
plugins/jenkins/impl/impl.go | 1 +
plugins/jenkins/tasks/build_cicd_convertor.go | 26 ++++++-
plugins/jenkins/tasks/build_stages_enricher.go | 82 ++++++++++++++++++++++
6 files changed, 138 insertions(+), 27 deletions(-)
diff --git a/models/domainlayer/devops/cicd_task.go
b/models/domainlayer/devops/cicd_task.go
index e0858827..09631cf8 100644
--- a/models/domainlayer/devops/cicd_task.go
+++ b/models/domainlayer/devops/cicd_task.go
@@ -13,6 +13,7 @@ type CICDTask struct {
Result string `gorm:"type:varchar(100)"`
Status string `gorm:"type:varchar(100)"`
Type string `gorm:"type:varchar(100);comment: to indicate this
is CI or CD"`
+ Environment string `gorm:"type:varchar(255)"`
DurationSec uint64
StartedDate time.Time
FinishedDate *time.Time
diff --git a/models/migrationscripts/register.go
b/models/migrationscripts/20220908_modfiy_cicd_tasks.go
similarity index 53%
copy from models/migrationscripts/register.go
copy to models/migrationscripts/20220908_modfiy_cicd_tasks.go
index fc6b2cb3..7a265f08 100644
--- a/models/migrationscripts/register.go
+++ b/models/migrationscripts/20220908_modfiy_cicd_tasks.go
@@ -17,30 +17,34 @@ limitations under the License.
package migrationscripts
-import "github.com/apache/incubator-devlake/migration"
-
-// All return all the migration scripts of framework
-func All() []migration.Script {
- return []migration.Script{
- new(addFrameTables),
- new(renameStepToStage),
- new(addSubtasksField),
- new(updateBlueprintMode),
- new(renameTasksToPlan),
- new(addDomainTables),
- new(addTypeField),
- new(commitfileComponent),
- new(removeNotes),
- new(addProjectMapping),
- new(renameColumnsOfPullRequestIssue),
- new(addNoPKModelToCommitParent),
- new(addSubtasksTable),
- new(addCICD),
- new(renameColumnsOfPrCommentIssueComment),
- new(modifyTablesForDora),
- new(addTypeFieldInBoard),
- new(modifyPipeline),
- new(encryptBLueprint),
- new(encryptPipeline),
+import (
+ "context"
+
+ "gorm.io/gorm"
+)
+
+type modifyCICDTasks struct{}
+
+func (*modifyCICDTasks) Up(ctx context.Context, db *gorm.DB) error {
+ err := db.Migrator().AutoMigrate(CICDTask0905{})
+ if err != nil {
+ return err
}
+ return nil
+}
+
+func (*modifyCICDTasks) Version() uint64 {
+ return 20220909232735
+}
+
+func (*modifyCICDTasks) Name() string {
+ return "modify cicd tasks"
+}
+
+type CICDTask0905 struct {
+ Environment string `gorm:"type:varchar(255)"`
+}
+
+func (CICDTask0905) TableName() string {
+ return "cicd_tasks"
}
diff --git a/models/migrationscripts/register.go
b/models/migrationscripts/register.go
index fc6b2cb3..ceef2660 100644
--- a/models/migrationscripts/register.go
+++ b/models/migrationscripts/register.go
@@ -42,5 +42,6 @@ func All() []migration.Script {
new(modifyPipeline),
new(encryptBLueprint),
new(encryptPipeline),
+ new(modifyCICDTasks),
}
}
diff --git a/plugins/jenkins/impl/impl.go b/plugins/jenkins/impl/impl.go
index ae9e2b23..a302791d 100644
--- a/plugins/jenkins/impl/impl.go
+++ b/plugins/jenkins/impl/impl.go
@@ -72,6 +72,7 @@ func (plugin Jenkins) SubTaskMetas() []core.SubTaskMeta {
tasks.ExtractApiBuildsMeta,
tasks.CollectApiStagesMeta,
tasks.ExtractApiStagesMeta,
+ tasks.EnrichApiBuildWithStagesMeta,
tasks.ConvertBuildsToCICDMeta,
tasks.ConvertStagesMeta,
tasks.ConvertBuildReposMeta,
diff --git a/plugins/jenkins/tasks/build_cicd_convertor.go
b/plugins/jenkins/tasks/build_cicd_convertor.go
index 10fff718..843f8b71 100644
--- a/plugins/jenkins/tasks/build_cicd_convertor.go
+++ b/plugins/jenkins/tasks/build_cicd_convertor.go
@@ -89,7 +89,7 @@ func ConvertBuildsToCICD(taskCtx core.SubTaskContext) error {
Id: fmt.Sprintf("%s:%s:%d:%s",
"jenkins", "JenkinsPipeline", jenkinsBuild.ConnectionId,
jenkinsBuild.DisplayName),
},
- Name: jenkinsBuild.DisplayName,
+ Name: jenkinsBuild.JobName,
Result: jenkinsPipelineResult,
Status: jenkinsPipelineStatus,
FinishedDate: jenkinsPipelineFinishedDate,
@@ -107,10 +107,32 @@ func ConvertBuildsToCICD(taskCtx core.SubTaskContext)
error {
}
results = append(results,
domainPipelineRelation)
}
-
jenkinsPipeline.RawDataOrigin =
jenkinsBuild.RawDataOrigin
results = append(results, jenkinsPipeline)
+ if !jenkinsBuild.HasStages {
+ jenkinsTask := &devops.CICDTask{
+ DomainEntity: domainlayer.DomainEntity{
+ Id: fmt.Sprintf("%s:%s:%d:%s",
"jenkins", "JenkinsTask", jenkinsBuild.ConnectionId,
+
jenkinsBuild.DisplayName),
+ },
+ Name: jenkinsBuild.JobName,
+ Result: jenkinsPipelineResult,
+ Status: jenkinsPipelineStatus,
+ Type: "CI/CD",
+ DurationSec: uint64(durationSec),
+ StartedDate: jenkinsBuild.StartTime,
+ FinishedDate:
jenkinsPipelineFinishedDate,
+ }
+
+ jenkinsTask.PipelineId =
fmt.Sprintf("%s:%s:%d:%s", "jenkins", "JenkinsPipeline",
+ jenkinsBuild.ConnectionId,
jenkinsBuild.DisplayName)
+
+ jenkinsTask.RawDataOrigin =
jenkinsBuild.RawDataOrigin
+ results = append(results, jenkinsTask)
+
+ }
+
return results, nil
},
})
diff --git a/plugins/jenkins/tasks/build_stages_enricher.go
b/plugins/jenkins/tasks/build_stages_enricher.go
new file mode 100644
index 00000000..e0af3128
--- /dev/null
+++ b/plugins/jenkins/tasks/build_stages_enricher.go
@@ -0,0 +1,82 @@
+/*
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements. See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package tasks
+
+import (
+ "github.com/apache/incubator-devlake/plugins/core"
+ "github.com/apache/incubator-devlake/plugins/core/dal"
+ "github.com/apache/incubator-devlake/plugins/jenkins/models"
+ "strconv"
+ "strings"
+)
+
+// this struct should be moved to `gitub_api_common.go`
+
+var EnrichApiBuildWithStagesMeta = core.SubTaskMeta{
+ Name: "enrichApiBuildWithStages",
+ EntryPoint: EnrichApiBuildWithStages,
+ EnabledByDefault: true,
+ Description: "Enrich jenkins build with stages",
+ DomainTypes: []string{core.DOMAIN_TYPE_CICD},
+}
+
+func EnrichApiBuildWithStages(taskCtx core.SubTaskContext) error {
+ data := taskCtx.GetData().(*JenkinsTaskData)
+ db := taskCtx.GetDal()
+ clauses := []dal.Clause{
+ dal.Select("distinct build_name"),
+ dal.From(&models.JenkinsStage{}),
+ dal.Where("connection_id = ?", data.Options.ConnectionId),
+ dal.Groupby("build_name"),
+ }
+ cursor, err := db.Cursor(clauses...)
+ defer cursor.Close()
+ taskCtx.SetProgress(0, -1)
+
+ for cursor.Next() {
+ var buildName string
+ err = cursor.Scan(&buildName)
+ if err != nil {
+ return err
+ }
+ if buildName == "" {
+ continue
+ }
+ build := &models.JenkinsBuild{}
+ build.ConnectionId = data.Options.ConnectionId
+ str := strings.Split(buildName, "#")
+ build.JobName = strings.TrimSpace(str[0])
+ number, err := strconv.Atoi(strings.TrimSpace(str[1]))
+ if err != nil {
+ return err
+ }
+ build.Number = int64(number)
+ err = db.First(build)
+ if err != nil {
+ return err
+ }
+ build.HasStages = true
+
+ err = db.Update(build)
+ if err != nil {
+ return err
+ }
+ taskCtx.IncProgress(1)
+ }
+ return nil
+}