Skip to content

Audit trigger #6659

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 24 commits into
base: develop
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
d1c1fb9
audit trigger initial code
prakash100198 Jun 9, 2025
f6f3328
more refactoring in TriggerAuditHook and workflow config snapshot
prakash100198 Jun 10, 2025
d5ef9b2
Merge branch 'develop' into audit-trigger
prakash100198 Jun 10, 2025
f9c6111
script number change
prakash100198 Jun 10, 2025
c57e828
save trigger audit flow completed
prakash100198 Jun 11, 2025
3422597
before saving workflow json compress using CompressionHelper functions
prakash100198 Jun 11, 2025
dae27af
remove unnecessary code
prakash100198 Jun 11, 2025
60393a4
retrigger flow incorporated
prakash100198 Jun 12, 2025
524205a
createWorkflowTemplate -> createWorkflowTemplateAndAuditTrigger
prakash100198 Jun 13, 2025
1c0f741
fix
prakash100198 Jun 13, 2025
38e220d
base64 encode compressed data
prakash100198 Jun 16, 2025
cb6bbeb
set infra config to retriggered ci
prakash100198 Jun 16, 2025
32163c7
Merge branch 'develop' into audit-trigger
prakash100198 Jun 16, 2025
23580f7
make
prakash100198 Jun 16, 2025
58ccedf
small fix
prakash100198 Jun 17, 2025
fd18069
code review incorporate 1
prakash100198 Jun 17, 2025
32a3202
minor bug fix
prakash100198 Jun 18, 2025
df365d2
add debug log
prakash100198 Jun 18, 2025
87fc9bb
remove unwanted code
prakash100198 Jun 18, 2025
259296f
Merge branch 'develop' into audit-trigger
prakash100198 Jun 18, 2025
c6641ec
remove unwanted code
prakash100198 Jun 18, 2025
a2a7e9c
remove comment
prakash100198 Jun 18, 2025
deeb15a
mask DockerPassword, AccessKey , SecretKey, DockerCert in
prakash100198 Jun 18, 2025
6007160
change script number
prakash100198 Jun 18, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion env_gen.json

Large diffs are not rendered by default.

4 changes: 2 additions & 2 deletions env_gen.md
Original file line number Diff line number Diff line change
Expand Up @@ -290,10 +290,10 @@
| DASHBOARD_PORT | string |3000 | Port for dashboard micro-service | | false |
| DEX_HOST | string |http://localhost | | | false |
| DEX_PORT | string |5556 | | | false |
| GIT_SENSOR_PROTOCOL | string |REST | Protocol to connect with git-sensor micro-service | | false |
| GIT_SENSOR_PROTOCOL | string |GRPC | Protocol to connect with git-sensor micro-service | | false |
| GIT_SENSOR_SERVICE_CONFIG | string |{"loadBalancingPolicy":"pick_first"} | git-sensor grpc service config | | false |
| GIT_SENSOR_TIMEOUT | int |0 | Timeout for getting response from the git-sensor | | false |
| GIT_SENSOR_URL | string |127.0.0.1:7070 | git-sensor micro-service url | | false |
| GIT_SENSOR_URL | string |127.0.0.1:7071 | git-sensor micro-service url | | false |
| HELM_CLIENT_URL | string |127.0.0.1:50051 | Kubelink micro-service url | | false |
| KUBELINK_GRPC_MAX_RECEIVE_MSG_SIZE | int |20 | | | false |
| KUBELINK_GRPC_MAX_SEND_MSG_SIZE | int |4 | | | false |
Expand Down
171 changes: 135 additions & 36 deletions pkg/build/trigger/HandlerService.go

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion pkg/build/trigger/HandlerService_ent.go
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,6 @@ func (impl *HandlerServiceImpl) updateCIBuildConfig(ciBuildConfigBean *bean2.CiB
return ciBuildConfigBean
}

