Extending uBuild and uDeploy with Plugins

47
Air Plugins Extending and customizing uDeploy (IBM UrbanCode Deploy) and uBuild (IBM UrbanCode Build)

description

Tutorial for finding, using and creating plugins in the 'Air' framework by Urbancode.

Transcript of Extending uBuild and uDeploy with Plugins

Page 1: Extending uBuild and uDeploy with Plugins

Air PluginsExtending and customizing

uDeploy (IBM UrbanCode Deploy) and uBuild (IBM UrbanCode Build)

Page 2: Extending uBuild and uDeploy with Plugins

IBM Corporation ©2013

Presenting Today

Matt: Lead Developer Eric: Consulting

Page 3: Extending uBuild and uDeploy with Plugins

IBM Corporation ©2013

Out of the box integrations – a good start

Page 4: Extending uBuild and uDeploy with Plugins

IBM Corporation ©2013

But your team is unique

Page 5: Extending uBuild and uDeploy with Plugins

So our integrations are “Plug-ins”

Page 6: Extending uBuild and uDeploy with Plugins

IBM Corporation ©2013

Why Plugin-ins?

Make Integrating Easy

Page 7: Extending uBuild and uDeploy with Plugins

IBM Corporation ©2013

Why Plugin-ins?

Wrap existing scripts

Page 8: Extending uBuild and uDeploy with Plugins

IBM Corporation ©2013

Why Plugin-ins?

Custom Fit

Page 9: Extending uBuild and uDeploy with Plugins

IBM Corporation ©2013

The Plan

Plugin Basics Finding and Uploading Plugins The Anatomy of a Plugin Basic Plugin Authoring Tools for Bidirectional Integrations

Page 10: Extending uBuild and uDeploy with Plugins

IBM Corporation ©2013

The Plan

Plugin Basics Finding and Uploading Plugins The Anatomy of a Plugin Basic Plugin Authoring Tools for Bidirectional Integrations

Page 11: Extending uBuild and uDeploy with Plugins

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

Page 12: Extending uBuild and uDeploy with Plugins

IBM Corporation ©2013

The Plan

Plugin Basics Finding and Uploading Plugins The Anatomy of a Plugin Basic Plugin Authoring Tools for Bidirectional Integrations

Page 13: Extending uBuild and uDeploy with Plugins

Getting Plugins

Page 14: Extending uBuild and uDeploy with Plugins

IBM Corporation ©2013

1) Go to Plugins.urbancode.com.

Page 15: Extending uBuild and uDeploy with Plugins

IBM Corporation ©2013

2) Download some plugins

Page 16: Extending uBuild and uDeploy with Plugins

IBM Corporation ©2013

3) Load them via the browser

Page 17: Extending uBuild and uDeploy with Plugins

IBM Corporation ©2013

New steps are immediately available

Page 18: Extending uBuild and uDeploy with Plugins

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.

Page 19: Extending uBuild and uDeploy with Plugins

IBM Corporation ©2013

The Plan

Plugin Basics Finding and Uploading Plugins The Anatomy of a Plugin Basic Plugin Authoring Tools for Bidirectional Integrations

Page 20: Extending uBuild and uDeploy with Plugins

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

Page 21: Extending uBuild and uDeploy with Plugins

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

Page 22: Extending uBuild and uDeploy with Plugins

IBM Corporation ©2013

Upgrade Definition

Supports upgrading from one plugin version to the next

Required when:­ Adding or renaming steps or properties

Page 23: Extending uBuild and uDeploy with Plugins

IBM Corporation ©2013

Payload

Everything that makes the integration “go”

Page 24: Extending uBuild and uDeploy with Plugins

IBM Corporation ©2013

The Plan

Plugin Basics Finding and Uploading Plugins The Anatomy of a Plugin Basic Plugin Authoring Tools for Bidirectional Integrations

Page 25: Extending uBuild and uDeploy with Plugins

IBM Corporation ©2013

Example: Atlassian Jira

Plugin.xml header:

Page 26: Extending uBuild and uDeploy with Plugins

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)

Page 27: Extending uBuild and uDeploy with Plugins

IBM Corporation ©2013

Example: Atlassian Jira

Step properties look like this:

Page 28: Extending uBuild and uDeploy with Plugins

IBM Corporation ©2013

Example: Atlassian Jira - Properties

Page 29: Extending uBuild and uDeploy with Plugins

IBM Corporation ©2013

Example: Atlassian Jira - Properties

Page 30: Extending uBuild and uDeploy with Plugins

IBM Corporation ©2013

Example: Atlassian Jira - Properties

Page 31: Extending uBuild and uDeploy with Plugins

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>

Page 32: Extending uBuild and uDeploy with Plugins

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();

Page 33: Extending uBuild and uDeploy with Plugins

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.

Page 34: Extending uBuild and uDeploy with Plugins

IBM Corporation ©2013

Payloads: Example script

Cross platform un-tar

Page 35: Extending uBuild and uDeploy with Plugins

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']);

Page 36: Extending uBuild and uDeploy with Plugins

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) }

Page 37: Extending uBuild and uDeploy with Plugins

You don’t have to use Groovy

Page 38: Extending uBuild and uDeploy with Plugins

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

Page 39: Extending uBuild and uDeploy with Plugins

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)

Page 40: Extending uBuild and uDeploy with Plugins

IBM Corporation ©2013

The Plan

Plugin Basics Finding and Uploading Plugins The Anatomy of a Plugin Basic Plugin Authoring Tools for Bidirectional Integrations

Page 41: Extending uBuild and uDeploy with Plugins

IBM Corporation ©2013

uDeploy

Post-processing­ Easily capture deployment information

Rest services API­ 2 Wrappers: Command line and Java.

Page 42: Extending uBuild and uDeploy with Plugins

IBM Corporation ©2013

uBuild

Web services accept metrics­ Construct an XML message­ Post to web message

Page 43: Extending uBuild and uDeploy with Plugins

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)

Page 44: Extending uBuild and uDeploy with Plugins

IBM Corporation ©2013

uBuild

Web services accept metrics­ Construct an XML message­ Post to web message

Easiest to work from examples

Page 45: Extending uBuild and uDeploy with Plugins

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

Page 46: Extending uBuild and uDeploy with Plugins

IBM Corporation ©2013

Additional Resources on Plugins

Plugins.urbancode.com­ Plenty of examples

Online Docs­ Schemas and additional how-to reference.­ Process flows

Page 47: Extending uBuild and uDeploy with Plugins

Q&[email protected]

Slideshare.net/Urbancode