diff options
author | Christoffer Skeppstedt <c.skeppstedt@gmail.com> | 2014-09-30 09:18:04 +0200 |
---|---|---|
committer | Darragh Bailey <dbailey@hpe.com> | 2016-04-25 19:04:11 +0100 |
commit | 50bc586ec5cc2e9c9ad194bcf198e513e42c0d7d (patch) | |
tree | 0b0e44cf0b6f79f38c109d08a32004e31d8f2614 | |
parent | 915a36f449b501757081c9668f7fadca6686b1c8 (diff) | |
download | python-jenkins-job-builder-50bc586ec5cc2e9c9ad194bcf198e513e42c0d7d.tar.gz python-jenkins-job-builder-50bc586ec5cc2e9c9ad194bcf198e513e42c0d7d.tar.xz python-jenkins-job-builder-50bc586ec5cc2e9c9ad194bcf198e513e42c0d7d.zip |
Serialize combine-queued-commits for git-revision
When configuring the trigger_builds Builder in the Jenkins web
interface, you can add the parameter "Pass-through Git Commit that was
built". You could not configure this in a jobs.yml.
This commit adds that functionality (both to the builder
"trigger_builds " and the publisher "trigger_parameterized_builds").
I still want to be backwards compatible with the old version
(true/false) and maintain the similarity with the svn-revision param.
Which means that you can either configure it as
git-revision: true/false
or
git-revision:
combine-queued-commits: true/false
There were no prior case of shared code between builders and
publishers, so (by recommendation) I put the common logic in
builders.py, and then imported it in publishers.py.
I added thorough tests for the feature in the builders fixtures,
and only a basic test in the publishers fixtures, as suggested.
Change-Id: I72cdcae3fac1094ffcc9367369556b8bcbe2d5d7
14 files changed, 125 insertions, 16 deletions
diff --git a/jenkins_jobs/modules/builders.py b/jenkins_jobs/modules/builders.py index 6f9ed7bd..aa0b7c25 100644 --- a/jenkins_jobs/modules/builders.py +++ b/jenkins_jobs/modules/builders.py @@ -43,6 +43,7 @@ from jenkins_jobs.errors import InvalidAttributeError from jenkins_jobs.errors import JenkinsJobsException from jenkins_jobs.errors import MissingAttributeError import jenkins_jobs.modules.base +from jenkins_jobs.modules.helpers import append_git_revision_config from jenkins_jobs.modules.helpers import cloudformation_init from jenkins_jobs.modules.helpers import cloudformation_region_dict from jenkins_jobs.modules.helpers import cloudformation_stack @@ -382,8 +383,11 @@ def trigger_builds(parser, xml_parent, data): Plugin (optional) :arg bool svn-revision: Whether to pass the svn revision to the triggered job (optional) - :arg bool git-revision: Whether to pass the git revision to the triggered - job (optional) + :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 bool block: whether to wait for the triggered jobs to finish or not (default false) :arg dict block-thresholds: Fail builds and/or mark as failed or unstable @@ -485,12 +489,10 @@ def trigger_builds(parser, xml_parent, data): XML.SubElement(tconfigs, 'hudson.plugins.parameterizedtrigger.' 'SubversionRevisionBuildParameters') + if(project_def.get('git-revision')): - params = XML.SubElement(tconfigs, - 'hudson.plugins.git.' - 'GitRevisionBuildParameters') - combine = XML.SubElement(params, 'combineQueuedCommits') - combine.text = 'false' + append_git_revision_config(tconfigs, project_def['git-revision']) + if(project_def.get('same-node')): XML.SubElement(tconfigs, 'hudson.plugins.parameterizedtrigger.' diff --git a/jenkins_jobs/modules/helpers.py b/jenkins_jobs/modules/helpers.py index aa3aeac2..2e04886a 100644 --- a/jenkins_jobs/modules/helpers.py +++ b/jenkins_jobs/modules/helpers.py @@ -426,6 +426,21 @@ def artifactory_repository(xml_parent, data, target): data.get('deploy-dynamic-mode', False)).lower() +def append_git_revision_config(parent, config_def): + params = XML.SubElement( + parent, 'hudson.plugins.git.GitRevisionBuildParameters') + + try: + # If git-revision is a boolean, the get() will + # throw an AttributeError + combine_commits = str( + config_def.get('combine-queued-commits', False)).lower() + except AttributeError: + combine_commits = 'false' + + XML.SubElement(params, 'combineQueuedCommits').text = combine_commits + + def convert_mapping_to_xml(parent, data, mapping, fail_required=False): """Convert mapping to XML diff --git a/jenkins_jobs/modules/publishers.py b/jenkins_jobs/modules/publishers.py index e6738766..ec710ec3 100644 --- a/jenkins_jobs/modules/publishers.py +++ b/jenkins_jobs/modules/publishers.py @@ -38,6 +38,7 @@ from jenkins_jobs.errors import JenkinsJobsException from jenkins_jobs.errors import MissingAttributeError import jenkins_jobs.modules.base from jenkins_jobs.modules import hudson_model +from jenkins_jobs.modules.helpers import append_git_revision_config from jenkins_jobs.modules.helpers import artifactory_common_details from jenkins_jobs.modules.helpers import artifactory_deployment_patterns from jenkins_jobs.modules.helpers import artifactory_env_vars_patterns @@ -350,9 +351,18 @@ def trigger_parameterized_builds(parser, xml_parent, data): :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 bool git-revision: Pass git revision to the other job (optional) + :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 bool combine-queued-commits: Combine Queued git hashes. Only valid when 'git-revision' is true. (default false) + + .. deprecated:: 1.4.0. Please use `combine-queued-commits` under the + `git-revision` argument instead. + :arg dict boolean-parameters: Pass boolean parameters to the downstream jobs. Specify the name and boolean value mapping of the parameters. (optional) @@ -446,11 +456,19 @@ def trigger_parameterized_builds(parser, xml_parent, data): properties = XML.SubElement(params, 'properties') properties.text = param_value elif param_type == 'git-revision' and param_value: - params = XML.SubElement(tconfigs, - 'hudson.plugins.git.' - 'GitRevisionBuildParameters') - XML.SubElement(params, 'combineQueuedCommits').text = str( - project_def.get('combine-queued-commits', False)).lower() + if 'combine-queued-commits' in project_def: + logger.warn( + "'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') diff --git a/tests/builders/fixtures/trigger-builds005.xml b/tests/builders/fixtures/trigger-builds005.xml index f950214b..323ff878 100644 --- a/tests/builders/fixtures/trigger-builds005.xml +++ b/tests/builders/fixtures/trigger-builds005.xml @@ -5,6 +5,9 @@ <configs> <hudson.plugins.parameterizedtrigger.BlockableBuildTriggerConfig> <configs> + <hudson.plugins.git.GitRevisionBuildParameters> + <combineQueuedCommits>true</combineQueuedCommits> + </hudson.plugins.git.GitRevisionBuildParameters> <hudson.plugins.parameterizedtrigger.FileBuildParameters> <propertiesFile>propfile.txt</propertiesFile> <failTriggerOnMissing>true</failTriggerOnMissing> diff --git a/tests/builders/fixtures/trigger-builds005.yaml b/tests/builders/fixtures/trigger-builds005.yaml index aa792fc5..16f76094 100644 --- a/tests/builders/fixtures/trigger-builds005.yaml +++ b/tests/builders/fixtures/trigger-builds005.yaml @@ -1,6 +1,8 @@ builders: - trigger-builds: - project: "build_started" + git-revision: + combine-queued-commits: true property-file: propfile.txt block: true block-thresholds: diff --git a/tests/builders/fixtures/trigger-builds007.xml b/tests/builders/fixtures/trigger-builds007.xml new file mode 100644 index 00000000..2a1a13c3 --- /dev/null +++ b/tests/builders/fixtures/trigger-builds007.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<project> + <builders> + <hudson.plugins.parameterizedtrigger.TriggerBuilder> + <configs> + <hudson.plugins.parameterizedtrigger.BlockableBuildTriggerConfig> + <configs class="java.util.Collections$EmptyList"/> + <projects>build_started</projects> + <condition>ALWAYS</condition> + <triggerWithNoParameters>false</triggerWithNoParameters> + <buildAllNodesWithLabel>false</buildAllNodesWithLabel> + </hudson.plugins.parameterizedtrigger.BlockableBuildTriggerConfig> + </configs> + </hudson.plugins.parameterizedtrigger.TriggerBuilder> + </builders> +</project> diff --git a/tests/builders/fixtures/trigger-builds007.yaml b/tests/builders/fixtures/trigger-builds007.yaml new file mode 100644 index 00000000..1b68e02e --- /dev/null +++ b/tests/builders/fixtures/trigger-builds007.yaml @@ -0,0 +1,4 @@ +builders: + - trigger-builds: + - project: "build_started" + git-revision: false
\ No newline at end of file diff --git a/tests/publishers/fixtures/trigger-parameterized-builds001.xml b/tests/publishers/fixtures/trigger-parameterized-builds001.xml new file mode 100644 index 00000000..ec3bc08f --- /dev/null +++ b/tests/publishers/fixtures/trigger-parameterized-builds001.xml @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="utf-8"?> +<project> + <publishers> + <hudson.plugins.parameterizedtrigger.BuildTrigger> + <configs> + <hudson.plugins.parameterizedtrigger.BuildTriggerConfig> + <configs class="java.util.Collections$EmptyList"/> + <projects>fixture</projects> + <condition>SUCCESS</condition> + <triggerWithNoParameters>false</triggerWithNoParameters> + </hudson.plugins.parameterizedtrigger.BuildTriggerConfig> + </configs> + </hudson.plugins.parameterizedtrigger.BuildTrigger> + </publishers> +</project> diff --git a/tests/publishers/fixtures/trigger-parameterized-builds001.yaml b/tests/publishers/fixtures/trigger-parameterized-builds001.yaml new file mode 100644 index 00000000..8da3ce0f --- /dev/null +++ b/tests/publishers/fixtures/trigger-parameterized-builds001.yaml @@ -0,0 +1,4 @@ +publishers: + - trigger-parameterized-builds: + - project: 'fixture' + condition: SUCCESS
\ 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 00000000..6e664f3c --- /dev/null +++ b/tests/publishers/fixtures/trigger-parameterized-builds002.xml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="utf-8"?> +<project> + <publishers> + <hudson.plugins.parameterizedtrigger.BuildTrigger> + <configs> + <hudson.plugins.parameterizedtrigger.BuildTriggerConfig> + <configs> + <hudson.plugins.git.GitRevisionBuildParameters> + <combineQueuedCommits>true</combineQueuedCommits> + </hudson.plugins.git.GitRevisionBuildParameters> + </configs> + <projects>fixture</projects> + <condition>SUCCESS</condition> + <triggerWithNoParameters>false</triggerWithNoParameters> + </hudson.plugins.parameterizedtrigger.BuildTriggerConfig> + </configs> + </hudson.plugins.parameterizedtrigger.BuildTrigger> + </publishers> +</project> diff --git a/tests/publishers/fixtures/trigger-parameterized-builds002.yaml b/tests/publishers/fixtures/trigger-parameterized-builds002.yaml new file mode 100644 index 00000000..c3e3e116 --- /dev/null +++ b/tests/publishers/fixtures/trigger-parameterized-builds002.yaml @@ -0,0 +1,6 @@ +publishers: + - trigger-parameterized-builds: + - project: 'fixture' + condition: SUCCESS + git-revision: + combine-queued-commits: true diff --git a/tests/publishers/fixtures/trigger_parameterized_builds001.xml b/tests/publishers/fixtures/trigger_parameterized_builds001.xml index f4bb7908..9802dbab 100644 --- a/tests/publishers/fixtures/trigger_parameterized_builds001.xml +++ b/tests/publishers/fixtures/trigger_parameterized_builds001.xml @@ -20,6 +20,9 @@ bar=foo <hudson.plugins.parameterizedtrigger.PredefinedBuildParameters> <properties>BUILD_NUM=${BUILD_NUMBER}</properties> </hudson.plugins.parameterizedtrigger.PredefinedBuildParameters> + <hudson.plugins.git.GitRevisionBuildParameters> + <combineQueuedCommits>false</combineQueuedCommits> + </hudson.plugins.git.GitRevisionBuildParameters> <hudson.plugins.parameterizedtrigger.FileBuildParameters> <propertiesFile>version.prop</propertiesFile> <failTriggerOnMissing>true</failTriggerOnMissing> @@ -35,7 +38,7 @@ bar=foo <properties>foo=bar</properties> </hudson.plugins.parameterizedtrigger.PredefinedBuildParameters> <hudson.plugins.git.GitRevisionBuildParameters> - <combineQueuedCommits>false</combineQueuedCommits> + <combineQueuedCommits>true</combineQueuedCommits> </hudson.plugins.git.GitRevisionBuildParameters> <hudson.plugins.parameterizedtrigger.matrix.MatrixSubsetBuildParameters> <filter>label=="x86"</filter> diff --git a/tests/publishers/fixtures/trigger_parameterized_builds001.yaml b/tests/publishers/fixtures/trigger_parameterized_builds001.yaml index bf07fb7b..16ca4de5 100644 --- a/tests/publishers/fixtures/trigger_parameterized_builds001.yaml +++ b/tests/publishers/fixtures/trigger_parameterized_builds001.yaml @@ -9,11 +9,13 @@ publishers: bar=foo - project: other_job1, other_job2 predefined-parameters: BUILD_NUM=${BUILD_NUMBER} + git-revision: true property-file: version.prop fail-on-missing: true - project: yet_another_job predefined-parameters: foo=bar - git-revision: true + git-revision: + combine-queued-commits: true restrict-matrix-project: label=="x86" - project: yet_another_job_2 node-label-name: foo diff --git a/tests/publishers/fixtures/trigger_parameterized_builds003.xml b/tests/publishers/fixtures/trigger_parameterized_builds003.xml index d662d59b..e4dc9205 100644 --- a/tests/publishers/fixtures/trigger_parameterized_builds003.xml +++ b/tests/publishers/fixtures/trigger_parameterized_builds003.xml @@ -36,4 +36,4 @@ </configs> </hudson.plugins.parameterizedtrigger.BuildTrigger> </publishers> -</project>
\ No newline at end of file +</project> |