Add Parameterized Remote Trigger Plugin support.

Trigger build of job on remote Jenkins instance.  Requires the Jenkins
Parameterized Remote Trigger Plugin:

https://wiki.jenkins-ci.org/display/JENKINS/Parameterized+Remote+Trigger+Plugin

Please note that this plugin requires system configuration on the Jenkins Master
that is unavailable from individual job views; specifically, one must add remote
jenkins servers whose 'Display Name' field are what make up valid fields on the
`remote-jenkins-name` attribute below.

Change-Id: I88a653b315b8609ba016e88d77156544dacd68ea
This commit is contained in:
Wayne 2015-01-27 01:09:13 -08:00
parent 9481e9207b
commit 271917c757
6 changed files with 158 additions and 0 deletions

View File

@ -277,6 +277,103 @@ def ant(parser, xml_parent, data):
XML.SubElement(ant, 'antName').text = data.get('ant-name', 'default')
def trigger_remote(parser, xml_parent, data):
"""yaml: trigger-remote
Trigger build of job on remote Jenkins instance.
:jenkins-wiki:`Parameterized Remote Trigger Plugin
<Parameterized+Remote+Trigger+Plugin>`
Please note that this plugin requires system configuration on the Jenkins
Master that is unavailable from individual job views; specifically, one
must add remote jenkins servers whose 'Display Name' field are what make up
valid fields on the `remote-jenkins-name` attribute below.
:arg str remote-jenkins-name: the remote Jenkins server (required)
:arg str job: the Jenkins project to trigger on the remote Jenkins server
(required)
:arg bool should-not-fail-build:
if true, remote job failure will not lead current job to fail
(default false)
:arg bool prevent-remote-build-queue:
if true, wait to trigger remote builds until no other builds
(default false)
:arg bool block: whether to wait for the trigger jobs to finish or not
(default true)
:arg str poll-interval: polling interval in seconds for checking statues of
triggered remote job, only necessary if current job is configured to
block
(default 10)
:arg str connection-retry-limit: number of connection attempts to remote
Jenkins server before giving up.
(default 5)
:arg str predefined-parameters: predefined parameters to send to the remote
job when triggering it
(optional)
:arg str property-file: file in workspace of current job containing
additional parameters to be set on remote job
(optional)
Example:
.. literalinclude:: \
/../../tests/builders/fixtures/trigger-remote/trigger-remote001.yaml
:language: yaml
"""
triggerr = XML.SubElement(xml_parent,
'org.jenkinsci.plugins.'
'ParameterizedRemoteTrigger.'
'RemoteBuildConfiguration')
XML.SubElement(triggerr,
'remoteJenkinsName').text = data.get('remote-jenkins-name')
XML.SubElement(triggerr, 'token').text = data.get('token', '')
for attribute in ['job', 'remote-jenkins-name']:
if attribute not in data:
raise MissingAttributeError(attribute, "builders.trigger-remote")
if data[attribute] == '':
raise InvalidAttributeError(attribute,
data[attribute],
"builders.trigger-remote")
XML.SubElement(triggerr, 'job').text = data.get('job')
XML.SubElement(triggerr, 'shouldNotFailBuild').text = str(
data.get('should-not-fail-build', False)).lower()
XML.SubElement(triggerr,
'pollInterval').text = str(data.get('poll-interval', 10))
XML.SubElement(triggerr, 'connectionRetryLimit').text = str(
data.get('connection-retry-limit', 5))
XML.SubElement(triggerr, 'preventRemoteBuildQueue').text = str(
data.get('prevent-remote-build-queue', False)).lower()
XML.SubElement(triggerr, 'blockBuildUntilComplete').text = str(
data.get('block', True)).lower()
if 'predefined-parameters' in data:
parameters = XML.SubElement(triggerr, 'parameters')
parameters.text = data.get('predefined-parameters', '')
params_list = parameters.text.split("\n")
parameter_list = XML.SubElement(triggerr, 'parameterList')
for param in params_list:
if param == '':
continue
tmp = XML.SubElement(parameter_list, 'string')
tmp.text = param
if 'property-file' in data and data['property-file'] != '':
XML.SubElement(triggerr, 'loadParamsFromFile').text = 'true'
XML.SubElement(triggerr,
'parameterFile').text = data.get('property-file')
else:
XML.SubElement(triggerr, 'loadParamsFromFile').text = 'false'
XML.SubElement(triggerr, 'overrideAuth').text = "false"
def trigger_builds(parser, xml_parent, data):
"""yaml: trigger-builds
Trigger builds of other jobs.

View File

@ -78,6 +78,7 @@ jenkins_jobs.builders =
ssh-builder=jenkins_jobs.modules.builders:ssh_builder
system-groovy=jenkins_jobs.modules.builders:system_groovy
trigger-builds=jenkins_jobs.modules.builders:trigger_builds
trigger-remote=jenkins_jobs.modules.builders:trigger_remote
jenkins_jobs.reporters =
email=jenkins_jobs.modules.reporters:email
findbugs=jenkins_jobs.modules.reporters:findbugs

View File

@ -0,0 +1,25 @@
<?xml version="1.0" encoding="utf-8"?>
<project>
<builders>
<org.jenkinsci.plugins.ParameterizedRemoteTrigger.RemoteBuildConfiguration>
<remoteJenkinsName>http://example.jenkinsmaster.lan</remoteJenkinsName>
<token>BLAH</token>
<job>build-things</job>
<shouldNotFailBuild>false</shouldNotFailBuild>
<pollInterval>5</pollInterval>
<connectionRetryLimit>5</connectionRetryLimit>
<preventRemoteBuildQueue>true</preventRemoteBuildQueue>
<blockBuildUntilComplete>true</blockBuildUntilComplete>
<parameters>FOO=&quot;bar&quot;
herp=&quot;derp&quot;
</parameters>
<parameterList>
<string>FOO=&quot;bar&quot;</string>
<string>herp=&quot;derp&quot;</string>
</parameterList>
<loadParamsFromFile>true</loadParamsFromFile>
<parameterFile>.props</parameterFile>
<overrideAuth>false</overrideAuth>
</org.jenkinsci.plugins.ParameterizedRemoteTrigger.RemoteBuildConfiguration>
</builders>
</project>

View File

@ -0,0 +1,14 @@
builders:
- trigger-remote:
remote-jenkins-name: "http://example.jenkinsmaster.lan"
token: "BLAH"
job: "build-things"
should-fail-build: True
prevent-remote-build-queue: True
poll-interval: 5
connection-retry-limit: 5
block: true
property-file: '.props'
predefined-parameters: |
FOO="bar"
herp="derp"

View File

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<project>
<builders>
<org.jenkinsci.plugins.ParameterizedRemoteTrigger.RemoteBuildConfiguration>
<remoteJenkinsName>http://example.jenkinsmaster.lan</remoteJenkinsName>
<token/>
<job>build-things</job>
<shouldNotFailBuild>false</shouldNotFailBuild>
<pollInterval>10</pollInterval>
<connectionRetryLimit>5</connectionRetryLimit>
<preventRemoteBuildQueue>false</preventRemoteBuildQueue>
<blockBuildUntilComplete>true</blockBuildUntilComplete>
<loadParamsFromFile>false</loadParamsFromFile>
<overrideAuth>false</overrideAuth>
</org.jenkinsci.plugins.ParameterizedRemoteTrigger.RemoteBuildConfiguration>
</builders>
</project>

View File

@ -0,0 +1,4 @@
builders:
- trigger-remote:
remote-jenkins-name: "http://example.jenkinsmaster.lan"
job: "build-things"