From b14c2159900a30924196b5c54d1f05f782a5b5ad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CxHuPo=E2=80=9D?= <7513325+vrocwang@users.noreply.github.com> Date: Mon, 9 Jun 2025 15:06:31 +0800 Subject: [PATCH] add skip_parameters --- v3.1/config.go | 1 + v3.1/config.yaml | 1 + v3.1/main.go | 27 +++++++++++++++++++-------- 3 files changed, 21 insertions(+), 8 deletions(-) diff --git a/v3.1/config.go b/v3.1/config.go index f79cbc4..68d6bf0 100644 --- a/v3.1/config.go +++ b/v3.1/config.go @@ -24,6 +24,7 @@ type Jenkins struct { Number string `mapstructure:"number" validate:"required"` DefaultParameters []map[string]interface{} `mapstructure:"default_parameters"` SpecialParameters []map[string]interface{} `mapstructure:"special_parameters"` + SkipParameters []map[string]interface{} `mapstructure:"skip_parameters"` } // Config represents the application configuration diff --git a/v3.1/config.yaml b/v3.1/config.yaml index 17c2e29..1063e1b 100644 --- a/v3.1/config.yaml +++ b/v3.1/config.yaml @@ -11,6 +11,7 @@ jenkins: default_parameters: - only_build: true special_parameters: [] + skip_parameters: [] retries: 2 jobs: diff --git a/v3.1/main.go b/v3.1/main.go index 3433dcb..8d6cc00 100644 --- a/v3.1/main.go +++ b/v3.1/main.go @@ -185,13 +185,24 @@ func processJob(ctx context.Context, js JenkinsService, cfg *Config, job string) // Extract and merge parameters latestParams := ExtractBuildParams(build) - merged := MergeParams(latestParams, cfg.Jenkins.DefaultParameters) - // Trigger build with default parameters - log.Printf("[MAIN] Triggering build with default parameters for job: %s", job) - if err := js.TriggerBuildWithRetry(ctx, build, StringMapToInterfaceMap(merged), cfg.Retries); err != nil { - log.Printf("[MAIN] Failed to trigger build with default parameters for job %s: %v", job, err) - // Continue with special parameters even if default build fails + skipLatestBuild := false + for _, skip := range cfg.Jenkins.SkipParameters { + if IsSubset(latestParams, skip) { + log.Printf("[MAIN] Skipping build (subset of latest) for job %s: %+v", job, skip) + skipLatestBuild = true + break + } + } + + if !skipLatestBuild { + merged := MergeParams(latestParams, cfg.Jenkins.DefaultParameters) + // Trigger build with default parameters + log.Printf("[MAIN] Triggering build with default parameters for job: %s", job) + if err := js.TriggerBuildWithRetry(ctx, build, StringMapToInterfaceMap(merged), cfg.Retries); err != nil { + log.Printf("[MAIN] Failed to trigger build with default parameters for job %s: %v", job, err) + // Continue with special parameters even if default build fails + } } // Process special parameters @@ -210,8 +221,8 @@ func processJob(ctx context.Context, js JenkinsService, cfg *Config, job string) specialLatestParams[k] = fmt.Sprintf("%v", v) } - speciaMerged := MergeParams(specialLatestParams, cfg.Jenkins.DefaultParameters) - if err := js.TriggerBuildWithRetry(ctx, build, StringMapToInterfaceMap(speciaMerged), cfg.Retries); err != nil { + specialMerged := MergeParams(specialLatestParams, cfg.Jenkins.DefaultParameters) + if err := js.TriggerBuildWithRetry(ctx, build, StringMapToInterfaceMap(specialMerged), cfg.Retries); err != nil { log.Printf("[MAIN] Failed to trigger build with special parameters for job %s: %v", job, err) // Continue with other special parameters even if one fails }