Added support for the workflow job type
There's a relatively new workflow plugin, based on the old build flow one Change-Id: I5541443e15335839754afee59f1b74ed29ce6676 Signed-off-by: David Caro <dcaroest@redhat.com>
This commit is contained in:
parent
294dea66b2
commit
9477275592
@ -21,8 +21,8 @@ Example:
|
||||
|
||||
:Job Parameters:
|
||||
* **project-type**:
|
||||
Defaults to "freestyle", but "maven" as well as "multijob", "flow" or
|
||||
"externaljob" can also be specified.
|
||||
Defaults to "freestyle", but "maven" as well as "multijob", "flow",
|
||||
"workflow" or "externaljob" can also be specified.
|
||||
|
||||
* **defaults**:
|
||||
Specifies a set of :ref:`defaults` to use for this job, defaults to
|
||||
|
73
jenkins_jobs/modules/project_workflow.py
Normal file
73
jenkins_jobs/modules/project_workflow.py
Normal file
@ -0,0 +1,73 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Copyright (C) 2015 David Caro <david@dcaro.es>
|
||||
#
|
||||
# Based on jenkins_jobs/modules/project_flow.py by
|
||||
# Copyright (C) 2013 eNovance SAS <licensing@enovance.com>
|
||||
#
|
||||
# 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 workflow Project module handles creating Jenkins workflow projects.
|
||||
You may specify ``workflow`` in the ``project-type`` attribute of
|
||||
the :ref:`Job` definition.
|
||||
For now only inline scripts are supported.
|
||||
|
||||
Requires the Jenkins :jenkins-wiki:`Workflow Plugin <Workflow+Plugin>`.
|
||||
|
||||
In order to use it for job-template you have to escape the curly braces by
|
||||
doubling them in the DSL: { -> {{ , otherwise it will be interpreted by the
|
||||
python str.format() command.
|
||||
|
||||
:Job Parameters:
|
||||
* **dsl** (`str`): The DSL content.
|
||||
* **sandbox** (`bool`): If the script should run in a sandbox (default
|
||||
false)
|
||||
|
||||
Job example:
|
||||
|
||||
.. literalinclude::
|
||||
/../../tests/yamlparser/fixtures/project_workflow_template001.yaml
|
||||
|
||||
Job template example:
|
||||
|
||||
.. literalinclude::
|
||||
/../../tests/yamlparser/fixtures/project_workflow_template002.yaml
|
||||
|
||||
"""
|
||||
import xml.etree.ElementTree as XML
|
||||
|
||||
import jenkins_jobs.modules.base
|
||||
from jenkins_jobs.errors import MissingAttributeError
|
||||
|
||||
|
||||
class Workflow(jenkins_jobs.modules.base.Base):
|
||||
sequence = 0
|
||||
|
||||
def root_xml(self, data):
|
||||
xml_parent = XML.Element('flow-definition',
|
||||
{'plugin': 'workflow-job'})
|
||||
xml_definition = XML.SubElement(xml_parent, 'definition',
|
||||
{'plugin': 'workflow-cps',
|
||||
'class': 'org.jenkinsci.plugins.'
|
||||
'workflow.cps.CpsFlowDefinition'})
|
||||
try:
|
||||
XML.SubElement(xml_definition, 'script').text = data['dsl']
|
||||
except KeyError as e:
|
||||
raise MissingAttributeError(e.arg[0])
|
||||
|
||||
needs_workspace = data.get('sandbox', False)
|
||||
XML.SubElement(xml_definition, 'sandbox').text = str(
|
||||
needs_workspace).lower()
|
||||
|
||||
return xml_parent
|
@ -43,6 +43,7 @@ jenkins_jobs.projects =
|
||||
matrix=jenkins_jobs.modules.project_matrix:Matrix
|
||||
maven=jenkins_jobs.modules.project_maven:Maven
|
||||
multijob=jenkins_jobs.modules.project_multijob:MultiJob
|
||||
workflow=jenkins_jobs.modules.project_workflow:Workflow
|
||||
jenkins_jobs.builders =
|
||||
ant=jenkins_jobs.modules.builders:ant
|
||||
artifact-resolver=jenkins_jobs.modules.builders:artifact_resolver
|
||||
|
25
tests/yamlparser/fixtures/project_workflow_template001.xml
Normal file
25
tests/yamlparser/fixtures/project_workflow_template001.xml
Normal file
@ -0,0 +1,25 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<flow-definition plugin="workflow-job">
|
||||
<definition class="org.jenkinsci.plugins.workflow.cps.CpsFlowDefinition" plugin="workflow-cps">
|
||||
<script>build job: "job1"
|
||||
parallel [
|
||||
2a: build job: "job2a",
|
||||
2b: node "dummynode" {
|
||||
sh "echo I'm alive!"
|
||||
}
|
||||
]
|
||||
</script>
|
||||
<sandbox>false</sandbox>
|
||||
</definition>
|
||||
<actions/>
|
||||
<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"/>
|
||||
<publishers/>
|
||||
<buildWrappers/>
|
||||
</flow-definition>
|
11
tests/yamlparser/fixtures/project_workflow_template001.yaml
Normal file
11
tests/yamlparser/fixtures/project_workflow_template001.yaml
Normal file
@ -0,0 +1,11 @@
|
||||
- job:
|
||||
name: test_job
|
||||
project-type: workflow
|
||||
dsl: |
|
||||
build job: "job1"
|
||||
parallel [
|
||||
2a: build job: "job2a",
|
||||
2b: node "dummynode" {
|
||||
sh "echo I'm alive!"
|
||||
}
|
||||
]
|
25
tests/yamlparser/fixtures/project_workflow_template002.xml
Normal file
25
tests/yamlparser/fixtures/project_workflow_template002.xml
Normal file
@ -0,0 +1,25 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<flow-definition plugin="workflow-job">
|
||||
<definition class="org.jenkinsci.plugins.workflow.cps.CpsFlowDefinition" plugin="workflow-cps">
|
||||
<script>build job: "job1"
|
||||
parallel [
|
||||
2a: build job: "job2a",
|
||||
2b: node "dummynode" {
|
||||
sh "echo hello"
|
||||
}
|
||||
]
|
||||
</script>
|
||||
<sandbox>false</sandbox>
|
||||
</definition>
|
||||
<actions/>
|
||||
<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"/>
|
||||
<publishers/>
|
||||
<buildWrappers/>
|
||||
</flow-definition>
|
22
tests/yamlparser/fixtures/project_workflow_template002.yaml
Normal file
22
tests/yamlparser/fixtures/project_workflow_template002.yaml
Normal file
@ -0,0 +1,22 @@
|
||||
- job-template:
|
||||
name: '{name}-unit-tests'
|
||||
project-type: workflow
|
||||
dsl: |
|
||||
build job: "job1"
|
||||
parallel [
|
||||
2a: build job: "job2a",
|
||||
2b: node "dummynode" {{
|
||||
sh "echo {isay}"
|
||||
}}
|
||||
]
|
||||
|
||||
- job-group:
|
||||
name: '{name}-tests'
|
||||
jobs:
|
||||
- '{name}-unit-tests':
|
||||
isay: 'hello'
|
||||
|
||||
- project:
|
||||
name: project-name
|
||||
jobs:
|
||||
- '{name}-tests'
|
25
tests/yamlparser/fixtures/project_workflow_template003.xml
Normal file
25
tests/yamlparser/fixtures/project_workflow_template003.xml
Normal file
@ -0,0 +1,25 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<flow-definition plugin="workflow-job">
|
||||
<definition class="org.jenkinsci.plugins.workflow.cps.CpsFlowDefinition" plugin="workflow-cps">
|
||||
<script>build job: "job1"
|
||||
parallel [
|
||||
2a: build job: "job2a",
|
||||
2b: node "dummynode" {
|
||||
sh "echo hello"
|
||||
}
|
||||
]
|
||||
</script>
|
||||
<sandbox>true</sandbox>
|
||||
</definition>
|
||||
<actions/>
|
||||
<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"/>
|
||||
<publishers/>
|
||||
<buildWrappers/>
|
||||
</flow-definition>
|
23
tests/yamlparser/fixtures/project_workflow_template003.yaml
Normal file
23
tests/yamlparser/fixtures/project_workflow_template003.yaml
Normal file
@ -0,0 +1,23 @@
|
||||
- job-template:
|
||||
name: '{name}-unit-tests'
|
||||
project-type: workflow
|
||||
dsl: |
|
||||
build job: "job1"
|
||||
parallel [
|
||||
2a: build job: "job2a",
|
||||
2b: node "dummynode" {{
|
||||
sh "echo {isay}"
|
||||
}}
|
||||
]
|
||||
sandbox: true
|
||||
|
||||
- job-group:
|
||||
name: '{name}-tests'
|
||||
jobs:
|
||||
- '{name}-unit-tests':
|
||||
isay: 'hello'
|
||||
|
||||
- project:
|
||||
name: project-name
|
||||
jobs:
|
||||
- '{name}-tests'
|
Loading…
Reference in New Issue
Block a user