Skip to content

Commit bef3eb3

Browse files
feat: jira issue validator plugin added (#2968)
* first commit * second commit * jira issue validator plugin sql script * sending env variables on cd * sql refactoring * icon for plugin-jira-validation added * extra bracket removed from dtrack plugin name * jiraId env variable changed * icon deleted * wire generated * jira issue updater and validator plugin * jira status fix * plugin fix * plugin metadata updated * message change * jira issue updater plugin updated
1 parent b6c37c3 commit bef3eb3

14 files changed

+242
-59
lines changed

client/gitSensor/GitSensorClient.go

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -60,12 +60,13 @@ type HeadRequest struct {
6060
type SourceType string
6161

6262
type CiPipelineMaterial struct {
63-
Id int
64-
GitMaterialId int
65-
Type SourceType
66-
Value string
67-
Active bool
68-
GitCommit GitCommit
63+
Id int
64+
GitMaterialId int
65+
Type SourceType
66+
Value string
67+
Active bool
68+
GitCommit GitCommit
69+
ExtraEnvironmentVariables map[string]string // extra env variables which will be used for CI
6970
}
7071

7172
type GitMaterial struct {
@@ -100,6 +101,11 @@ type GitCommit struct {
100101
WebhookData *WebhookData
101102
}
102103

104+
type WebhookAndCiData struct {
105+
ExtraEnvironmentVariables map[string]string `json:"extraEnvironmentVariables"` // extra env variables which will be used for CI
106+
WebhookData *WebhookData `json:"webhookData"`
107+
}
108+
103109
type WebhookData struct {
104110
Id int `json:"id"`
105111
EventActionType string `json:"eventActionType"`
@@ -133,7 +139,8 @@ type RefreshGitMaterialResponse struct {
133139
}
134140

135141
type WebhookDataRequest struct {
136-
Id int `json:"id"`
142+
Id int `json:"id"`
143+
CiPipelineMaterialId int `json:"ciPipelineMaterialId"`
137144
}
138145

139146
type WebhookEventConfigRequest struct {
@@ -219,7 +226,7 @@ type GitSensorClient interface {
219226
SavePipelineMaterial(material []*CiPipelineMaterial) (materialRes []*CiPipelineMaterial, err error)
220227
RefreshGitMaterial(req *RefreshGitMaterialRequest) (refreshRes *RefreshGitMaterialResponse, err error)
221228

222-
GetWebhookData(req *WebhookDataRequest) (*WebhookData, error)
229+
GetWebhookData(req *WebhookDataRequest) (*WebhookAndCiData, error)
223230

224231
GetAllWebhookEventConfigForHost(req *WebhookEventConfigRequest) (webhookEvents []*WebhookEventConfig, err error)
225232
GetWebhookEventConfig(req *WebhookEventConfigRequest) (webhookEvent *WebhookEventConfig, err error)
@@ -376,8 +383,8 @@ func (session GitSensorClientImpl) RefreshGitMaterial(req *RefreshGitMaterialReq
376383
return refreshRes, err
377384
}
378385

379-
func (session GitSensorClientImpl) GetWebhookData(req *WebhookDataRequest) (*WebhookData, error) {
380-
webhookData := new(WebhookData)
386+
func (session GitSensorClientImpl) GetWebhookData(req *WebhookDataRequest) (*WebhookAndCiData, error) {
387+
webhookData := new(WebhookAndCiData)
381388
request := &ClientRequest{ResponseBody: webhookData, Method: "GET", RequestBody: req, Path: "webhook/data"}
382389
_, _, err := session.doRequest(request)
383390
return webhookData, err

cmd/external-app/wire_gen.go

Lines changed: 1 addition & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pkg/bean/app.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -215,8 +215,9 @@ type CiRegexPatchRequest struct {
215215
}
216216

217217
type GitCiTriggerRequest struct {
218-
CiPipelineMaterial CiPipelineMaterial `json:"ciPipelineMaterial" validate:"required"`
219-
TriggeredBy int32 `json:"triggeredBy"`
218+
CiPipelineMaterial CiPipelineMaterial `json:"ciPipelineMaterial" validate:"required"`
219+
TriggeredBy int32 `json:"triggeredBy"`
220+
ExtraEnvironmentVariables map[string]string `json:"extraEnvironmentVariables"` // extra env variables which will be used for CI
220221
}
221222

222223
type GitCommit struct {

pkg/git/GitWebhookService.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -70,8 +70,9 @@ func (impl *GitWebhookServiceImpl) HandleGitWebhook(gitWebhookRequest gitSensor.
7070
}
7171

7272
resp, err := impl.ciHandler.HandleCIWebhook(bean.GitCiTriggerRequest{
73-
CiPipelineMaterial: ciPipelineMaterial,
74-
TriggeredBy: 1, // Automatic trigger, userId is 1
73+
CiPipelineMaterial: ciPipelineMaterial,
74+
TriggeredBy: 1, // Automatic trigger, userId is 1
75+
ExtraEnvironmentVariables: gitWebhookRequest.ExtraEnvironmentVariables,
7576
})
7677
if err != nil {
7778
impl.logger.Errorw("failed HandleCIWebhook", "err", err)

pkg/pipeline/CiHandler.go

Lines changed: 35 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -170,11 +170,12 @@ type GitTriggerInfoResponse struct {
170170
}
171171

172172
type Trigger struct {
173-
PipelineId int
174-
CommitHashes map[int]bean.GitCommit
175-
CiMaterials []*pipelineConfig.CiPipelineMaterial
176-
TriggeredBy int32
177-
InvalidateCache bool
173+
PipelineId int
174+
CommitHashes map[int]bean.GitCommit
175+
CiMaterials []*pipelineConfig.CiPipelineMaterial
176+
TriggeredBy int32
177+
InvalidateCache bool
178+
ExtraEnvironmentVariables map[string]string // extra env variables which will be used for CI
178179
}
179180

180181
const WorkflowCancel = "CANCELLED"
@@ -184,16 +185,17 @@ const Starting = "Starting"
184185

185186
func (impl *CiHandlerImpl) HandleCIManual(ciTriggerRequest bean.CiTriggerRequest) (int, error) {
186187
impl.Logger.Debugw("HandleCIManual for pipeline ", "PipelineId", ciTriggerRequest.PipelineId)
187-
commitHashes, err := impl.buildManualTriggerCommitHashes(ciTriggerRequest)
188+
commitHashes, extraEnvironmentVariables, err := impl.buildManualTriggerCommitHashes(ciTriggerRequest)
188189
if err != nil {
189190
return 0, err
190191
}
191192
trigger := Trigger{
192-
PipelineId: ciTriggerRequest.PipelineId,
193-
CommitHashes: commitHashes,
194-
CiMaterials: nil,
195-
TriggeredBy: ciTriggerRequest.TriggeredBy,
196-
InvalidateCache: ciTriggerRequest.InvalidateCache,
193+
PipelineId: ciTriggerRequest.PipelineId,
194+
CommitHashes: commitHashes,
195+
CiMaterials: nil,
196+
TriggeredBy: ciTriggerRequest.TriggeredBy,
197+
InvalidateCache: ciTriggerRequest.InvalidateCache,
198+
ExtraEnvironmentVariables: extraEnvironmentVariables,
197199
}
198200
id, err := impl.ciService.TriggerCiPipeline(trigger)
199201
if err != nil {
@@ -230,10 +232,11 @@ func (impl *CiHandlerImpl) HandleCIWebhook(gitCiTriggerRequest bean.GitCiTrigger
230232
}
231233

232234
trigger := Trigger{
233-
PipelineId: ciPipeline.Id,
234-
CommitHashes: commitHashes,
235-
CiMaterials: ciMaterials,
236-
TriggeredBy: gitCiTriggerRequest.TriggeredBy,
235+
PipelineId: ciPipeline.Id,
236+
CommitHashes: commitHashes,
237+
CiMaterials: ciMaterials,
238+
TriggeredBy: gitCiTriggerRequest.TriggeredBy,
239+
ExtraEnvironmentVariables: gitCiTriggerRequest.ExtraEnvironmentVariables,
237240
}
238241
id, err := impl.ciService.TriggerCiPipeline(trigger)
239242
if err != nil {
@@ -868,37 +871,38 @@ func SetGitCommitValuesForBuildingCommitHash(ciMaterial *pipelineConfig.CiPipeli
868871
return newGitCommit
869872
}
870873

871-
func (impl *CiHandlerImpl) buildManualTriggerCommitHashes(ciTriggerRequest bean.CiTriggerRequest) (map[int]bean.GitCommit, error) {
874+
func (impl *CiHandlerImpl) buildManualTriggerCommitHashes(ciTriggerRequest bean.CiTriggerRequest) (map[int]bean.GitCommit, map[string]string, error) {
872875
commitHashes := map[int]bean.GitCommit{}
876+
extraEnvironmentVariables := make(map[string]string)
873877
for _, ciPipelineMaterial := range ciTriggerRequest.CiPipelineMaterial {
874878

875879
pipeLineMaterialFromDb, err := impl.ciPipelineMaterialRepository.GetById(ciPipelineMaterial.Id)
876880
if err != nil {
877881
impl.Logger.Errorw("err in fetching pipeline material by id", "err", err)
878-
return map[int]bean.GitCommit{}, err
882+
return map[int]bean.GitCommit{}, nil, err
879883
}
880884

881885
pipelineType := pipeLineMaterialFromDb.Type
882886
if pipelineType == pipelineConfig.SOURCE_TYPE_BRANCH_FIXED {
883887
gitCommit, err := impl.BuildManualTriggerCommitHashesForSourceTypeBranchFix(ciPipelineMaterial, pipeLineMaterialFromDb)
884888
if err != nil {
885889
impl.Logger.Errorw("err", "err", err)
886-
return map[int]bean.GitCommit{}, err
890+
return map[int]bean.GitCommit{}, nil, err
887891
}
888892
commitHashes[ciPipelineMaterial.Id] = gitCommit
889893

890894
} else if pipelineType == pipelineConfig.SOURCE_TYPE_WEBHOOK {
891-
gitCommit, err := impl.BuildManualTriggerCommitHashesForSourceTypeWebhook(ciPipelineMaterial, pipeLineMaterialFromDb)
895+
gitCommit, extraEnvVariables, err := impl.BuildManualTriggerCommitHashesForSourceTypeWebhook(ciPipelineMaterial, pipeLineMaterialFromDb)
892896
if err != nil {
893897
impl.Logger.Errorw("err", "err", err)
894-
return map[int]bean.GitCommit{}, err
898+
return map[int]bean.GitCommit{}, nil, err
895899
}
896900
commitHashes[ciPipelineMaterial.Id] = gitCommit
897-
901+
extraEnvironmentVariables = extraEnvVariables
898902
}
899903

900904
}
901-
return commitHashes, nil
905+
return commitHashes, extraEnvironmentVariables, nil
902906
}
903907

904908
func (impl *CiHandlerImpl) BuildManualTriggerCommitHashesForSourceTypeBranchFix(ciPipelineMaterial bean.CiPipelineMaterial, pipeLineMaterialFromDb *pipelineConfig.CiPipelineMaterial) (bean.GitCommit, error) {
@@ -931,19 +935,21 @@ func (impl *CiHandlerImpl) BuildManualTriggerCommitHashesForSourceTypeBranchFix(
931935
return gitCommit, nil
932936
}
933937

934-
func (impl *CiHandlerImpl) BuildManualTriggerCommitHashesForSourceTypeWebhook(ciPipelineMaterial bean.CiPipelineMaterial, pipeLineMaterialFromDb *pipelineConfig.CiPipelineMaterial) (bean.GitCommit, error) {
938+
func (impl *CiHandlerImpl) BuildManualTriggerCommitHashesForSourceTypeWebhook(ciPipelineMaterial bean.CiPipelineMaterial, pipeLineMaterialFromDb *pipelineConfig.CiPipelineMaterial) (bean.GitCommit, map[string]string, error) {
935939
webhookDataInput := ciPipelineMaterial.GitCommit.WebhookData
936940

937941
// fetch webhook data on the basis of Id
938942
webhookDataRequest := &gitSensor.WebhookDataRequest{
939-
Id: webhookDataInput.Id,
943+
Id: webhookDataInput.Id,
944+
CiPipelineMaterialId: ciPipelineMaterial.Id,
940945
}
941946

942-
webhookData, err := impl.gitSensorClient.GetWebhookData(webhookDataRequest)
947+
webhookAndCiData, err := impl.gitSensorClient.GetWebhookData(webhookDataRequest)
943948
if err != nil {
944949
impl.Logger.Errorw("err", "err", err)
945-
return bean.GitCommit{}, err
950+
return bean.GitCommit{}, nil, err
946951
}
952+
webhookData := webhookAndCiData.WebhookData
947953

948954
// if webhook event is of merged type, then fetch latest commit for target branch
949955
if webhookData.EventActionType == bean.WEBHOOK_EVENT_MERGED_ACTION_TYPE {
@@ -952,7 +958,7 @@ func (impl *CiHandlerImpl) BuildManualTriggerCommitHashesForSourceTypeWebhook(ci
952958
targetBranchName := webhookData.Data[bean.WEBHOOK_SELECTOR_TARGET_BRANCH_NAME_NAME]
953959
if targetBranchName == "" {
954960
impl.Logger.Error("target branch not found from webhook data")
955-
return bean.GitCommit{}, err
961+
return bean.GitCommit{}, nil, err
956962
}
957963

958964
// get latest commit hash for target branch
@@ -965,7 +971,7 @@ func (impl *CiHandlerImpl) BuildManualTriggerCommitHashesForSourceTypeWebhook(ci
965971

966972
if err != nil {
967973
impl.Logger.Errorw("err", "err", err)
968-
return bean.GitCommit{}, err
974+
return bean.GitCommit{}, nil, err
969975
}
970976

971977
// update webhookData (local) with target latest hash
@@ -986,7 +992,7 @@ func (impl *CiHandlerImpl) BuildManualTriggerCommitHashesForSourceTypeWebhook(ci
986992
},
987993
}
988994

989-
return gitCommit, nil
995+
return gitCommit, webhookAndCiData.ExtraEnvironmentVariables, nil
990996
}
991997

992998
func (impl *CiHandlerImpl) getLastSeenCommit(ciMaterialId int) (bean.GitCommit, error) {

pkg/pipeline/CiService.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -482,6 +482,7 @@ func (impl *CiServiceImpl) buildWfRequestForCiPipeline(pipeline *pipelineConfig.
482482
IgnoreDockerCachePush: impl.ciConfig.IgnoreDockerCacheForCI,
483483
IgnoreDockerCachePull: impl.ciConfig.IgnoreDockerCacheForCI,
484484
CacheInvalidate: trigger.InvalidateCache,
485+
ExtraEnvironmentVariables: trigger.ExtraEnvironmentVariables,
485486
}
486487

487488
if ciWorkflowConfig.LogsBucket == "" {

pkg/pipeline/WorkflowDagExecutor.go

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import (
2323
"fmt"
2424
"github.com/argoproj/gitops-engine/pkg/health"
2525
blob_storage "github.com/devtron-labs/common-lib/blob-storage"
26+
"github.com/devtron-labs/devtron/client/gitSensor"
2627
"github.com/devtron-labs/devtron/util/argo"
2728
"go.opentelemetry.io/otel"
2829
"strconv"
@@ -101,6 +102,7 @@ type WorkflowDagExecutorImpl struct {
101102
CiTemplateRepository pipelineConfig.CiTemplateRepository
102103
ciWorkflowRepository pipelineConfig.CiWorkflowRepository
103104
appLabelRepository pipelineConfig.AppLabelRepository
105+
gitSensorClient gitSensor.GitSensorClient
104106
}
105107

106108
const (
@@ -165,7 +167,7 @@ func NewWorkflowDagExecutorImpl(Logger *zap.SugaredLogger, pipelineRepository pi
165167
pipelineStatusTimelineService app.PipelineStatusTimelineService,
166168
CiTemplateRepository pipelineConfig.CiTemplateRepository,
167169
ciWorkflowRepository pipelineConfig.CiWorkflowRepository,
168-
appLabelRepository pipelineConfig.AppLabelRepository) *WorkflowDagExecutorImpl {
170+
appLabelRepository pipelineConfig.AppLabelRepository, gitSensorClient gitSensor.GitSensorClient) *WorkflowDagExecutorImpl {
169171
wde := &WorkflowDagExecutorImpl{logger: Logger,
170172
pipelineRepository: pipelineRepository,
171173
cdWorkflowRepository: cdWorkflowRepository,
@@ -196,6 +198,7 @@ func NewWorkflowDagExecutorImpl(Logger *zap.SugaredLogger, pipelineRepository pi
196198
CiTemplateRepository: CiTemplateRepository,
197199
ciWorkflowRepository: ciWorkflowRepository,
198200
appLabelRepository: appLabelRepository,
201+
gitSensorClient: gitSensorClient,
199202
}
200203
err := wde.Subscribe()
201204
if err != nil {
@@ -738,10 +741,33 @@ func (impl *WorkflowDagExecutorImpl) buildWFRequest(runner *pipelineConfig.CdWor
738741

739742
if ciWf != nil && ciWf.GitTriggers != nil {
740743
i := 1
741-
for _, gitTrigger := range ciWf.GitTriggers {
744+
for ciPipelineMaterialId, gitTrigger := range ciWf.GitTriggers {
742745
extraEnvVariables[fmt.Sprintf("%s_%d", GIT_COMMIT_HASH_PREFIX, i)] = gitTrigger.Commit
743746
extraEnvVariables[fmt.Sprintf("%s_%d", GIT_SOURCE_TYPE_PREFIX, i)] = string(gitTrigger.CiConfigureSourceType)
744747
extraEnvVariables[fmt.Sprintf("%s_%d", GIT_SOURCE_VALUE_PREFIX, i)] = gitTrigger.CiConfigureSourceValue
748+
749+
// CODE-BLOCK starts - store extra environment variables if webhook
750+
if gitTrigger.CiConfigureSourceType == pipelineConfig.SOURCE_TYPE_WEBHOOK {
751+
webhookDataId := gitTrigger.WebhookData.Id
752+
if webhookDataId > 0 {
753+
webhookDataRequest := &gitSensor.WebhookDataRequest{
754+
Id: webhookDataId,
755+
CiPipelineMaterialId: ciPipelineMaterialId,
756+
}
757+
webhookAndCiData, err := impl.gitSensorClient.GetWebhookData(webhookDataRequest)
758+
if err != nil {
759+
impl.logger.Errorw("err while getting webhook data from git-sensor", "err", err, "webhookDataRequest", webhookDataRequest)
760+
return nil, err
761+
}
762+
if webhookAndCiData != nil {
763+
for extEnvVariableKey, extEnvVariableVal := range webhookAndCiData.ExtraEnvironmentVariables {
764+
extraEnvVariables[extEnvVariableKey] = extEnvVariableVal
765+
}
766+
}
767+
}
768+
}
769+
// CODE_BLOCK ends
770+
745771
i++
746772
}
747773
extraEnvVariables[GIT_SOURCE_COUNT] = strconv.Itoa(len(ciWf.GitTriggers))

pkg/pipeline/WorkflowService.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,7 @@ type WorkflowRequest struct {
116116
IgnoreDockerCachePull bool `json:"ignoreDockerCachePull"`
117117
CacheInvalidate bool `json:"cacheInvalidate"`
118118
IsPvcMounted bool `json:"IsPvcMounted"`
119+
ExtraEnvironmentVariables map[string]string `json:"extraEnvironmentVariables"`
119120
}
120121

121122
const (
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
DELETE FROM plugin_step_variable WHERE name = 'JiraUsername';
2+
DELETE FROM plugin_step_variable WHERE name = 'JiraPassword';
3+
DELETE FROM plugin_step_variable WHERE name = 'JiraBaseUrl';
4+
DELETE FROM plugin_step_variable WHERE name = 'JiraId';

0 commit comments

Comments
 (0)