Plugin can mean different things depending on the context. In some cases they represent a way to extend functionality beyond the original scope. Other times they are meant to extend or augment existing capabilities, and so on.
In Continuum, a plugin is an interface layer between Flow and a third-party continuous integration, testing, development, operations or virtualization platform.
Flow is built on the principle that you already have good tools and they do a good job. There's no need to replace things that are working well, so we simply interface with those tools using plugins.
In Flow, all plugins consist of two parts - a required integration module and an optional user interface module.
The integration module is written in Python, and is plugged in to the Flow engine. The purpose of the integration module is to identify key features from the target tool or platform, and expose them for use in a Pipeline Stage.
For example, Flow includes a Jenkins plugin as part of our core system. The Jenkins plugin exposes features such as 'build' and 'get log' directly to the Pipeline. Therefore, it's easy in the Pipeline drag and drop editor to create a step that performs a Jenkins build.
Another example is our git plugin, which can easily query a git repository (such as GitLab or GitHub) and retrieve information about a specific commit, branch, etc. Since one of the foundational features of Flow is data collection and aggregation, most plugins will have at least one function capable of retrieving useful data.
Plugins are written in Python, but can easily interact with any technology such as Restful API's and other software APIs. Python is a widely accepted, powerful and flexible language - in fact, so far every tool we've interfaced with actually already has a Python library available!
User Interface Module
In the Flow UI, there is a wealth of useful information about the progress and success/failure of a specific Pipeline Instance. When looking at the details of a specific Pipeline Instance, in addition to the basic data available, plugins can provide much more detailed information from within their scope. This information is made available through each plugins User Interface Module.
When looking at the details of a Pipeline Instance, there is a list of all Stages, including each and every plugin and function it performed. Clicking on a specific plugin will raise a dialog in the page. The contents of this dialog are part of the plugin definition.
For example, the Jenkins plugin will present a list of relevant information about the build - status, duration, any test results, etc. Additionally, this dialog can contact Jenkins and display the complete build log, inside the Flow UI.
All the tools that are important to Flow are also capable of generating tons of data, and the underlying calls to retrieve this data are often indiscriminate. For example, using the Jira API to get the details of a specific ticket returns many hundreds of lines of data.
One crucial feature of a plugin is the ability for each plugin to define, in it's configuration file, which discrete details in the wealth of data should be presented to the user, in the proper context, and on the right page in Flow. This is all easily managed in the plugins configuration file, and can be customized at any time.
Our philosophy regarding plugins is simple: we include and maintain 'official' plugins for the most popular and widely used tools, such as: Jenkins, Git, Jira, and Artifactory.
As the community of users continues to enhance our existing plugins, and create new ones, the list of 'official' plugins will grow.
In addition to the more widely used tools, there are literally hundreds of operational tools available that could be integrated with Continuum. As the list of plugins grows, they'll be available in our library of community submitted plugins.
Plugins are self contained in their own directory on the Continuum server. Each directory contains: a config file, one or more integration modules (Python modules) and a /ui directory containing user interface details.
For example, the Jenkins plugin:
The official plugins included with Flow are in the $CONTINUUM_HOME/flow/plugins directory. Future releases of Flow will likely always include enhancements to these plugins as well as new plugins.
You can develop your own plugins as well, and keep them in any directory you like. Building and registering a plugin will be covered in another document.