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
+}

Reply via email to