Consolidate pipeline and trigger-parameterized-builds
Move main behaviour of trigger-parameterized-builds to helper methods and rework pipeline to utilize. Change pipeline to respect param ordering from yaml by based on the same option as defined for trigger-parameterized-builds. Change-Id: I42fdf4fe7fd41c9b6560a1ef57e7f150380180d5
This commit is contained in:
parent
98400a2542
commit
91ae576e6a
|
@ -12,6 +12,9 @@
|
|||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
import logging
|
||||
|
||||
import six
|
||||
import xml.etree.ElementTree as XML
|
||||
|
||||
from jenkins_jobs.errors import InvalidAttributeError
|
||||
|
@ -466,6 +469,137 @@ def test_fairy_common(xml_element, data):
|
|||
convert_mapping_to_xml(xml_element, data, mappings, fail_required=True)
|
||||
|
||||
|
||||
def trigger_get_parameter_order(registry):
|
||||
logger = logging.getLogger("%s:trigger_get_parameter_order" % __name__)
|
||||
# original order
|
||||
param_order = [
|
||||
'predefined-parameters',
|
||||
'git-revision',
|
||||
'property-file',
|
||||
'current-parameters',
|
||||
'node-parameters',
|
||||
'svn-revision',
|
||||
'restrict-matrix-project',
|
||||
'node-label-name',
|
||||
'node-label',
|
||||
'boolean-parameters',
|
||||
]
|
||||
|
||||
try:
|
||||
if registry.jjb_config.config_parser.getboolean(
|
||||
'__future__', 'param_order_from_yaml'):
|
||||
param_order = None
|
||||
except six.moves.configparser.NoSectionError:
|
||||
pass
|
||||
|
||||
if param_order:
|
||||
logger.warning(
|
||||
"Using deprecated order for parameter sets in "
|
||||
"triggered-parameterized-builds. This will be changed in a future "
|
||||
"release to inherit the order from the user defined yaml. To "
|
||||
"enable this behaviour immediately, set the config option "
|
||||
"'__future__.param_order_from_yaml' to 'true' and change the "
|
||||
"input job configuration to use the desired order")
|
||||
|
||||
return param_order
|
||||
|
||||
|
||||
def trigger_project(tconfigs, project_def, param_order=None):
|
||||
|
||||
logger = logging.getLogger("%s:trigger_project" % __name__)
|
||||
pt_prefix = 'hudson.plugins.parameterizedtrigger.'
|
||||
if param_order:
|
||||
parameters = param_order
|
||||
else:
|
||||
parameters = project_def.keys()
|
||||
|
||||
for param_type in parameters:
|
||||
param_value = project_def.get(param_type)
|
||||
if param_value is None:
|
||||
continue
|
||||
|
||||
if param_type == 'predefined-parameters':
|
||||
params = XML.SubElement(tconfigs, pt_prefix +
|
||||
'PredefinedBuildParameters')
|
||||
properties = XML.SubElement(params, 'properties')
|
||||
properties.text = param_value
|
||||
elif param_type == 'git-revision' and param_value:
|
||||
if 'combine-queued-commits' in project_def:
|
||||
logger.warning(
|
||||
"'combine-queued-commit' has moved to reside under "
|
||||
"'git-revision' configuration, please update your "
|
||||
"configs as support for this will be removed."
|
||||
)
|
||||
git_revision = {
|
||||
'combine-queued-commits':
|
||||
project_def['combine-queued-commits']
|
||||
}
|
||||
else:
|
||||
git_revision = project_def['git-revision']
|
||||
append_git_revision_config(tconfigs, git_revision)
|
||||
elif param_type == 'property-file':
|
||||
params = XML.SubElement(tconfigs,
|
||||
pt_prefix + 'FileBuildParameters')
|
||||
properties = XML.SubElement(params, 'propertiesFile')
|
||||
properties.text = project_def['property-file']
|
||||
failOnMissing = XML.SubElement(params, 'failTriggerOnMissing')
|
||||
failOnMissing.text = str(project_def.get('fail-on-missing',
|
||||
False)).lower()
|
||||
if 'file-encoding' in project_def:
|
||||
XML.SubElement(params, 'encoding'
|
||||
).text = project_def['file-encoding']
|
||||
if 'use-matrix-child-files' in project_def:
|
||||
# TODO: These parameters only affect execution in
|
||||
# publishers of matrix projects; we should warn if they are
|
||||
# used in other contexts.
|
||||
XML.SubElement(params, "useMatrixChild").text = (
|
||||
str(project_def['use-matrix-child-files']).lower())
|
||||
XML.SubElement(params, "combinationFilter").text = (
|
||||
project_def.get('matrix-child-combination-filter', ''))
|
||||
XML.SubElement(params, "onlyExactRuns").text = (
|
||||
str(project_def.get('only-exact-matrix-child-runs',
|
||||
False)).lower())
|
||||
elif param_type == 'current-parameters' and param_value:
|
||||
XML.SubElement(tconfigs, pt_prefix + 'CurrentBuildParameters')
|
||||
elif param_type == 'node-parameters' and param_value:
|
||||
XML.SubElement(tconfigs, pt_prefix + 'NodeParameters')
|
||||
elif param_type == 'svn-revision' and param_value:
|
||||
param = XML.SubElement(tconfigs, pt_prefix +
|
||||
'SubversionRevisionBuildParameters')
|
||||
XML.SubElement(param, 'includeUpstreamParameters').text = str(
|
||||
project_def.get('include-upstream', False)).lower()
|
||||
elif param_type == 'restrict-matrix-project' and param_value:
|
||||
subset = XML.SubElement(tconfigs, pt_prefix +
|
||||
'matrix.MatrixSubsetBuildParameters')
|
||||
XML.SubElement(subset, 'filter'
|
||||
).text = project_def['restrict-matrix-project']
|
||||
elif (param_type == 'node-label-name' or
|
||||
param_type == 'node-label'):
|
||||
tag_name = ('org.jvnet.jenkins.plugins.nodelabelparameter.'
|
||||
'parameterizedtrigger.NodeLabelBuildParameter')
|
||||
if tconfigs.find(tag_name) is not None:
|
||||
# already processed and can only have one
|
||||
continue
|
||||
params = XML.SubElement(tconfigs, tag_name)
|
||||
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']
|
||||
elif param_type == 'boolean-parameters' and param_value:
|
||||
params = XML.SubElement(tconfigs,
|
||||
pt_prefix + 'BooleanParameters')
|
||||
config_tag = XML.SubElement(params, 'configs')
|
||||
param_tag_text = pt_prefix + 'BooleanParameterConfig'
|
||||
params_list = param_value
|
||||
for name, value in params_list.items():
|
||||
param_tag = XML.SubElement(config_tag, param_tag_text)
|
||||
XML.SubElement(param_tag, 'name').text = name
|
||||
XML.SubElement(param_tag, 'value').text = str(
|
||||
value or False).lower()
|
||||
|
||||
|
||||
def convert_mapping_to_xml(parent, data, mapping, fail_required=False):
|
||||
"""Convert mapping to XML
|
||||
|
||||
|
|
|
@ -486,138 +486,20 @@ def trigger_parameterized_builds(registry, xml_parent, data):
|
|||
/../../tests/publishers/fixtures/trigger_parameterized_builds003.yaml
|
||||
:language: yaml
|
||||
"""
|
||||
logger = logging.getLogger("%s:trigger-parameterized-builds" % __name__)
|
||||
pt_prefix = 'hudson.plugins.parameterizedtrigger.'
|
||||
tbuilder = XML.SubElement(xml_parent, pt_prefix + 'BuildTrigger')
|
||||
configs = XML.SubElement(tbuilder, 'configs')
|
||||
|
||||
# original order
|
||||
orig_order = [
|
||||
'predefined-parameters',
|
||||
'git-revision',
|
||||
'property-file',
|
||||
'current-parameters',
|
||||
'node-parameters',
|
||||
'svn-revision',
|
||||
'restrict-matrix-project',
|
||||
'node-label-name',
|
||||
'node-label',
|
||||
'boolean-parameters',
|
||||
]
|
||||
|
||||
try:
|
||||
if registry.jjb_config.config_parser.getboolean(
|
||||
'__future__', 'param_order_from_yaml'):
|
||||
orig_order = None
|
||||
except six.moves.configparser.NoSectionError:
|
||||
pass
|
||||
|
||||
if orig_order:
|
||||
logger.warning(
|
||||
"Using deprecated order for parameter sets in "
|
||||
"triggered-parameterized-builds. This will be changed in a future "
|
||||
"release to inherit the order from the user defined yaml. To "
|
||||
"enable this behaviour immediately, set the config option "
|
||||
"'__future__.param_order_from_yaml' to 'true' and change the "
|
||||
"input job configuration to use the desired order")
|
||||
param_order = helpers.trigger_get_parameter_order(registry)
|
||||
|
||||
for project_def in data:
|
||||
tconfig = XML.SubElement(configs, pt_prefix + 'BuildTriggerConfig')
|
||||
tconfigs = XML.SubElement(tconfig, 'configs')
|
||||
|
||||
if orig_order:
|
||||
parameters = orig_order
|
||||
else:
|
||||
parameters = project_def.keys()
|
||||
|
||||
for param_type in parameters:
|
||||
param_value = project_def.get(param_type)
|
||||
if param_value is None:
|
||||
continue
|
||||
|
||||
if param_type == 'predefined-parameters':
|
||||
params = XML.SubElement(tconfigs, pt_prefix +
|
||||
'PredefinedBuildParameters')
|
||||
properties = XML.SubElement(params, 'properties')
|
||||
properties.text = param_value
|
||||
elif param_type == 'git-revision' and param_value:
|
||||
if 'combine-queued-commits' in project_def:
|
||||
logger.warning(
|
||||
"'combine-queued-commit' has moved to reside under "
|
||||
"'git-revision' configuration, please update your "
|
||||
"configs as support for this will be removed."
|
||||
)
|
||||
git_revision = {
|
||||
'combine-queued-commits':
|
||||
project_def['combine-queued-commits']
|
||||
}
|
||||
else:
|
||||
git_revision = project_def['git-revision']
|
||||
helpers.append_git_revision_config(tconfigs, git_revision)
|
||||
elif param_type == 'property-file':
|
||||
params = XML.SubElement(tconfigs,
|
||||
pt_prefix + 'FileBuildParameters')
|
||||
properties = XML.SubElement(params, 'propertiesFile')
|
||||
properties.text = project_def['property-file']
|
||||
failOnMissing = XML.SubElement(params, 'failTriggerOnMissing')
|
||||
failOnMissing.text = str(project_def.get('fail-on-missing',
|
||||
False)).lower()
|
||||
if 'file-encoding' in project_def:
|
||||
XML.SubElement(params, 'encoding'
|
||||
).text = project_def['file-encoding']
|
||||
if 'use-matrix-child-files' in project_def:
|
||||
# TODO: These parameters only affect execution in
|
||||
# publishers of matrix projects; we should warn if they are
|
||||
# used in other contexts.
|
||||
XML.SubElement(params, "useMatrixChild").text = (
|
||||
str(project_def['use-matrix-child-files']).lower())
|
||||
XML.SubElement(params, "combinationFilter").text = (
|
||||
project_def.get('matrix-child-combination-filter', ''))
|
||||
XML.SubElement(params, "onlyExactRuns").text = (
|
||||
str(project_def.get('only-exact-matrix-child-runs',
|
||||
False)).lower())
|
||||
elif param_type == 'current-parameters' and param_value:
|
||||
XML.SubElement(tconfigs, pt_prefix + 'CurrentBuildParameters')
|
||||
elif param_type == 'node-parameters' and param_value:
|
||||
XML.SubElement(tconfigs, pt_prefix + 'NodeParameters')
|
||||
elif param_type == 'svn-revision' and param_value:
|
||||
param = XML.SubElement(tconfigs, pt_prefix +
|
||||
'SubversionRevisionBuildParameters')
|
||||
XML.SubElement(param, 'includeUpstreamParameters').text = str(
|
||||
project_def.get('include-upstream', False)).lower()
|
||||
elif param_type == 'restrict-matrix-project' and param_value:
|
||||
subset = XML.SubElement(tconfigs, pt_prefix +
|
||||
'matrix.MatrixSubsetBuildParameters')
|
||||
XML.SubElement(subset, 'filter').text = \
|
||||
project_def['restrict-matrix-project']
|
||||
elif (param_type == 'node-label-name' or
|
||||
param_type == 'node-label'):
|
||||
tag_name = ('org.jvnet.jenkins.plugins.nodelabelparameter.'
|
||||
'parameterizedtrigger.NodeLabelBuildParameter')
|
||||
if tconfigs.find(tag_name) is not None:
|
||||
# already processed and can only have one
|
||||
continue
|
||||
params = XML.SubElement(tconfigs, tag_name)
|
||||
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']
|
||||
elif param_type == 'boolean-parameters' and param_value:
|
||||
params = XML.SubElement(tconfigs,
|
||||
pt_prefix + 'BooleanParameters')
|
||||
config_tag = XML.SubElement(params, 'configs')
|
||||
param_tag_text = pt_prefix + 'BooleanParameterConfig'
|
||||
params_list = param_value
|
||||
for name, value in params_list.items():
|
||||
param_tag = XML.SubElement(config_tag, param_tag_text)
|
||||
XML.SubElement(param_tag, 'name').text = name
|
||||
XML.SubElement(param_tag, 'value').text = str(
|
||||
value or False).lower()
|
||||
helpers.trigger_project(tconfigs, project_def, param_order)
|
||||
|
||||
if not list(tconfigs):
|
||||
# not child parameter tags added
|
||||
# no child parameter tags added
|
||||
tconfigs.set('class', 'java.util.Collections$EmptyList')
|
||||
|
||||
projects = XML.SubElement(tconfig, 'projects')
|
||||
|
@ -1850,11 +1732,32 @@ def pipeline(registry, xml_parent, data):
|
|||
Requires the Jenkins :jenkins-wiki:`Build Pipeline Plugin
|
||||
<Build+Pipeline+Plugin>`.
|
||||
|
||||
:arg str project: the name of the downstream project
|
||||
Use of the `node-label-name` or `node-label` parameters
|
||||
requires the Jenkins :jenkins-wiki:`NodeLabel Parameter Plugin
|
||||
<NodeLabel+Parameter+Plugin>`.
|
||||
Note: 'node-parameters' overrides the Node that the triggered
|
||||
project is tied to.
|
||||
|
||||
:arg list projects: list the jobs to trigger, will generate comma-separated
|
||||
string containing the named jobs.
|
||||
:arg str predefined-parameters: parameters to pass to the other
|
||||
job (optional)
|
||||
:arg bool current-parameters: Whether to include the parameters passed
|
||||
to the current build to the triggered job (optional)
|
||||
:arg bool node-parameters: Use the same Node for the triggered builds
|
||||
that was used for this build. (optional)
|
||||
:arg bool svn-revision: Pass svn revision to the triggered job (optional)
|
||||
:arg bool include-upstream: Include/pass through Upstream SVN Revisons.
|
||||
Only valid when 'svn-revision' is true. (default false)
|
||||
:arg dict git-revision: Passes git revision to the triggered job
|
||||
(optional).
|
||||
|
||||
* **combine-queued-commits** (bool): Whether to combine queued git
|
||||
hashes or not (default false)
|
||||
|
||||
:arg dict boolean-parameters: Pass boolean parameters to the downstream
|
||||
jobs. Specify the name and boolean value mapping of the parameters.
|
||||
(optional)
|
||||
:arg str property-file: Use properties from file (optional)
|
||||
:arg bool fail-on-missing: Blocks the triggering of the downstream jobs
|
||||
if any of the property files are not found in the workspace.
|
||||
|
@ -1863,6 +1766,8 @@ def pipeline(registry, xml_parent, data):
|
|||
:arg str file-encoding: Encoding of contents of the files. If not
|
||||
specified, default encoding of the platform is used. Only valid when
|
||||
'property-file' is specified. (optional)
|
||||
:arg str restrict-matrix-project: Filter that restricts the subset
|
||||
of the combinations that the downstream project will run (optional)
|
||||
|
||||
Example:
|
||||
|
||||
|
@ -1881,40 +1786,26 @@ def pipeline(registry, xml_parent, data):
|
|||
|
||||
See 'samples/pipeline.yaml' for an example pipeline implementation.
|
||||
"""
|
||||
if 'project' in data and data['project'] != '':
|
||||
logger = logging.getLogger("%s:pipeline" % __name__)
|
||||
param_order = helpers.trigger_get_parameter_order(registry)
|
||||
|
||||
if 'project' in data:
|
||||
logger.warning(
|
||||
"Using 'project' for pipeline definition is deprecated. Please "
|
||||
"update your job definition to use 'projects' with a list format.")
|
||||
|
||||
projects = ",".join(data.get('projects', [data.get('project', '')]))
|
||||
if projects != '':
|
||||
|
||||
pippub = XML.SubElement(xml_parent,
|
||||
'au.com.centrumsystems.hudson.plugin.'
|
||||
'buildpipeline.trigger.BuildPipelineTrigger')
|
||||
|
||||
configs = XML.SubElement(pippub, 'configs')
|
||||
|
||||
if 'predefined-parameters' in data:
|
||||
params = XML.SubElement(configs,
|
||||
'hudson.plugins.parameterizedtrigger.'
|
||||
'PredefinedBuildParameters')
|
||||
properties = XML.SubElement(params, 'properties')
|
||||
properties.text = data['predefined-parameters']
|
||||
helpers.trigger_project(configs, data, param_order)
|
||||
|
||||
if ('current-parameters' in data
|
||||
and data['current-parameters']):
|
||||
XML.SubElement(configs,
|
||||
'hudson.plugins.parameterizedtrigger.'
|
||||
'CurrentBuildParameters')
|
||||
|
||||
if 'property-file' in data and data['property-file']:
|
||||
params = XML.SubElement(configs,
|
||||
'hudson.plugins.parameterizedtrigger.'
|
||||
'FileBuildParameters')
|
||||
properties = XML.SubElement(params, 'propertiesFile')
|
||||
properties.text = data['property-file']
|
||||
failOnMissing = XML.SubElement(params, 'failTriggerOnMissing')
|
||||
failOnMissing.text = str(
|
||||
data.get('fail-on-missing', False)).lower()
|
||||
if 'file-encoding' in data:
|
||||
XML.SubElement(params, 'encoding'
|
||||
).text = data['file-encoding']
|
||||
|
||||
XML.SubElement(pippub, 'downstreamProjectNames').text = data['project']
|
||||
XML.SubElement(pippub, 'downstreamProjectNames').text = projects
|
||||
|
||||
|
||||
def email(registry, xml_parent, data):
|
||||
|
|
|
@ -3,11 +3,33 @@
|
|||
<publishers>
|
||||
<au.com.centrumsystems.hudson.plugin.buildpipeline.trigger.BuildPipelineTrigger>
|
||||
<configs>
|
||||
<hudson.plugins.parameterizedtrigger.PredefinedBuildParameters>
|
||||
<properties>BUILD_NUM=${BUILD_NUMBER}</properties>
|
||||
</hudson.plugins.parameterizedtrigger.PredefinedBuildParameters>
|
||||
<hudson.plugins.git.GitRevisionBuildParameters>
|
||||
<combineQueuedCommits>true</combineQueuedCommits>
|
||||
</hudson.plugins.git.GitRevisionBuildParameters>
|
||||
<hudson.plugins.parameterizedtrigger.FileBuildParameters>
|
||||
<propertiesFile>vars.txt</propertiesFile>
|
||||
<failTriggerOnMissing>true</failTriggerOnMissing>
|
||||
<encoding>UTF-8</encoding>
|
||||
</hudson.plugins.parameterizedtrigger.FileBuildParameters>
|
||||
<hudson.plugins.parameterizedtrigger.CurrentBuildParameters/>
|
||||
<hudson.plugins.parameterizedtrigger.SubversionRevisionBuildParameters>
|
||||
<includeUpstreamParameters>true</includeUpstreamParameters>
|
||||
</hudson.plugins.parameterizedtrigger.SubversionRevisionBuildParameters>
|
||||
<hudson.plugins.parameterizedtrigger.BooleanParameters>
|
||||
<configs>
|
||||
<hudson.plugins.parameterizedtrigger.BooleanParameterConfig>
|
||||
<name>p1</name>
|
||||
<value>true</value>
|
||||
</hudson.plugins.parameterizedtrigger.BooleanParameterConfig>
|
||||
<hudson.plugins.parameterizedtrigger.BooleanParameterConfig>
|
||||
<name>p2</name>
|
||||
<value>false</value>
|
||||
</hudson.plugins.parameterizedtrigger.BooleanParameterConfig>
|
||||
</configs>
|
||||
</hudson.plugins.parameterizedtrigger.BooleanParameters>
|
||||
</configs>
|
||||
<downstreamProjectNames>test_project</downstreamProjectNames>
|
||||
</au.com.centrumsystems.hudson.plugin.buildpipeline.trigger.BuildPipelineTrigger>
|
||||
|
|
|
@ -1,6 +1,16 @@
|
|||
publishers:
|
||||
- pipeline:
|
||||
project: test_project
|
||||
projects:
|
||||
- test_project
|
||||
predefined-parameters: BUILD_NUM=${BUILD_NUMBER}
|
||||
current-parameters: true
|
||||
property-file: vars.txt
|
||||
git-revision:
|
||||
combine-queued-commits: true
|
||||
fail-on-missing: true
|
||||
file-encoding: UTF-8
|
||||
boolean-parameters:
|
||||
p1: true
|
||||
p2: false
|
||||
svn-revision: true
|
||||
include-upstream: true
|
||||
|
|
Loading…
Reference in New Issue