summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristoffer Skeppstedt <c.skeppstedt@gmail.com>2014-09-30 09:18:04 +0200
committerDarragh Bailey <dbailey@hpe.com>2016-04-25 19:04:11 +0100
commit50bc586ec5cc2e9c9ad194bcf198e513e42c0d7d (patch)
tree0b0e44cf0b6f79f38c109d08a32004e31d8f2614
parent915a36f449b501757081c9668f7fadca6686b1c8 (diff)
downloadpython-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
-rw-r--r--jenkins_jobs/modules/builders.py16
-rw-r--r--jenkins_jobs/modules/helpers.py15
-rw-r--r--jenkins_jobs/modules/publishers.py30
-rw-r--r--tests/builders/fixtures/trigger-builds005.xml3
-rw-r--r--tests/builders/fixtures/trigger-builds005.yaml2
-rw-r--r--tests/builders/fixtures/trigger-builds007.xml16
-rw-r--r--tests/builders/fixtures/trigger-builds007.yaml4
-rw-r--r--tests/publishers/fixtures/trigger-parameterized-builds001.xml15
-rw-r--r--tests/publishers/fixtures/trigger-parameterized-builds001.yaml4
-rw-r--r--tests/publishers/fixtures/trigger-parameterized-builds002.xml19
-rw-r--r--tests/publishers/fixtures/trigger-parameterized-builds002.yaml6
-rw-r--r--tests/publishers/fixtures/trigger_parameterized_builds001.xml5
-rw-r--r--tests/publishers/fixtures/trigger_parameterized_builds001.yaml4
-rw-r--r--tests/publishers/fixtures/trigger_parameterized_builds003.xml2
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==&quot;x86&quot;</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>