func updateBuildPrePostStepDataReq(req *pipelineConfigBean.BuildPrePostStepDataRequest, trigger types.Trigger) *pipelineConfigBean.BuildPrePostStepDataRequest {
func updateBuildPrePostStepDataReq(req *pipelineConfigBean.BuildPrePostStepDataRequest, trigger *types.CiTriggerRequest) *pipelineConfigBean.BuildPrePostStepDataRequest {
return req
}
23 changes: 23 additions & 0 deletions pkg/build/trigger/adaptor/adaptor.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package adaptor

import (
"github.com/devtron-labs/devtron/internal/sql/repository/pipelineConfig"
"time"
)

func GetCiWorkflowFromRefCiWorkflow(refCiWorkflow *pipelineConfig.CiWorkflow, workflowStatus string, triggeredBy int32) *pipelineConfig.CiWorkflow {
return &pipelineConfig.CiWorkflow{
Name: refCiWorkflow.Name,
Status: workflowStatus, // starting CIStage
StartedOn: time.Now(),
CiPipelineId: refCiWorkflow.CiPipelineId,
Namespace: refCiWorkflow.Namespace,
BlobStorageEnabled: refCiWorkflow.BlobStorageEnabled,
GitTriggers: refCiWorkflow.GitTriggers,
CiBuildType: refCiWorkflow.CiBuildType,
TriggeredBy: triggeredBy,
ReferenceCiWorkflowId: refCiWorkflow.Id, // Reference to original workflow
ExecutorType: refCiWorkflow.ExecutorType,
EnvironmentId: refCiWorkflow.EnvironmentId,
}
}
29 changes: 17 additions & 12 deletions pkg/deployment/trigger/devtronApps/HandlerService.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import (
"bufio"
"context"
"github.com/devtron-labs/common-lib/async"
service2 "github.com/devtron-labs/devtron/pkg/workflow/trigger/audit/service"
"os"
"time"

Expand Down Expand Up @@ -90,15 +91,15 @@ prePostWfAndLogsCode.go - code containing pre/post wf handling(abort) and logs r
*/

type HandlerService interface {
TriggerPostStage(request bean.TriggerRequest) (*bean4.ManifestPushTemplate, error)
TriggerPreStage(request bean.TriggerRequest) (*bean4.ManifestPushTemplate, error)
TriggerPostStage(request bean.CdTriggerRequest) (*bean4.ManifestPushTemplate, error)
TriggerPreStage(request bean.CdTriggerRequest) (*bean4.ManifestPushTemplate, error)

TriggerAutoCDOnPreStageSuccess(triggerContext bean.TriggerContext, cdPipelineId, ciArtifactId, workflowId int) error

TriggerStageForBulk(triggerRequest bean.TriggerRequest) error
TriggerStageForBulk(triggerRequest bean.CdTriggerRequest) error

ManualCdTrigger(triggerContext bean.TriggerContext, overrideRequest *bean3.ValuesOverrideRequest, userMetadata *userBean.UserMetadata) (int, string, *bean4.ManifestPushTemplate, error)
TriggerAutomaticDeployment(request bean.TriggerRequest) error
TriggerAutomaticDeployment(request bean.CdTriggerRequest) error

TriggerRelease(ctx context.Context, overrideRequest *bean3.ValuesOverrideRequest, envDeploymentConfig *bean9.DeploymentConfig, triggeredAt time.Time, triggeredBy int32) (releaseNo int, manifestPushTemplate *bean4.ManifestPushTemplate, err error)

Expand Down Expand Up @@ -170,6 +171,7 @@ type HandlerServiceImpl struct {
blobConfigStorageService pipeline.BlobStorageConfigService
deploymentEventHandler app.DeploymentEventHandler
asyncRunnable *async.Runnable
workflowTriggerAuditService service2.WorkflowTriggerAuditService
}

func NewHandlerServiceImpl(logger *zap.SugaredLogger,
Expand Down Expand Up @@ -232,7 +234,9 @@ func NewHandlerServiceImpl(logger *zap.SugaredLogger,
workflowService executor.WorkflowService,
blobConfigStorageService pipeline.BlobStorageConfigService,
deploymentEventHandler app.DeploymentEventHandler,
asyncRunnable *async.Runnable) (*HandlerServiceImpl, error) {
asyncRunnable *async.Runnable,
workflowTriggerAuditService service2.WorkflowTriggerAuditService,
) (*HandlerServiceImpl, error) {
impl := &HandlerServiceImpl{
logger: logger,
cdWorkflowCommonService: cdWorkflowCommonService,
Expand Down Expand Up @@ -293,13 +297,14 @@ func NewHandlerServiceImpl(logger *zap.SugaredLogger,
attributeService: attributeService,
cdWorkflowRunnerService: cdWorkflowRunnerService,

clusterRepository: clusterRepository,
clusterService: clusterService,
ciLogService: ciLogService,
workflowService: workflowService,
blobConfigStorageService: blobConfigStorageService,
deploymentEventHandler: deploymentEventHandler,
asyncRunnable: asyncRunnable,
clusterRepository: clusterRepository,
clusterService: clusterService,
ciLogService: ciLogService,
workflowService: workflowService,
blobConfigStorageService: blobConfigStorageService,
deploymentEventHandler: deploymentEventHandler,
asyncRunnable: asyncRunnable,
workflowTriggerAuditService: workflowTriggerAuditService,
}
config, err := types.GetCdConfig()
if err != nil {
Expand Down
6 changes: 4 additions & 2 deletions pkg/deployment/trigger/devtronApps/bean/bean.go
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ type TriggerEvent struct {
TriggeredAt time.Time
}

type TriggerRequest struct {
type CdTriggerRequest struct {
CdWf *pipelineConfig.CdWorkflow
Pipeline *pipelineConfig.Pipeline
Artifact *repository.CiArtifact
Expand All @@ -51,6 +51,8 @@ type TriggerRequest struct {
WorkflowType bean.WorkflowType
CdWorkflowRunnerId int
TriggerContext
// below fields used for retrigger flow
IsRetrigger bool
}

type TriggerContext struct {
Expand Down Expand Up @@ -82,7 +84,7 @@ const (
)

type TriggerRequirementRequestDto struct {
TriggerRequest TriggerRequest
TriggerRequest CdTriggerRequest
}

type VulnerabilityCheckRequest struct {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ import (
"helm.sh/helm/v3/pkg/chart"
)

func (impl *HandlerServiceImpl) TriggerStageForBulk(triggerRequest bean.TriggerRequest) error {
func (impl *HandlerServiceImpl) TriggerStageForBulk(triggerRequest bean.CdTriggerRequest) error {

preStage, err := impl.pipelineStageService.GetCdStageByCdPipelineIdAndStageType(triggerRequest.Pipeline.Id, repository.PIPELINE_STAGE_TYPE_PRE_CD, false)
if err != nil && err != pg.ErrNoRows {
Expand Down Expand Up @@ -228,7 +228,7 @@ func (impl *HandlerServiceImpl) ManualCdTrigger(triggerContext bean.TriggerConte
overrideRequest.CdWorkflowId = cdWf.Id

_, span = otel.Tracer("orchestrator").Start(ctx, "TriggerPreStage")
triggerRequest := bean.TriggerRequest{
triggerRequest := bean.CdTriggerRequest{
CdWf: cdWf,
Artifact: artifact,
Pipeline: cdPipeline,
Expand Down Expand Up @@ -357,7 +357,7 @@ func (impl *HandlerServiceImpl) ManualCdTrigger(triggerContext bean.TriggerConte
}
}
_, span = otel.Tracer("orchestrator").Start(ctx, "TriggerPostStage")
triggerRequest := bean.TriggerRequest{
triggerRequest := bean.CdTriggerRequest{
CdWf: cdWf,
Pipeline: cdPipeline,
TriggeredBy: overrideRequest.UserId,
Expand All @@ -383,7 +383,7 @@ func isNotHibernateRequest(deploymentType models.DeploymentType) bool {
}

// TODO: write a wrapper to handle auto and manual trigger
func (impl *HandlerServiceImpl) TriggerAutomaticDeployment(request bean.TriggerRequest) error {
func (impl *HandlerServiceImpl) TriggerAutomaticDeployment(request bean.CdTriggerRequest) error {
// in case of manual trigger auth is already applied and for auto triggers there is no need for auth check here
triggeredBy := request.TriggeredBy
pipeline := request.Pipeline
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ func (impl *HandlerServiceImpl) getManifestPushService(storageType string) publi
return manifestPushService
}

func (impl *HandlerServiceImpl) preStageHandlingForTriggerStageInBulk(triggerRequest *bean.TriggerRequest) error {
func (impl *HandlerServiceImpl) preStageHandlingForTriggerStageInBulk(triggerRequest *bean.CdTriggerRequest) error {
return nil
}

Expand Down
35 changes: 4 additions & 31 deletions pkg/deployment/trigger/devtronApps/postStageHandlerCode.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,14 +23,13 @@ import (
"github.com/devtron-labs/devtron/internal/sql/repository/pipelineConfig/bean/workflow/cdWorkflow"
bean4 "github.com/devtron-labs/devtron/pkg/app/bean"
"github.com/devtron-labs/devtron/pkg/deployment/trigger/devtronApps/bean"
bean3 "github.com/devtron-labs/devtron/pkg/pipeline/bean"
repository3 "github.com/devtron-labs/devtron/pkg/pipeline/history/repository"
"github.com/devtron-labs/devtron/pkg/pipeline/types"
util2 "github.com/devtron-labs/devtron/util/event"
"time"
)

func (impl *HandlerServiceImpl) TriggerPostStage(request bean.TriggerRequest) (*bean4.ManifestPushTemplate, error) {
func (impl *HandlerServiceImpl) TriggerPostStage(request bean.CdTriggerRequest) (*bean4.ManifestPushTemplate, error) {
request.WorkflowType = bean2.CD_WORKFLOW_TYPE_POST
// setting triggeredAt variable to have consistent data for various audit log places in db for deployment time
triggeredAt := time.Now()
Expand Down Expand Up @@ -104,25 +103,10 @@ func (impl *HandlerServiceImpl) TriggerPostStage(request bean.TriggerRequest) (*
impl.logger.Errorw("error, checkVulnerabilityStatusAndFailWfIfNeeded", "err", err, "runner", runner)
return nil, err
}
cdStageWorkflowRequest, err := impl.buildWFRequest(runner, cdWf, pipeline, envDevploymentConfig, triggeredBy)
cdStageWorkflowRequest, err := impl.preparePrePostCdWorkflowRequest(ctx, runner, cdWf, request, env, types.POST, envDevploymentConfig)
if err != nil {
return impl.buildWfRequestErrorHandler(runner, err, triggeredBy)
}
cdStageWorkflowRequest.StageType = types.POST
cdStageWorkflowRequest.Pipeline = pipeline
cdStageWorkflowRequest.Env = env
cdStageWorkflowRequest.Type = bean3.CD_WORKFLOW_PIPELINE_TYPE
// handling plugin specific logic

pluginImagePathReservationIds, err := impl.setCopyContainerImagePluginDataAndReserveImages(cdStageWorkflowRequest, pipeline.Id, types.POST, cdWf.CiArtifact)
if err != nil {
runner.Status = cdWorkflow.WorkflowFailed
runner.Message = err.Error()
runner.FinishedOn = time.Now()
_ = impl.cdWorkflowRunnerService.UpdateCdWorkflowRunnerWithStage(runner)
return nil, err
}

_, jobHelmPackagePath, err := impl.workflowService.SubmitWorkflow(cdStageWorkflowRequest)
if err != nil {
impl.logger.Errorw("error in submitting workflow", "err", err, "workflowId", cdStageWorkflowRequest.WorkflowId, "pipeline", pipeline, "env", env)
Expand All @@ -137,20 +121,9 @@ func (impl *HandlerServiceImpl) TriggerPostStage(request bean.TriggerRequest) (*
impl.logger.Errorw("error in getting manifest push template", "err", err)
return nil, err
}
wfr, err := impl.cdWorkflowRepository.FindByWorkflowIdAndRunnerType(context.Background(), cdWf.Id, bean2.CD_WORKFLOW_TYPE_POST)
if err != nil {
impl.logger.Errorw("error in getting wfr by workflowId and runnerType", "err", err, "wfId", cdWf.Id)
return nil, err
}
wfr.ImagePathReservationIds = pluginImagePathReservationIds
err = impl.cdWorkflowRunnerService.UpdateCdWorkflowRunnerWithStage(&wfr)
if err != nil {
impl.logger.Error("error in updating image path reservation ids in cd workflow runner", "err", "err")
}

event, _ := impl.eventFactory.Build(util2.Trigger, &pipeline.Id, pipeline.AppId, &pipeline.EnvironmentId, util2.CD)
impl.logger.Debugw("event Cd Post Trigger", "event", event)
event = impl.eventFactory.BuildExtraCDData(event, &wfr, 0, bean2.CD_WORKFLOW_TYPE_POST)
impl.logger.Debugw("event Cd Post CiTriggerRequest", "event", event)
event = impl.eventFactory.BuildExtraCDData(event, runner, 0, bean2.CD_WORKFLOW_TYPE_POST)
_, evtErr := impl.eventClient.WriteNotificationEvent(event)
if evtErr != nil {
impl.logger.Errorw("CD trigger event not sent", "error", evtErr)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,13 +26,13 @@ import (
"time"
)

func (impl *HandlerServiceImpl) checkFeasibilityForPostStage(pipeline *pipelineConfig.Pipeline, request *bean.TriggerRequest,
func (impl *HandlerServiceImpl) checkFeasibilityForPostStage(pipeline *pipelineConfig.Pipeline, request *bean.CdTriggerRequest,
env *repository.Environment, cdWf *pipelineConfig.CdWorkflow, triggeredBy int32) (interface{}, error) {
//here return type is interface as ResourceFilterEvaluationAudit is not present in this version
return nil, nil
}

func (impl *HandlerServiceImpl) getManifestPushTemplateForPostStage(request bean.TriggerRequest, envDevploymentConfig *bean5.DeploymentConfig,
func (impl *HandlerServiceImpl) getManifestPushTemplateForPostStage(request bean.CdTriggerRequest, envDevploymentConfig *bean5.DeploymentConfig,
jobHelmPackagePath string, cdStageWorkflowRequest *types.WorkflowRequest, cdWf *pipelineConfig.CdWorkflow, runner *pipelineConfig.CdWorkflowRunner,
pipeline *pipelineConfig.Pipeline, triggeredBy int32, triggeredAt time.Time) (*bean4.ManifestPushTemplate, error) {
return nil, nil
Expand Down
Loading
Loading