Extending uBuild and uDeploy with Plugins
-
Upload
ibm-urbancode-products -
Category
Technology
-
view
5.856 -
download
2
description
Transcript of Extending uBuild and uDeploy with Plugins
Air PluginsExtending and customizing
uDeploy (IBM UrbanCode Deploy) and uBuild (IBM UrbanCode Build)
IBM Corporation ©2013
Presenting Today
Matt: Lead Developer Eric: Consulting
IBM Corporation ©2013
Out of the box integrations – a good start
IBM Corporation ©2013
But your team is unique
So our integrations are “Plug-ins”
IBM Corporation ©2013
Why Plugin-ins?
Make Integrating Easy
IBM Corporation ©2013
Why Plugin-ins?
Wrap existing scripts
IBM Corporation ©2013
Why Plugin-ins?
Custom Fit
IBM Corporation ©2013
The Plan
Plugin Basics Finding and Uploading Plugins The Anatomy of a Plugin Basic Plugin Authoring Tools for Bidirectional Integrations
IBM Corporation ©2013
The Plan
Plugin Basics Finding and Uploading Plugins The Anatomy of a Plugin Basic Plugin Authoring Tools for Bidirectional Integrations
IBM Corporation ©2013
What is a Plugin?
A package that provides new automation capabilities
Format is a zip file containing: Description of ‘steps’ Description of inputs to those steps Scripts or code that execute those steps Upgrade rules
uBuild & uDeploy share a plugin architecture: Air
IBM Corporation ©2013
The Plan
Plugin Basics Finding and Uploading Plugins The Anatomy of a Plugin Basic Plugin Authoring Tools for Bidirectional Integrations
Getting Plugins
IBM Corporation ©2013
1) Go to Plugins.urbancode.com.
IBM Corporation ©2013
2) Download some plugins
IBM Corporation ©2013
3) Load them via the browser
IBM Corporation ©2013
New steps are immediately available
IBM Corporation ©2013
Plugin -> Agent
How: Pulled automatically
When: As it gets used This first execution will appear to take longer as plugin
transport time is rolled into the step.
IBM Corporation ©2013
The Plan
Plugin Basics Finding and Uploading Plugins The Anatomy of a Plugin Basic Plugin Authoring Tools for Bidirectional Integrations
IBM Corporation ©2013
The Anatomy of an Air Plugin
Definition: What steps, input and how to invoke
Upgrade Rules
Info.xml: Versioning
Payload: Scripts, libraries and tools that accomplish
the plugin’s goals
Packaging: Wrap contents in a zip file
IBM Corporation ©2013
Plugin Definition
Expressed in the plugin.xml Definition of properties (settings) used by various
levels of the plugin Lists the steps the plugin makes available and
which commands or scripts to execute
IBM Corporation ©2013
Upgrade Definition
Supports upgrading from one plugin version to the next
Required when: Adding or renaming steps or properties
IBM Corporation ©2013
Payload
Everything that makes the integration “go”
IBM Corporation ©2013
The Plan
Plugin Basics Finding and Uploading Plugins The Anatomy of a Plugin Basic Plugin Authoring Tools for Bidirectional Integrations
IBM Corporation ©2013
Example: Atlassian Jira
Plugin.xml header:
IBM Corporation ©2013
Example: Atlassian Jira
Plugins contain one or more steps. Each has: A description (what is it) Properties (inputs) Post-processing (how do we know if it passed?) A command (how to make it go)
IBM Corporation ©2013
Example: Atlassian Jira
Step properties look like this:
IBM Corporation ©2013
Example: Atlassian Jira - Properties
IBM Corporation ©2013
Example: Atlassian Jira - Properties
IBM Corporation ©2013
Example: Atlassian Jira - Properties
IBM Corporation ©2013
Example: Atlassian Jira – Post-Processing<post-processing> <![CDATA[ if (properties.get("exitCode") != 0){ properties.put( "Status”, "Failure”); } else { properties.put("Status", "Success"); } ]]></post-processing>
IBM Corporation ©2013
Post Processing Fanciness
Look for all instances of “Downloading file x” in the log, and create a property listing all ‘x’.
scanner.register("Downloading file .*", function(lineNumber, line) { line = line.substring("Downloading file '".length); line = line.substring(0, line.length-1)
var changedFiles = properties.get("changedFiles"); if (changedFiles == null) { changedFiles = ""; }
changedFiles = changedFiles+line+"\n"; properties.put("changedFiles", changedFiles);});scanner.scan();
IBM Corporation ©2013
Commands<command program="${GROOVY_HOME}/bin/groovy"> <arg file="replace_tokens.groovy"/> <arg file="${PLUGIN_INPUT_PROPS}"/> <arg file="${PLUGIN_OUTPUT_PROPS}"/></command>
Args may be: value, file or path.
IBM Corporation ©2013
Payloads: Example script
Cross platform un-tar
IBM Corporation ©2013
Payloads: Example script (setup)
final def workDir = new File('.').canonicalFilefinal def props = new Properties();def inputPropsFile = new File(args[0]);inputPropsStream = new FileInputStream(inputPropsFile); props.load(inputPropsStream);
def dirOffset = props['dir']?:'.'def tarball = props['tarball'];def compression = props['compression'];def overwrite = Boolean.valueOf(props['overwrite']);
IBM Corporation ©2013
Payloads: Example script (execution)def ant = new AntBuilder() if (overwrite) { ant.untar( dest:dirOffset, failOnEmptyArchive: 'true', compression: compression, overwrite: 'true', src: tarball) } else { ant.untar( dest:dirOffset, failOnEmptyArchive: 'true', compression: compression, overwrite: 'false', src: tarball) }
You don’t have to use Groovy
IBM Corporation ©2013
Why do we?
Steps can run any script you write. Why does Urbancode usually use Groovy? Groovy is on every agent Groovy cross platform Groovy is very good at XML Groovy is fun to learn, concise and effective
Other good choices: Perl, Ruby, VBScript, Python Etc, etc, etc
IBM Corporation ©2013
Common plugin strategies
Construct a command line call Web services Wrap existing shell & perl scripts Exploit utilities installed with the agent (Ant)
IBM Corporation ©2013
The Plan
Plugin Basics Finding and Uploading Plugins The Anatomy of a Plugin Basic Plugin Authoring Tools for Bidirectional Integrations
IBM Corporation ©2013
uDeploy
Post-processing Easily capture deployment information
Rest services API 2 Wrappers: Command line and Java.
IBM Corporation ©2013
uBuild
Web services accept metrics Construct an XML message Post to web message
IBM Corporation ©2013
uBuild Web services accept metrics
Construct an XML message Post to web message
String url = baseUrl + "rest/buildlife/${buildLifeId}/testcoverage?reportName=${name}”
ProtocolSocketFactory socketFactory = new OpenSSLProtocolSocketFactory()Protocol https = new Protocol("https", socketFactory, 443)Protocol.registerProtocol("https", https)
PostMethod postMethod = new PostMethod(url)if (authToken) { postMethod.setRequestHeader("Authorization-Token", authToken) postMethod.setRequestHeader("Content-Type", "application/xml")} postMethod.setRequestEntity(new StringRequestEntity(xml));HttpClient client = new HttpClient()def responseCode = client.executeMethod(postMethod)
IBM Corporation ©2013
uBuild
Web services accept metrics Construct an XML message Post to web message
Easiest to work from examples
IBM Corporation ©2013
In Summary
Plugins extend Urbancode product’s automation They get you a custom fit Get them from plugins.urbancode.com Creating your own isn’t too hard
IBM Corporation ©2013
Additional Resources on Plugins
Plugins.urbancode.com Plenty of examples
Online Docs Schemas and additional how-to reference. Process flows
Slideshare.net/Urbancode