From 8bcd0d0bd2caf9d28d4f55cba712afb20654b591 Mon Sep 17 00:00:00 2001 From: Jerome Hourquebie Date: Tue, 9 Jun 2015 14:58:51 +0200 Subject: [PATCH] Add cloudbees folder creation support Add project folder module. Jenkins folder could be made with project-type: folder This requires Cloudbees folder plugin and python-jenkins folder update (see: https://review.openstack.org/#/c/180185/) Change-Id: I7e1c28c26a69ae6ca736cec88fcb957a716d8fad --- doc/source/project_folder.rst | 7 +++ jenkins_jobs/modules/project_folder.py | 57 +++++++++++++++++++ setup.cfg | 1 + .../fixtures/project_folder_template001.xml | 20 +++++++ .../fixtures/project_folder_template001.yaml | 3 + .../fixtures/project_folder_template002.xml | 20 +++++++ .../fixtures/project_folder_template002.yaml | 8 +++ 7 files changed, 116 insertions(+) create mode 100644 doc/source/project_folder.rst create mode 100644 jenkins_jobs/modules/project_folder.py create mode 100644 tests/yamlparser/fixtures/project_folder_template001.xml create mode 100644 tests/yamlparser/fixtures/project_folder_template001.yaml create mode 100644 tests/yamlparser/fixtures/project_folder_template002.xml create mode 100644 tests/yamlparser/fixtures/project_folder_template002.yaml diff --git a/doc/source/project_folder.rst b/doc/source/project_folder.rst new file mode 100644 index 000000000..1d5b70a6c --- /dev/null +++ b/doc/source/project_folder.rst @@ -0,0 +1,7 @@ +.. _project_folder: + +Folder Project +================= + +.. automodule:: project_folder + :members: diff --git a/jenkins_jobs/modules/project_folder.py b/jenkins_jobs/modules/project_folder.py new file mode 100644 index 000000000..ac6e6bddd --- /dev/null +++ b/jenkins_jobs/modules/project_folder.py @@ -0,0 +1,57 @@ +# -*- coding: utf-8 -*- +# Copyright (C) 2015 Cisco Systems, Inc. +# +# 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 folder Project module handles creating Jenkins folder projects. +You may specify ``folder`` in the ``project-type`` attribute of +the :ref:`Job` definition. + +Requires the Jenkins :jenkins-wiki:`CloudBees Folder Plugin +`. + +Job example: + + .. literalinclude:: + /../../tests/yamlparser/fixtures/project_folder_template001.yaml + +Job template example: + + .. literalinclude:: + /../../tests/yamlparser/fixtures/project_folder_template002.yaml + +""" + +import xml.etree.ElementTree as XML +import jenkins_jobs.modules.base + + +class Folder(jenkins_jobs.modules.base.Base): + sequence = 0 + + def root_xml(self, data): + xml_parent = XML.Element('com.cloudbees.hudson.plugins.folder.Folder', + plugin="cloudbees-folder") + XML.SubElement(xml_parent, 'actions') + attributes = {"class": "com.cloudbees.hudson.plugins.folder." + "icons.StockFolderIcon"} + XML.SubElement(xml_parent, 'icon', attrib=attributes) + XML.SubElement(xml_parent, 'views') + attributes = {"class": "hudson.views.DefaultViewsTabBar"} + XML.SubElement(xml_parent, 'viewsTabBar', attrib=attributes) + XML.SubElement(xml_parent, 'primaryView').text = 'All' + XML.SubElement(xml_parent, 'healthMetrics') + + return xml_parent diff --git a/setup.cfg b/setup.cfg index 1d5a34aab..77edb7e6a 100644 --- a/setup.cfg +++ b/setup.cfg @@ -44,6 +44,7 @@ jjb.cli.subcommands = jenkins_jobs.projects = externaljob=jenkins_jobs.modules.project_externaljob:ExternalJob flow=jenkins_jobs.modules.project_flow:Flow + folder=jenkins_jobs.modules.project_folder:Folder freestyle=jenkins_jobs.modules.project_freestyle:Freestyle matrix=jenkins_jobs.modules.project_matrix:Matrix maven=jenkins_jobs.modules.project_maven:Maven diff --git a/tests/yamlparser/fixtures/project_folder_template001.xml b/tests/yamlparser/fixtures/project_folder_template001.xml new file mode 100644 index 000000000..38cd68d01 --- /dev/null +++ b/tests/yamlparser/fixtures/project_folder_template001.xml @@ -0,0 +1,20 @@ + + + + + + + All + + + <!-- Managed by Jenkins Job Builder --> + false + false + false + false + true + + + + + diff --git a/tests/yamlparser/fixtures/project_folder_template001.yaml b/tests/yamlparser/fixtures/project_folder_template001.yaml new file mode 100644 index 000000000..0a4994901 --- /dev/null +++ b/tests/yamlparser/fixtures/project_folder_template001.yaml @@ -0,0 +1,3 @@ +- job: + name: folder_test + project-type: folder diff --git a/tests/yamlparser/fixtures/project_folder_template002.xml b/tests/yamlparser/fixtures/project_folder_template002.xml new file mode 100644 index 000000000..38cd68d01 --- /dev/null +++ b/tests/yamlparser/fixtures/project_folder_template002.xml @@ -0,0 +1,20 @@ + + + + + + + All + + + <!-- Managed by Jenkins Job Builder --> + false + false + false + false + true + + + + + diff --git a/tests/yamlparser/fixtures/project_folder_template002.yaml b/tests/yamlparser/fixtures/project_folder_template002.yaml new file mode 100644 index 000000000..4af049cd8 --- /dev/null +++ b/tests/yamlparser/fixtures/project_folder_template002.yaml @@ -0,0 +1,8 @@ +- job-template: + name: 'folder-{name}' + project-type: folder + +- project: + name: test + jobs: + - 'folder-{name}'