From 822ecab7d02612a380f5cef81f91719b6510963e Mon Sep 17 00:00:00 2001 From: Pierre Rognant Date: Fri, 4 Oct 2013 14:30:02 -0400 Subject: [PATCH] Flow project support The approach is pretty straigh forward, it consists of one new module handling the project-type "flow". It supports the only field needed by this kind of project an XML block containing the flow description in a custom DSL. Change-Id: I5195391609b3058ae9e24a59024e0cc7a69b16a0 Implements: blueprint jenkins-job-builder-flow --- doc/source/configuration.rst | 4 ++- doc/source/project_flow.rst | 7 +++++ jenkins_jobs/modules/project_flow.py | 47 ++++++++++++++++++++++++++++ setup.py | 1 + 4 files changed, 58 insertions(+), 1 deletion(-) create mode 100644 doc/source/project_flow.rst create mode 100644 jenkins_jobs/modules/project_flow.py diff --git a/doc/source/configuration.rst b/doc/source/configuration.rst index a14ac759c..88ad7f6b0 100644 --- a/doc/source/configuration.rst +++ b/doc/source/configuration.rst @@ -41,7 +41,8 @@ later. There are a few basic optional fields for a Job definition:: block-upstream: false **project-type** - Defaults to "freestyle", but "maven" can also be specified. + Defaults to "freestyle", but "maven" as well as "multijob" or "flow" + can also be specified. **defaults** Specifies a set of `Defaults`_ to use for this job, defaults to @@ -310,6 +311,7 @@ The bulk of the job definitions come from the following modules. .. toctree:: :maxdepth: 2 + project_flow project_freestyle project_maven project_matrix diff --git a/doc/source/project_flow.rst b/doc/source/project_flow.rst new file mode 100644 index 000000000..9b7daba8a --- /dev/null +++ b/doc/source/project_flow.rst @@ -0,0 +1,7 @@ +.. _project_flow: + +Flow Project +================= + +.. automodule:: project_flow + :members: diff --git a/jenkins_jobs/modules/project_flow.py b/jenkins_jobs/modules/project_flow.py new file mode 100644 index 000000000..55b80f35d --- /dev/null +++ b/jenkins_jobs/modules/project_flow.py @@ -0,0 +1,47 @@ +# Copyright (C) 2013 eNovance SAS +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + + +""" +The flow Project module handles creating Jenkins flow projects. +You may specify ``flow`` in the ``project-type`` attribute of +the :ref:`Job` definition. + +Requires the Jenkins `Build Flow Plugin. +`_ + +Example:: + + job: + name: test_job + project-type: flow + dsl: | + build("job1") + parallel ( + { build("job2a") }, + { build("job2b") } + ) +""" + +import xml.etree.ElementTree as XML +import jenkins_jobs.modules.base + + +class Flow(jenkins_jobs.modules.base.Base): + sequence = 0 + + def root_xml(self, data): + xml_parent = XML.Element('com.cloudbees.plugins.flow.BuildFlow') + XML.SubElement(xml_parent, 'dsl').text = data['dsl'] + return xml_parent diff --git a/setup.py b/setup.py index b46876301..8e59dec42 100644 --- a/setup.py +++ b/setup.py @@ -49,6 +49,7 @@ setuptools.setup( 'jenkins-jobs=jenkins_jobs.cmd:main', ], 'jenkins_jobs.projects': [ + 'flow=jenkins_jobs.modules.project_flow:Flow', 'freestyle=jenkins_jobs.modules.project_freestyle:Freestyle', 'matrix=jenkins_jobs.modules.project_matrix:Matrix', 'maven=jenkins_jobs.modules.project_maven:Maven',