Load from files
diff --git a/README.rst b/README.rst
index b4bc7e6..c11b4cf 100644
--- a/README.rst
+++ b/README.rst
@@ -150,7 +150,7 @@
description: multi-liner
default: default_text
-Groovy script samples
+Inline Groovy script samples
.. code-block:: yaml
@@ -187,6 +187,27 @@
}
+GIT controlled groovy script samples
+
+.. code-block:: yaml
+
+ jenkins:
+ client:
+ source:
+ engine: git
+ address: repo_url
+ branch: branch
+ job:
+ test_workflow_jenkins_simple:
+ type: workflow
+ display_name: Test jenkins simple workflow
+ script_file: jobs/test_workflow_jenkins_simple.groovy
+ test_workflow_jenkins_input:
+ type: workflow
+ display_name: Test jenkins workflow inputs
+ script_file: jobs/test_workflow_jenkins_input.groovy
+
+
Usage
=====
diff --git a/jenkins/client.sls b/jenkins/client.sls
index 8bb0010..80a4af6 100644
--- a/jenkins/client.sls
+++ b/jenkins/client.sls
@@ -7,7 +7,9 @@
jenkins_client_dirs:
file.directory:
- - name: /srv/salt/env/dev/_jenkins_jobs
+ - names:
+ - /srv/jenkins
+ - {{ client.dir.salt_root }}/_jenkins/cache
- makedirs: true
/etc/salt/minion.d/_jenkins.conf:
@@ -15,9 +17,31 @@
- source: salt://jenkins/files/_jenkins.conf
- template: jinja
+{%- if client.source.engine == "git" %}
+
+reclass_data_source:
+ git.latest:
+ - name: {{ client.source.address }}
+ - target: {{ client.dir.jenkins_root }}
+ - rev: {{ client.source.branch }}
+ - reload_pillar: True
+
+{%- elif client.source.engine == "local" %}
+
+reclass_data_dir:
+ file.managed:
+ - name: {{ client.dir.jenkins_root }}
+ - mode: 700
+
+{%- endif %}
+
+{{ client.dir.salt_root }}/_jenkins/jobs:
+ file.symlink:
+ - target: {{ client.dir.jenkins_root }}
+
{%- for job_name, job in client.job.iteritems() %}
-/srv/salt/env/dev/_jenkins_jobs/{{ job_name }}.xml:
+{{ client.dir.salt_root }}/_jenkins/cache/{{ job_name }}.xml:
file.managed:
- source: salt://jenkins/files/jobs/{{ job.type }}.xml
- mode: 400
@@ -33,7 +57,7 @@
- name: {{ job_name }}
- config: salt://_jenkins_jobs/{{ job_name }}.xml
- require:
- - file: /srv/salt/env/dev/_jenkins_jobs/{{ job_name }}.xml
+ - file: {{ client.dir.salt_root }}/_jenkins/cache/{{ job_name }}.xml
{%- endfor %}
diff --git a/jenkins/files/jobs/workflow.xml b/jenkins/files/jobs/workflow.xml
index 9b10270..84b06bb 100644
--- a/jenkins/files/jobs/workflow.xml
+++ b/jenkins/files/jobs/workflow.xml
@@ -1,5 +1,9 @@
{%- from "jenkins/map.jinja" import client with context %}
{%- set job = salt['pillar.get']('jenkins:client:job:'+job_name) -%}
+{%- macro load_groovy_file() %}
+{%- set groovy_file='_jenkins/jobs/'+job.script_file %}
+{%- include groovy_file %}
+{%- endmacro %}
<?xml version='1.0' encoding='UTF-8'?>
<flow-definition plugin="workflow-job@2.5">
<description>{{ job.get('description', 'Salt generated, do not edit.') }}</description>
@@ -27,7 +31,9 @@
</a>
</choices>
{%- endif %}
+ {%- if param.default is defined %}
<defaultValue>{{ param.default|e }}</defaultValue>
+ {%- endif %}
</hudson.model.{{ client.param[param.type] }}ParameterDefinition>
{%- endfor %}
</parameterDefinitions>
@@ -35,7 +41,7 @@
{%- endif %}
</properties>
<definition class="org.jenkinsci.plugins.workflow.cps.CpsFlowDefinition" plugin="workflow-cps@2.12">
- <script>{{ job.script|e }}</script>
+ <script>{% if job.script_file is defined %}{{ load_groovy_file()|e }}{% else %}{{ job.script|e }}{% endif %}</script>
<sandbox>true</sandbox>
</definition>
<triggers>
diff --git a/jenkins/map.jinja b/jenkins/map.jinja
index 7336d88..efe6814 100644
--- a/jenkins/map.jinja
+++ b/jenkins/map.jinja
@@ -64,9 +64,17 @@
'Debian': {
'pkgs': ['python-jenkins'],
'param': param,
+ 'dir': {
+ 'salt_root': '/srv/salt/env/dev',
+ 'jenkins_root': '/srv/jenkins/client',
+ }
},
'RedHat': {
'pkgs': ['python-jenkins'],
'param': param,
+ 'dir': {
+ 'salt_root': '/srv/salt/env/dev',
+ 'jenkins_root': '/srv/jenkins/client',
+ }
},
}, merge=salt['pillar.get']('jenkins:client')) %}