add skip_parameters

This commit is contained in:
“xHuPo” 2025-06-09 15:06:31 +08:00
parent 94d71a1e12
commit b14c215990
3 changed files with 21 additions and 8 deletions

View file

@ -24,6 +24,7 @@ type Jenkins struct {
Number string `mapstructure:"number" validate:"required"` Number string `mapstructure:"number" validate:"required"`
DefaultParameters []map[string]interface{} `mapstructure:"default_parameters"` DefaultParameters []map[string]interface{} `mapstructure:"default_parameters"`
SpecialParameters []map[string]interface{} `mapstructure:"special_parameters"` SpecialParameters []map[string]interface{} `mapstructure:"special_parameters"`
SkipParameters []map[string]interface{} `mapstructure:"skip_parameters"`
} }
// Config represents the application configuration // Config represents the application configuration

View file

@ -11,6 +11,7 @@ jenkins:
default_parameters: default_parameters:
- only_build: true - only_build: true
special_parameters: [] special_parameters: []
skip_parameters: []
retries: 2 retries: 2
jobs: jobs:

View file

@ -185,13 +185,24 @@ func processJob(ctx context.Context, js JenkinsService, cfg *Config, job string)
// Extract and merge parameters // Extract and merge parameters
latestParams := ExtractBuildParams(build) latestParams := ExtractBuildParams(build)
merged := MergeParams(latestParams, cfg.Jenkins.DefaultParameters)
// Trigger build with default parameters skipLatestBuild := false
log.Printf("[MAIN] Triggering build with default parameters for job: %s", job) for _, skip := range cfg.Jenkins.SkipParameters {
if err := js.TriggerBuildWithRetry(ctx, build, StringMapToInterfaceMap(merged), cfg.Retries); err != nil { if IsSubset(latestParams, skip) {
log.Printf("[MAIN] Failed to trigger build with default parameters for job %s: %v", job, err) log.Printf("[MAIN] Skipping build (subset of latest) for job %s: %+v", job, skip)
// Continue with special parameters even if default build fails 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 // Process special parameters
@ -210,8 +221,8 @@ func processJob(ctx context.Context, js JenkinsService, cfg *Config, job string)
specialLatestParams[k] = fmt.Sprintf("%v", v) specialLatestParams[k] = fmt.Sprintf("%v", v)
} }
speciaMerged := MergeParams(specialLatestParams, cfg.Jenkins.DefaultParameters) specialMerged := MergeParams(specialLatestParams, cfg.Jenkins.DefaultParameters)
if err := js.TriggerBuildWithRetry(ctx, build, StringMapToInterfaceMap(speciaMerged), cfg.Retries); err != nil { 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) 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 // Continue with other special parameters even if one fails
} }