in backend/plugins/jenkins/tasks/build_cicd_convertor.go [42:139]
func ConvertBuildsToCICD(taskCtx plugin.SubTaskContext) (err errors.Error) {
db := taskCtx.GetDal()
data := taskCtx.GetData().(*JenkinsTaskData)
clauses := []dal.Clause{
dal.From("_tool_jenkins_builds"),
dal.Where(`_tool_jenkins_builds.connection_id = ?
and _tool_jenkins_builds.job_path = ?
and _tool_jenkins_builds.job_name = ?`,
data.Options.ConnectionId, data.Options.JobPath, data.Options.JobName),
}
cursor, err := db.Cursor(clauses...)
if err != nil {
return err
}
defer cursor.Close()
buildIdGen := didgen.NewDomainIdGenerator(&models.JenkinsBuild{})
jobIdGen := didgen.NewDomainIdGenerator(&models.JenkinsJob{})
converter, err := api.NewDataConverter(api.DataConverterArgs{
InputRowType: reflect.TypeOf(models.JenkinsBuild{}),
Input: cursor,
RawDataSubTaskArgs: api.RawDataSubTaskArgs{
Params: JenkinsApiParams{
ConnectionId: data.Options.ConnectionId,
FullName: data.Options.JobFullName,
},
Ctx: taskCtx,
Table: RAW_BUILD_TABLE,
},
Convert: func(inputRow interface{}) ([]interface{}, errors.Error) {
jenkinsBuild := inputRow.(*models.JenkinsBuild)
durationSec := int64(jenkinsBuild.Duration / 1000)
jenkinsPipelineResult := ""
jenkinsPipelineStatus := ""
var jenkinsPipelineFinishedDate *time.Time
results := make([]interface{}, 0)
if jenkinsBuild.Result == "SUCCESS" {
jenkinsPipelineResult = devops.SUCCESS
} else if jenkinsBuild.Result == "FAILURE" {
jenkinsPipelineResult = devops.FAILURE
} else {
jenkinsPipelineResult = devops.ABORT
}
if jenkinsBuild.Building {
jenkinsPipelineStatus = devops.IN_PROGRESS
jenkinsPipelineResult = ""
} else {
jenkinsPipelineStatus = devops.DONE
finishTime := jenkinsBuild.StartTime.Add(time.Duration(durationSec * int64(time.Second)))
jenkinsPipelineFinishedDate = &finishTime
}
jenkinsPipeline := &devops.CICDPipeline{
DomainEntity: domainlayer.DomainEntity{
Id: buildIdGen.Generate(jenkinsBuild.ConnectionId, jenkinsBuild.FullName),
},
Name: jenkinsBuild.FullName,
Result: jenkinsPipelineResult,
Status: jenkinsPipelineStatus,
FinishedDate: jenkinsPipelineFinishedDate,
DurationSec: uint64(durationSec),
CreatedDate: jenkinsBuild.StartTime,
CicdScopeId: jobIdGen.Generate(jenkinsBuild.ConnectionId, data.Options.JobFullName),
Type: data.RegexEnricher.ReturnNameIfMatched(devops.DEPLOYMENT, jenkinsBuild.FullName),
Environment: data.RegexEnricher.ReturnNameIfOmittedOrMatched(devops.PRODUCTION, jenkinsBuild.FullName),
}
jenkinsPipeline.RawDataOrigin = jenkinsBuild.RawDataOrigin
results = append(results, jenkinsPipeline)
if !jenkinsBuild.HasStages {
jenkinsTask := &devops.CICDTask{
DomainEntity: domainlayer.DomainEntity{
Id: buildIdGen.Generate(jenkinsBuild.ConnectionId, jenkinsBuild.FullName),
},
Name: data.Options.JobFullName,
Result: jenkinsPipelineResult,
Status: jenkinsPipelineStatus,
DurationSec: uint64(durationSec),
StartedDate: jenkinsBuild.StartTime,
FinishedDate: jenkinsPipelineFinishedDate,
CicdScopeId: jobIdGen.Generate(jenkinsBuild.ConnectionId, data.Options.JobFullName),
Type: data.RegexEnricher.ReturnNameIfMatched(devops.DEPLOYMENT, jenkinsBuild.FullName),
Environment: data.RegexEnricher.ReturnNameIfOmittedOrMatched(devops.PRODUCTION, jenkinsBuild.FullName),
PipelineId: buildIdGen.Generate(jenkinsBuild.ConnectionId, jenkinsBuild.FullName),
}
results = append(results, jenkinsTask)
}
return results, nil
},
})
if err != nil {
return err
}
return converter.Execute()
}