From 9039eaa09b7dd99dc6c0a5686d1d0838e572abca Mon Sep 17 00:00:00 2001 From: Igor Belikov Date: Thu, 22 Jan 2015 21:10:30 +0300 Subject: [PATCH] Add support for 'All Nodes For Label Factory' Gives ability to trigger a build of a project on all nodes with specific label. Requires NodeLabel Parameter plugin. Change-Id: I1a59c7c27591574bb1c1af0041de7cfd3775916d --- jenkins_jobs/modules/builders.py | 31 +++++++++++++- ...nfigfactory-allnodesforlabel-optionals.xml | 40 +++++++++++++++++++ ...figfactory-allnodesforlabel-optionals.yaml | 9 +++++ ...-builds-configfactory-allnodesforlabel.xml | 40 +++++++++++++++++++ ...builds-configfactory-allnodesforlabel.yaml | 7 ++++ .../trigger-builds-configfactory-multi.xml | 5 +++ .../trigger-builds-configfactory-multi.yaml | 4 ++ 7 files changed, 135 insertions(+), 1 deletion(-) create mode 100644 tests/builders/fixtures/trigger-builds-configfactory-allnodesforlabel-optionals.xml create mode 100644 tests/builders/fixtures/trigger-builds-configfactory-allnodesforlabel-optionals.yaml create mode 100644 tests/builders/fixtures/trigger-builds-configfactory-allnodesforlabel.xml create mode 100644 tests/builders/fixtures/trigger-builds-configfactory-allnodesforlabel.yaml diff --git a/jenkins_jobs/modules/builders.py b/jenkins_jobs/modules/builders.py index 3d3deb079..41fefea1f 100644 --- a/jenkins_jobs/modules/builders.py +++ b/jenkins_jobs/modules/builders.py @@ -325,6 +325,16 @@ def trigger_builds(parser, xml_parent, data): ['FAIL', 'SKIP', 'NOPARMS'] (default 'FAIL') + :Factory: * **factory** (`str`) **allnodesforlabel** -- Trigger a build + on all nodes having specific label. Requires NodeLabel + Parameter Plugin (optional) + * **name** (`str`) -- Name of the parameter to set (optional) + * **node-label** (`str`) -- Label of the nodes where build + should be triggered + * **ignore-offline-nodes** (`bool`) -- Don't trigger build on + offline nodes (optional) + (default true) + Examples: Basic usage. @@ -385,7 +395,10 @@ def trigger_builds(parser, xml_parent, data): if 'parameter-factories' in project_def: fconfigs = XML.SubElement(tconfig, 'configFactories') - supported_factories = ['filebuild', 'binaryfile', 'counterbuild'] + supported_factories = ['filebuild', + 'binaryfile', + 'counterbuild', + 'allnodesforlabel'] supported_actions = ['SKIP', 'NOPARMS', 'FAIL'] for factory in project_def['parameter-factories']: @@ -441,6 +454,22 @@ def trigger_builds(parser, xml_parent, data): "validation-fail action must be one of %s" % ", ".join(supported_actions)) validationFail.text = validationFailValue + if factory['factory'] == 'allnodesforlabel': + params = XML.SubElement( + fconfigs, + 'org.jvnet.jenkins.plugins.nodelabelparameter.' + 'parameterizedtrigger.' + 'AllNodesForLabelBuildParameterFactory') + nameProperty = XML.SubElement(params, 'name') + nameProperty.text = str(factory.get( + 'name', '')) + nodeLabel = XML.SubElement(params, 'nodeLabel') + nodeLabel.text = str(factory['node-label']) + ignoreOfflineNodes = XML.SubElement( + params, + 'ignoreOfflineNodes') + ignoreOfflineNodes.text = str(factory.get( + 'ignore-offline-nodes', True)).lower() projects = XML.SubElement(tconfig, 'projects') projects.text = project_def['project'] diff --git a/tests/builders/fixtures/trigger-builds-configfactory-allnodesforlabel-optionals.xml b/tests/builders/fixtures/trigger-builds-configfactory-allnodesforlabel-optionals.xml new file mode 100644 index 000000000..f8300bcc3 --- /dev/null +++ b/tests/builders/fixtures/trigger-builds-configfactory-allnodesforlabel-optionals.xml @@ -0,0 +1,40 @@ + + + + + + + + + + test-name + test-label + true + + + build_started + ALWAYS + false + false + + + FAILURE + 2 + RED + + + UNSTABLE + 1 + YELLOW + + + FAILURE + 2 + RED + + + + + + + diff --git a/tests/builders/fixtures/trigger-builds-configfactory-allnodesforlabel-optionals.yaml b/tests/builders/fixtures/trigger-builds-configfactory-allnodesforlabel-optionals.yaml new file mode 100644 index 000000000..432e257b0 --- /dev/null +++ b/tests/builders/fixtures/trigger-builds-configfactory-allnodesforlabel-optionals.yaml @@ -0,0 +1,9 @@ +builders: + - trigger-builds: + - project: "build_started" + parameter-factories: + - factory: allnodesforlabel + name: test-name + node-label: test-label + ignore-offline-nodes: true + block: true diff --git a/tests/builders/fixtures/trigger-builds-configfactory-allnodesforlabel.xml b/tests/builders/fixtures/trigger-builds-configfactory-allnodesforlabel.xml new file mode 100644 index 000000000..ac17062d3 --- /dev/null +++ b/tests/builders/fixtures/trigger-builds-configfactory-allnodesforlabel.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + test-label + true + + + build_started + ALWAYS + false + false + + + FAILURE + 2 + RED + + + UNSTABLE + 1 + YELLOW + + + FAILURE + 2 + RED + + + + + + + diff --git a/tests/builders/fixtures/trigger-builds-configfactory-allnodesforlabel.yaml b/tests/builders/fixtures/trigger-builds-configfactory-allnodesforlabel.yaml new file mode 100644 index 000000000..4290bac96 --- /dev/null +++ b/tests/builders/fixtures/trigger-builds-configfactory-allnodesforlabel.yaml @@ -0,0 +1,7 @@ +builders: + - trigger-builds: + - project: "build_started" + parameter-factories: + - factory: allnodesforlabel + node-label: test-label + block: true diff --git a/tests/builders/fixtures/trigger-builds-configfactory-multi.xml b/tests/builders/fixtures/trigger-builds-configfactory-multi.xml index 8c35c4806..d95c04b3a 100644 --- a/tests/builders/fixtures/trigger-builds-configfactory-multi.xml +++ b/tests/builders/fixtures/trigger-builds-configfactory-multi.xml @@ -28,6 +28,11 @@ FAIL + + parametername + labelname + false + build_started ALWAYS diff --git a/tests/builders/fixtures/trigger-builds-configfactory-multi.yaml b/tests/builders/fixtures/trigger-builds-configfactory-multi.yaml index 96b047828..6daced4ef 100644 --- a/tests/builders/fixtures/trigger-builds-configfactory-multi.yaml +++ b/tests/builders/fixtures/trigger-builds-configfactory-multi.yaml @@ -15,4 +15,8 @@ builders: from: 0 to: 5 step: 1 + - factory: allnodesforlabel + name: parametername + node-label: labelname + ignore-offline-nodes: false block: true