diff --git a/jenkins_jobs/modules/publishers.py b/jenkins_jobs/modules/publishers.py index 3ef4b2b95..a50dde910 100644 --- a/jenkins_jobs/modules/publishers.py +++ b/jenkins_jobs/modules/publishers.py @@ -161,6 +161,11 @@ def trigger_parameterized_builds(parser, xml_parent, data): `_ + Use of the `node-label-name` or `node-label` parameters + requires the Jenkins `NodeLabel Parameter Plugin. + `_ + :arg str project: name of the job to trigger :arg str predefined-parameters: parameters to pass to the other job (optional) @@ -174,21 +179,15 @@ def trigger_parameterized_builds(parser, xml_parent, data): if any of the files are not found in the workspace (default 'False') :arg str restrict-matrix-project: Filter that restricts the subset of the combinations that the downstream project will run (optional) + :arg str node-label-name: Specify the Name for the NodeLabel parameter. + (optional) + :arg str node-label: Specify the Node for the NodeLabel parameter. + (optional) - Example:: + Example: - publishers: - - trigger-parameterized-builds: - - project: other_job, foo, bar - predefined-parameters: foo=bar - - project: other_job1, other_job2 - predefined-parameters: BUILD_NUM=${BUILD_NUMBER} - property-file: version.prop - fail-on-missing: true - - project: yet_another_job - predefined-parameters: foo=bar - git-revision: true - restrict-matrix-project: label=="x86" + .. literalinclude:: + /../../tests/publishers/fixtures/trigger_parameterized_builds001.yaml """ tbuilder = XML.SubElement(xml_parent, @@ -205,7 +204,9 @@ def trigger_parameterized_builds(parser, xml_parent, data): or 'property-file' in project_def or 'current-parameters' in project_def or 'svn-revision' in project_def - or 'restrict-matrix-project' in project_def): + or 'restrict-matrix-project' in project_def + or 'node-label-name' in project_def + or 'node-label' in project_def): if 'predefined-parameters' in project_def: params = XML.SubElement(tconfigs, @@ -245,6 +246,19 @@ def trigger_parameterized_builds(parser, xml_parent, data): 'matrix.MatrixSubsetBuildParameters') XML.SubElement(subset, 'filter').text = \ project_def['restrict-matrix-project'] + if 'node-label-name' in project_def or \ + 'node-label' in project_def: + params = XML.SubElement(tconfigs, + 'org.jvnet.jenkins.plugins.' + 'nodelabelparameter.' + 'parameterizedtrigger.' + 'NodeLabelBuildParameter') + name = XML.SubElement(params, 'name') + if 'node-label-name' in project_def: + name.text = project_def['node-label-name'] + label = XML.SubElement(params, 'nodeLabel') + if 'node-label' in project_def: + label.text = project_def['node-label'] else: tconfigs.set('class', 'java.util.Collections$EmptyList') projects = XML.SubElement(tconfig, 'projects') diff --git a/tests/publishers/fixtures/trigger_parameterized_builds001.xml b/tests/publishers/fixtures/trigger_parameterized_builds001.xml new file mode 100644 index 000000000..7556dcf19 --- /dev/null +++ b/tests/publishers/fixtures/trigger_parameterized_builds001.xml @@ -0,0 +1,72 @@ + + + + + + + + + foo=bar + + + other_job, foo, bar + ALWAYS + false + + + + + BUILD_NUM=${BUILD_NUMBER} + + + version.prop + true + + + other_job1, other_job2 + ALWAYS + false + + + + + foo=bar + + + false + + + label=="x86" + + + yet_another_job + ALWAYS + false + + + + + foo + + + + yet_another_job_2 + ALWAYS + false + + + + + + node-label-foo || node-label-bar + + + yet_another_job_3 + ALWAYS + false + + + + + + diff --git a/tests/publishers/fixtures/trigger_parameterized_builds001.yaml b/tests/publishers/fixtures/trigger_parameterized_builds001.yaml new file mode 100644 index 000000000..3b99472c3 --- /dev/null +++ b/tests/publishers/fixtures/trigger_parameterized_builds001.yaml @@ -0,0 +1,16 @@ +publishers: + - trigger-parameterized-builds: + - project: other_job, foo, bar + predefined-parameters: foo=bar + - project: other_job1, other_job2 + predefined-parameters: BUILD_NUM=${BUILD_NUMBER} + property-file: version.prop + fail-on-missing: true + - project: yet_another_job + predefined-parameters: foo=bar + git-revision: true + restrict-matrix-project: label=="x86" + - project: yet_another_job_2 + node-label-name: foo + - project: yet_another_job_3 + node-label: node-label-foo || node-label-bar \ No newline at end of file diff --git a/tests/publishers/fixtures/trigger_parameterized_builds002.xml b/tests/publishers/fixtures/trigger_parameterized_builds002.xml new file mode 100644 index 000000000..2fd87c9a4 --- /dev/null +++ b/tests/publishers/fixtures/trigger_parameterized_builds002.xml @@ -0,0 +1,43 @@ + + + + + + + + + NodeLabelName + NodeLabelNode + + + test-project-all + ALWAYS + false + + + + + NodeLabelName + + + + test-project-just-name + ALWAYS + false + + + + + + NodeLabelNode || NodeBar + + + test-project-just-node + ALWAYS + false + + + + + + diff --git a/tests/publishers/fixtures/trigger_parameterized_builds002.yaml b/tests/publishers/fixtures/trigger_parameterized_builds002.yaml new file mode 100644 index 000000000..eeda66035 --- /dev/null +++ b/tests/publishers/fixtures/trigger_parameterized_builds002.yaml @@ -0,0 +1,9 @@ +publishers: + - trigger-parameterized-builds: + - project: 'test-project-all' + node-label-name: NodeLabelName + node-label: NodeLabelNode + - project: 'test-project-just-name' + node-label-name: NodeLabelName + - project: 'test-project-just-node' + node-label: NodeLabelNode || NodeBar