From b01d987b1f423e734b22ca464caa020f8338455f Mon Sep 17 00:00:00 2001 From: Josef Smrcka Date: Thu, 16 Jun 2022 11:57:50 +0200 Subject: [PATCH] Add missing options for Parameterized Remote Trigger Plugin As part of JENKINS-68781. --- docs/Home.md | 2 + .../ParameterizedRemoteTriggerContext.groovy | 120 ++++++++++++++++++ .../dsl/helpers/step/StepContext.groovy | 15 ++- .../dsl/helpers/step/StepContextSpec.groovy | 36 +++++- 4 files changed, 165 insertions(+), 8 deletions(-) diff --git a/docs/Home.md b/docs/Home.md index afc29860a..3ab463a04 100644 --- a/docs/Home.md +++ b/docs/Home.md @@ -32,6 +32,8 @@ scripts, including [[tests for DSL scripts|Testing DSL Scripts]] and [[IDE Suppo Browse the Jenkins issue tracker to see any [open issues](https://issues.jenkins-ci.org/issues/?filter=15140). ## Release Notes +* 1.81.0 (July 18 2022) + * Add missing options for Parameterized Remote Trigger Plugin ([GH-1250](https://github.com/jenkinsci/job-dsl-plugin/pull/1250) [JENKINS-68781](https://issues.jenkins.io/browse/JENKINS-68781)). * 1.80.0 (July 1 2022) * Don't destroy credentials when re-creating organization folders ([GH-1251](https://github.com/jenkinsci/job-dsl-plugin/pull/1251) [JENKINS-44681](https://issues.jenkins.io/browse/JENKINS-44681)) * 1.79.0 (April 14 2022) diff --git a/job-dsl-core/src/main/groovy/javaposse/jobdsl/dsl/helpers/step/ParameterizedRemoteTriggerContext.groovy b/job-dsl-core/src/main/groovy/javaposse/jobdsl/dsl/helpers/step/ParameterizedRemoteTriggerContext.groovy index 0a5c92519..c1bb9f67b 100644 --- a/job-dsl-core/src/main/groovy/javaposse/jobdsl/dsl/helpers/step/ParameterizedRemoteTriggerContext.groovy +++ b/job-dsl-core/src/main/groovy/javaposse/jobdsl/dsl/helpers/step/ParameterizedRemoteTriggerContext.groovy @@ -11,6 +11,16 @@ class ParameterizedRemoteTriggerContext extends AbstractContext { boolean blockBuildUntilComplete = false String token String credentialsIds + String remoteJenkinsUrl + boolean abortTriggeredJob = false + int maxConn = 1 + boolean enhancedLogging = false + boolean useCrumbCache = true + boolean useJobInfoCache = true + boolean disabled = false + boolean overrideTrustAllCertificates = false + boolean trustAllCertificates = false + String parameterFile ParameterizedRemoteTriggerContext(JobManagement jobManagement) { super(jobManagement) @@ -85,4 +95,114 @@ class ParameterizedRemoteTriggerContext extends AbstractContext { void overrideCredentials(String credentialsIds) { this.credentialsIds = credentialsIds } + + /** + * If set, overrides the Remote Jenkins URL for this Job alone. + * + * @since 1.81 + */ + void remoteJenkinsUrl(String remoteJenkinsUrl) { + this.remoteJenkinsUrl = remoteJenkinsUrl + } + + /** + * Abort remote job if current job was aborted. Defaults to {@code false}. + * + * @since 1.81 + */ + void abortTriggeredJob(boolean abortTriggeredJob = true) { + this.abortTriggeredJob = abortTriggeredJob + } + + /** + * Set the max concurrent connections to the remote host, default is 1, max is 5. + * It'll be 5 even if you set it greater than 5. + * + * Note: Set this field with caution, too many concurrent requests will not only fail your local jobs, + * but also block the remote server. + * + * @since 1.81 + */ + void maxConn(int maxConn) { + this.maxConn = maxConn + } + + /** + * If set, the console output of the remote job is also logged. Defaults to {@code false}. + * + * @since 1.81 + */ + void enhancedLogging(boolean enhancedLogging = true) { + this.enhancedLogging = enhancedLogging + } + + /** + * Enable cache of the crumb of remote server. Defaults to {@code true}. + * + * It'll be more efficient for the local job execution & more stable for remote server when massive concurrent + * jobs are triggered. + * This cache will be cleared every 10 minutes. + * + * @since 1.81 + */ + void useCrumbCache(boolean useCrumbCache = true) { + this.useCrumbCache = useCrumbCache + } + + /** + * Enable cache of the job info of remote server. Defaults to {@code true}. + * + * It'll be more efficient for the local job execution & more stable for remote server when massive concurrent + * jobs are triggered. + * This cache will be cleared every 10 minutes. + * + * @since 1.81 + */ + void useJobInfoCache(boolean useJobInfoCache = true) { + this.useJobInfoCache = useJobInfoCache + } + + /** + * Disable the job step instead of removing it from job configuration. Defaults to {@code false}. + * + * @since 1.81 + */ + void disabled(boolean disabled = true) { + this.disabled = disabled + } + + /** + * Specify, whether the {@link #trustAllCertificates()} option will be taken into account. + * Defaults to {@code false}. + * + * @since 1.81 + */ + void overrideTrustAllCertificates(boolean overrideTrustAllCertificates = true) { + this.overrideTrustAllCertificates = overrideTrustAllCertificates + } + + /** + * Override/rewrite the 'Trust all certificate'-setting for this Job alone. Defaults to {@code false}. + * + * Setting this checkbox to {@code true} will result in accepting all certificates for the given Job. + * If the remote Jenkins host has a self-signed certificate or its certificate is not trusted, + * you may want to enable this option. It will accept untrusted certificates for the given host. + * + * This is unsafe and should only be used for testing or if you trust the host. + * + * @since 1.81 + */ + void trustAllCertificates(boolean trustAllCertificates = true) { + this.trustAllCertificates = trustAllCertificates + } + + /** + * Specify parameter path + name of an external file, which parameters should be loaded from. + * All paths are relative to the current workspace. + * + * @since 1.81 + */ + void parameterFile(String parameterFile) { + this.parameterFile = parameterFile + } } diff --git a/job-dsl-core/src/main/groovy/javaposse/jobdsl/dsl/helpers/step/StepContext.groovy b/job-dsl-core/src/main/groovy/javaposse/jobdsl/dsl/helpers/step/StepContext.groovy index 7a62cb3bc..e278c1a20 100644 --- a/job-dsl-core/src/main/groovy/javaposse/jobdsl/dsl/helpers/step/StepContext.groovy +++ b/job-dsl-core/src/main/groovy/javaposse/jobdsl/dsl/helpers/step/StepContext.groovy @@ -622,8 +622,19 @@ class StepContext extends AbstractExtensibleContext { CREDENTIALS__PLUGIN('credentialsPlugin') } } - loadParamsFromFile(false) - parameterFile() + loadParamsFromFile(context.parameterFile as boolean) + parameterFile(context.parameterFile) + if (context.remoteJenkinsUrl) { + remoteJenkinsUrl(context.remoteJenkinsUrl) + } + abortTriggeredJob(context.abortTriggeredJob) + maxConn(context.maxConn) + enhancedLogging(context.enhancedLogging) + useCrumbCache(context.useCrumbCache) + useJobInfoCache(context.useJobInfoCache) + disabled(context.disabled) + overrideTrustAllCertificates(context.overrideTrustAllCertificates) + trustAllCertificates(context.trustAllCertificates) queryString() } } diff --git a/job-dsl-core/src/test/groovy/javaposse/jobdsl/dsl/helpers/step/StepContextSpec.groovy b/job-dsl-core/src/test/groovy/javaposse/jobdsl/dsl/helpers/step/StepContextSpec.groovy index 29c328fd1..76f349f5b 100644 --- a/job-dsl-core/src/test/groovy/javaposse/jobdsl/dsl/helpers/step/StepContextSpec.groovy +++ b/job-dsl-core/src/test/groovy/javaposse/jobdsl/dsl/helpers/step/StepContextSpec.groovy @@ -2385,7 +2385,7 @@ class StepContextSpec extends Specification { context.stepNodes.size() == 1 with(context.stepNodes[0]) { name() == 'org.jenkinsci.plugins.ParameterizedRemoteTrigger.RemoteBuildConfiguration' - children().size() == 14 + children().size() == 22 token[0].value() == '' remoteJenkinsName[0].value() == 'dev-ci' job[0].value() == 'test' @@ -2405,7 +2405,15 @@ class StepContextSpec extends Specification { CREDENTIALS__PLUGIN[0].value() == 'credentialsPlugin' } loadParamsFromFile[0].value() == false - parameterFile[0].value() == [] + parameterFile[0].value() == null + abortTriggeredJob[0].value() == false + maxConn[0].value() == 1 + enhancedLogging[0].value() == false + useCrumbCache[0].value() == true + useJobInfoCache[0].value() == true + disabled[0].value() == false + overrideTrustAllCertificates[0].value() == false + trustAllCertificates[0].value() == false queryString[0].value() == [] } 1 * jobManagement.requireMinimumPluginVersion('Parameterized-Remote-Trigger', '2.0') @@ -2423,7 +2431,7 @@ class StepContextSpec extends Specification { context.stepNodes.size() == 1 with(context.stepNodes[0]) { name() == 'org.jenkinsci.plugins.ParameterizedRemoteTrigger.RemoteBuildConfiguration' - children().size() == 14 + children().size() == 22 token[0].value() == '' remoteJenkinsName[0].value() == 'dev-ci' job[0].value() == 'test' @@ -2447,7 +2455,15 @@ class StepContextSpec extends Specification { CREDENTIALS__PLUGIN[0].value() == 'credentialsPlugin' } loadParamsFromFile[0].value() == false - parameterFile[0].value() == [] + parameterFile[0].value() == null + abortTriggeredJob[0].value() == false + maxConn[0].value() == 1 + enhancedLogging[0].value() == false + useCrumbCache[0].value() == true + useJobInfoCache[0].value() == true + disabled[0].value() == false + overrideTrustAllCertificates[0].value() == false + trustAllCertificates[0].value() == false queryString[0].value() == [] } 1 * jobManagement.requireMinimumPluginVersion('Parameterized-Remote-Trigger', '2.0') @@ -2469,7 +2485,7 @@ class StepContextSpec extends Specification { context.stepNodes.size() == 1 with(context.stepNodes[0]) { name() == 'org.jenkinsci.plugins.ParameterizedRemoteTrigger.RemoteBuildConfiguration' - children().size() == 14 + children().size() == 22 token[0].value() == 'test' remoteJenkinsName[0].value() == 'dev-ci' job[0].value() == 'test' @@ -2491,7 +2507,15 @@ class StepContextSpec extends Specification { CREDENTIALS__PLUGIN[0].value() == 'credentialsPlugin' } loadParamsFromFile[0].value() == false - parameterFile[0].value() == [] + parameterFile[0].value() == null + abortTriggeredJob[0].value() == false + maxConn[0].value() == 1 + enhancedLogging[0].value() == false + useCrumbCache[0].value() == true + useJobInfoCache[0].value() == true + disabled[0].value() == false + overrideTrustAllCertificates[0].value() == false + trustAllCertificates[0].value() == false queryString[0].value() == [] } 1 * jobManagement.requireMinimumPluginVersion('Parameterized-Remote-Trigger', '2.0')