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:
|
:Job Parameters:
|
||||||
* **project-type**:
|
* **project-type**:
|
||||||
Defaults to "freestyle", but "maven" as well as "multijob", "flow" or
|
Defaults to "freestyle", but "maven" as well as "multijob", "flow",
|
||||||
"externaljob" can also be specified.
|
"workflow" or "externaljob" can also be specified.
|
||||||
|
|
||||||
* **defaults**:
|
* **defaults**:
|
||||||
Specifies a set of :ref:`defaults` to use for this job, defaults to
|
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
|
matrix=jenkins_jobs.modules.project_matrix:Matrix
|
||||||
maven=jenkins_jobs.modules.project_maven:Maven
|
maven=jenkins_jobs.modules.project_maven:Maven
|
||||||
multijob=jenkins_jobs.modules.project_multijob:MultiJob
|
multijob=jenkins_jobs.modules.project_multijob:MultiJob
|
||||||
|
workflow=jenkins_jobs.modules.project_workflow:Workflow
|
||||||
jenkins_jobs.builders =
|
jenkins_jobs.builders =
|
||||||
ant=jenkins_jobs.modules.builders:ant
|
ant=jenkins_jobs.modules.builders:ant
|
||||||
artifact-resolver=jenkins_jobs.modules.builders:artifact_resolver
|
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