Merge "Added config options to not overwrite jobs desc"
This commit is contained in:
commit
90af7a8fc6
@ -46,6 +46,21 @@ the following format:
|
||||
.. literalinclude:: ../../etc/jenkins_jobs.ini-sample
|
||||
:language: ini
|
||||
|
||||
job_builder section
|
||||
^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
**ignore_cache**
|
||||
(Optional) If set to True, Jenkins Job Builder won't use any cache.
|
||||
|
||||
**keep_descriptions**
|
||||
By default `jenkins-jobs` will overwrite the jobs descriptions even if no
|
||||
description has been defined explicitly.
|
||||
When this option is set to True, that behavior changes and it will only
|
||||
overwrite the description if you specified it in the yaml. False by default.
|
||||
|
||||
jenkins section
|
||||
^^^^^^^^^^^^^^^
|
||||
|
||||
**user**
|
||||
This should be the name of a user previously defined in Jenkins.
|
||||
Appropriate user permissions must be set under the Jenkins security
|
||||
@ -61,9 +76,6 @@ the following format:
|
||||
**url**
|
||||
The base URL for your Jenkins installation.
|
||||
|
||||
**ignore_cache**
|
||||
(Optional) If set to True, Jenkins Job Builder won't use any cache.
|
||||
|
||||
|
||||
Running
|
||||
-------
|
||||
|
@ -1,5 +1,10 @@
|
||||
[job_builder]
|
||||
ignore_cache=True
|
||||
keep_descriptions=False
|
||||
|
||||
[jenkins]
|
||||
user=jenkins
|
||||
password=1234567890abcdef1234567890abcdef
|
||||
url=https://jenkins.example.com
|
||||
ignore_cache=True
|
||||
##### This is deprecated, use job_builder section instead
|
||||
#ignore_cache=True
|
||||
|
@ -117,9 +117,10 @@ def matches(what, where):
|
||||
|
||||
class YamlParser(object):
|
||||
def __init__(self, config=None):
|
||||
self.registry = ModuleRegistry(config)
|
||||
self.data = {}
|
||||
self.jobs = []
|
||||
self.config = config
|
||||
self.registry = ModuleRegistry(self.config)
|
||||
|
||||
def parse_fp(self, fp):
|
||||
data = yaml.load(fp)
|
||||
@ -288,8 +289,18 @@ class YamlParser(object):
|
||||
|
||||
def getXMLForJob(self, data):
|
||||
kind = data.get('project-type', 'freestyle')
|
||||
data["description"] = (data.get("description", "") +
|
||||
self.get_managed_string()).lstrip()
|
||||
if self.config:
|
||||
keep_desc = self.config.getboolean('job_builder',
|
||||
'keep_descriptions')
|
||||
else:
|
||||
keep_desc = False
|
||||
if keep_desc:
|
||||
description = data.get("description", None)
|
||||
else:
|
||||
description = data.get("description", '')
|
||||
if description is not None:
|
||||
data["description"] = description + \
|
||||
self.get_managed_string().lstrip()
|
||||
for ep in pkg_resources.iter_entry_points(
|
||||
group='jenkins_jobs.projects', name=kind):
|
||||
Mod = ep.load()
|
||||
|
@ -19,6 +19,19 @@ import logging
|
||||
import os
|
||||
import platform
|
||||
import sys
|
||||
import cStringIO
|
||||
|
||||
|
||||
DEFAULT_CONF = """
|
||||
[job_builder]
|
||||
keep_descriptions=False
|
||||
ignore_cache=False
|
||||
|
||||
[jenkins]
|
||||
url=http://localhost:8080/
|
||||
user=
|
||||
password=
|
||||
"""
|
||||
|
||||
|
||||
def confirm(question):
|
||||
@ -80,20 +93,15 @@ def main():
|
||||
'jenkins_jobs.ini')
|
||||
if os.path.isfile(localconf):
|
||||
conf = localconf
|
||||
|
||||
config = ConfigParser.ConfigParser()
|
||||
if os.path.isfile(conf):
|
||||
## Load default config always
|
||||
config.readfp(cStringIO.StringIO(DEFAULT_CONF))
|
||||
if options.command == 'test':
|
||||
logger.debug("Not reading config for test output generation")
|
||||
elif os.path.isfile(conf):
|
||||
logger.debug("Reading config from {0}".format(conf))
|
||||
conffp = open(conf, 'r')
|
||||
config.readfp(conffp)
|
||||
elif options.command == 'test':
|
||||
## to avoid the 'no section' and 'no option' errors when testing
|
||||
config.add_section("jenkins")
|
||||
config.set("jenkins", "url", "http://localhost:8080")
|
||||
config.set("jenkins", "user", None)
|
||||
config.set("jenkins", "password", None)
|
||||
config.set("jenkins", "ignore_cache", False)
|
||||
logger.debug("Not reading config for test output generation")
|
||||
else:
|
||||
raise jenkins_jobs.errors.JenkinsJobsException(
|
||||
"A valid configuration file is required when not run as a test"
|
||||
@ -107,7 +115,12 @@ def main():
|
||||
if options.ignore_cache:
|
||||
ignore_cache = options.ignore_cache
|
||||
elif config.has_option('jenkins', 'ignore_cache'):
|
||||
logging.warn('ignore_cache option should be moved to the [job_builder]'
|
||||
' section in the config file, the one specified in the '
|
||||
'[jenkins] section will be ignored in the future')
|
||||
ignore_cache = config.get('jenkins', 'ignore_cache')
|
||||
elif config.has_option('job_builder', 'ignore_cache'):
|
||||
ignore_cache = config.get('job_builder', 'ignore_cache')
|
||||
|
||||
# workaround for python 2.6 interpolation error
|
||||
# https://bugs.launchpad.net/openstack-ci/+bug/1259631
|
||||
|
@ -48,9 +48,15 @@ def get_scenarios(fixtures_path):
|
||||
raise Exception(
|
||||
"No XML file named '%s' to match "
|
||||
"YAML file '%s'" % (xml_candidate, yaml_filename))
|
||||
conf_candidate = re.sub(r'\.yaml$', '.conf', yaml_filename)
|
||||
# If present, add the configuration file
|
||||
if conf_candidate not in files:
|
||||
conf_candidate = None
|
||||
|
||||
scenarios.append((yaml_filename, {
|
||||
'yaml_filename': yaml_filename, 'xml_filename': xml_candidate
|
||||
'yaml_filename': yaml_filename,
|
||||
'xml_filename': xml_candidate,
|
||||
'conf_filename': conf_candidate,
|
||||
}))
|
||||
|
||||
return scenarios
|
||||
|
22
tests/yamlparser/fixtures/add_managed_to_desc.xml
Normal file
22
tests/yamlparser/fixtures/add_managed_to_desc.xml
Normal file
@ -0,0 +1,22 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<project>
|
||||
<actions/>
|
||||
<description>My nice description<!-- Managed by Jenkins Job Builder --></description>
|
||||
<keepDependencies>false</keepDependencies>
|
||||
<blockBuildWhenDownstreamBuilding>false</blockBuildWhenDownstreamBuilding>
|
||||
<blockBuildWhenUpstreamBuilding>false</blockBuildWhenUpstreamBuilding>
|
||||
<concurrentBuild>false</concurrentBuild>
|
||||
<canRoam>true</canRoam>
|
||||
<properties/>
|
||||
<scm class="hudson.scm.NullSCM"/>
|
||||
<builders>
|
||||
<hudson.tasks.Shell>
|
||||
<command>#!/usr/bin/env python
|
||||
#
|
||||
print("Doing something cool with python")
|
||||
</command>
|
||||
</hudson.tasks.Shell>
|
||||
</builders>
|
||||
<publishers/>
|
||||
<buildWrappers/>
|
||||
</project>
|
13
tests/yamlparser/fixtures/add_managed_to_desc.yaml
Normal file
13
tests/yamlparser/fixtures/add_managed_to_desc.yaml
Normal file
@ -0,0 +1,13 @@
|
||||
- project:
|
||||
name: add_managed_to_desc
|
||||
jobs:
|
||||
- 'add_managed_to_desc'
|
||||
|
||||
- job-template:
|
||||
name: 'add_managed_to_desc'
|
||||
description: 'My nice description'
|
||||
builders:
|
||||
- shell: |
|
||||
#!/usr/bin/env python
|
||||
#
|
||||
print("Doing something cool with python")
|
@ -66,14 +66,14 @@
|
||||
choosing-strategy: gerrit
|
||||
|
||||
- project:
|
||||
name: test
|
||||
name: complete001
|
||||
version:
|
||||
- 1.2
|
||||
jobs:
|
||||
- 'build_myproject_{version}'
|
||||
- 'complete001_{version}'
|
||||
|
||||
- job-template:
|
||||
name: 'build_myproject_{version}'
|
||||
name: 'complete001_{version}'
|
||||
scm:
|
||||
- gerrit-scm:
|
||||
project_pattern: openstack-infra/jenkins-job-builder
|
||||
|
2
tests/yamlparser/fixtures/dont_overwrite_desc.conf
Normal file
2
tests/yamlparser/fixtures/dont_overwrite_desc.conf
Normal file
@ -0,0 +1,2 @@
|
||||
[job_builder]
|
||||
keep_descriptions = True
|
21
tests/yamlparser/fixtures/dont_overwrite_desc.xml
Normal file
21
tests/yamlparser/fixtures/dont_overwrite_desc.xml
Normal file
@ -0,0 +1,21 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<project>
|
||||
<actions/>
|
||||
<keepDependencies>false</keepDependencies>
|
||||
<blockBuildWhenDownstreamBuilding>false</blockBuildWhenDownstreamBuilding>
|
||||
<blockBuildWhenUpstreamBuilding>false</blockBuildWhenUpstreamBuilding>
|
||||
<concurrentBuild>false</concurrentBuild>
|
||||
<canRoam>true</canRoam>
|
||||
<properties/>
|
||||
<scm class="hudson.scm.NullSCM"/>
|
||||
<builders>
|
||||
<hudson.tasks.Shell>
|
||||
<command>#!/usr/bin/env python
|
||||
#
|
||||
print("Doing something cool with python")
|
||||
</command>
|
||||
</hudson.tasks.Shell>
|
||||
</builders>
|
||||
<publishers/>
|
||||
<buildWrappers/>
|
||||
</project>
|
12
tests/yamlparser/fixtures/dont_overwrite_desc.yaml
Normal file
12
tests/yamlparser/fixtures/dont_overwrite_desc.yaml
Normal file
@ -0,0 +1,12 @@
|
||||
- project:
|
||||
name: dont_overwrite_desc
|
||||
jobs:
|
||||
- 'dont_overwrite_desc'
|
||||
|
||||
- job-template:
|
||||
name: 'dont_overwrite_desc'
|
||||
builders:
|
||||
- shell: |
|
||||
#!/usr/bin/env python
|
||||
#
|
||||
print("Doing something cool with python")
|
@ -16,6 +16,7 @@
|
||||
# under the License.
|
||||
|
||||
import os
|
||||
from ConfigParser import ConfigParser
|
||||
from testtools import TestCase
|
||||
from testscenarios.testcase import TestWithScenarios
|
||||
from tests.base import get_scenarios, BaseTestCase
|
||||
@ -37,7 +38,14 @@ class TestCaseModuleYamlInclude(TestWithScenarios, TestCase, BaseTestCase):
|
||||
|
||||
yaml_filepath = os.path.join(self.fixtures_path, self.yaml_filename)
|
||||
|
||||
parser = YamlParser()
|
||||
if self.conf_filename:
|
||||
config = ConfigParser()
|
||||
conf_filepath = os.path.join(self.fixtures_path,
|
||||
self.conf_filename)
|
||||
config.readfp(open(conf_filepath))
|
||||
else:
|
||||
config = None
|
||||
parser = YamlParser(config)
|
||||
parser.parse(yaml_filepath)
|
||||
|
||||
# Generate the XML tree
|
||||
|
Loading…
Reference in New Issue
Block a user