Add configurable footer-message reports
Currently there is no way to add extra information to the end of a report sent back by zuul. This adds a 'footer-message' field to the pipelines allowing operators to leave extra information at the end of a build result. This is useful for leaving CI contact and debugging information. Change-Id: Ieae62e845915fa3997353b6b425e215966a9338c
This commit is contained in:
parent
9f1245869b
commit
3979e3e31c
@ -238,6 +238,11 @@ explanation of each of the parameters::
|
||||
reported back to Gerrit when at least one voting build fails.
|
||||
Defaults to "Build failed."
|
||||
|
||||
**footer-message**
|
||||
An optional field to supply additional information after test results.
|
||||
Useful for adding information about the CI system such as debugging
|
||||
and contact details.
|
||||
|
||||
**manager**
|
||||
There are currently two schemes for managing pipelines:
|
||||
|
||||
|
34
tests/fixtures/layout-footer-message.yaml
vendored
Normal file
34
tests/fixtures/layout-footer-message.yaml
vendored
Normal file
@ -0,0 +1,34 @@
|
||||
includes:
|
||||
- python-file: custom_functions.py
|
||||
|
||||
pipelines:
|
||||
- name: gate
|
||||
manager: DependentPipelineManager
|
||||
failure-message: Build failed. For information on how to proceed, see http://wiki.example.org/Test_Failures
|
||||
footer-message: For CI problems and help debugging, contact ci@example.org
|
||||
trigger:
|
||||
gerrit:
|
||||
- event: comment-added
|
||||
approval:
|
||||
- approved: 1
|
||||
success:
|
||||
gerrit:
|
||||
verified: 2
|
||||
submit: true
|
||||
smtp:
|
||||
to: success@example.org
|
||||
failure:
|
||||
gerrit:
|
||||
verified: -2
|
||||
smtp:
|
||||
to: failure@example.org
|
||||
start:
|
||||
gerrit:
|
||||
verified: 0
|
||||
precedence: high
|
||||
|
||||
projects:
|
||||
- name: org/project
|
||||
gate:
|
||||
- test1
|
||||
- test2
|
@ -3640,3 +3640,43 @@ class TestScheduler(testtools.TestCase):
|
||||
self.worker.hold_jobs_in_build = False
|
||||
self.worker.release()
|
||||
self.waitUntilSettled()
|
||||
|
||||
def test_footer_message(self):
|
||||
"Test a pipeline's footer message is correctly added to the report."
|
||||
self.config.set('zuul', 'layout_config',
|
||||
'tests/fixtures/layout-footer-message.yaml')
|
||||
self.sched.reconfigure(self.config)
|
||||
self.registerJobs()
|
||||
|
||||
A = self.fake_gerrit.addFakeChange('org/project', 'master', 'A')
|
||||
A.addApproval('CRVW', 2)
|
||||
self.worker.addFailTest('test1', A)
|
||||
self.fake_gerrit.addEvent(A.addApproval('APRV', 1))
|
||||
self.waitUntilSettled()
|
||||
|
||||
B = self.fake_gerrit.addFakeChange('org/project', 'master', 'B')
|
||||
B.addApproval('CRVW', 2)
|
||||
self.fake_gerrit.addEvent(B.addApproval('APRV', 1))
|
||||
self.waitUntilSettled()
|
||||
|
||||
self.assertEqual(2, len(self.smtp_messages))
|
||||
|
||||
failure_body = """\
|
||||
Build failed. For information on how to proceed, see \
|
||||
http://wiki.example.org/Test_Failures
|
||||
|
||||
- test1 http://logs.example.com/1/1/gate/test1/0 : FAILURE in 0s
|
||||
- test2 http://logs.example.com/1/1/gate/test2/1 : SUCCESS in 0s
|
||||
|
||||
For CI problems and help debugging, contact ci@example.org"""
|
||||
|
||||
success_body = """\
|
||||
Build succeeded.
|
||||
|
||||
- test1 http://logs.example.com/2/1/gate/test1/2 : SUCCESS in 0s
|
||||
- test2 http://logs.example.com/2/1/gate/test2/3 : SUCCESS in 0s
|
||||
|
||||
For CI problems and help debugging, contact ci@example.org"""
|
||||
|
||||
self.assertEqual(failure_body, self.smtp_messages[0]['body'])
|
||||
self.assertEqual(success_body, self.smtp_messages[1]['body'])
|
||||
|
@ -79,6 +79,7 @@ class LayoutSchema(object):
|
||||
'description': str,
|
||||
'success-message': str,
|
||||
'failure-message': str,
|
||||
'footer-message': str,
|
||||
'dequeue-on-new-patchset': bool,
|
||||
'trigger': trigger,
|
||||
'success': report_actions,
|
||||
|
@ -64,6 +64,7 @@ class Pipeline(object):
|
||||
self.description = None
|
||||
self.failure_message = None
|
||||
self.success_message = None
|
||||
self.footer_message = None
|
||||
self.dequeue_on_new_patchset = True
|
||||
self.job_trees = {} # project -> JobTree
|
||||
self.manager = None
|
||||
|
@ -228,6 +228,7 @@ class Scheduler(threading.Thread):
|
||||
"Build failed.")
|
||||
pipeline.success_message = conf_pipeline.get('success-message',
|
||||
"Build succeeded.")
|
||||
pipeline.footer_message = conf_pipeline.get('footer-message', "")
|
||||
pipeline.dequeue_on_new_patchset = conf_pipeline.get(
|
||||
'dequeue-on-new-patchset', True)
|
||||
|
||||
@ -1438,6 +1439,8 @@ class BasePipelineManager(object):
|
||||
name = job.name + ' '
|
||||
ret += '- %s%s : %s%s%s\n' % (name, url, result, elapsed,
|
||||
voting)
|
||||
ret += '\n'
|
||||
ret += self.pipeline.footer_message
|
||||
return ret
|
||||
|
||||
def formatDescription(self, build):
|
||||
|
Loading…
Reference in New Issue
Block a user