The pf4jStagePlugin, also called the RandomWait plugin, creates a custom pipeline stage that waits a random number of seconds before signaling success.
This is for demo only and not meant to be used in a production environment.
| Plugin | Spinnaker Platform |
|---|---|
| 1.0.x | 1.19.x |
| 1.1.x | 1.20.x |
- Run
./gradlew releaseBundle - Put the
/build/distributions/<project>-<version>.zipinto the configured plugins location for your service. - Configure the Spinnaker service. Put the following in the service yml to enable the plugin and configure the extension:
spinnaker:
extensibility:
plugins:
Armory.RandomWaitPlugin:
enabled: true
config:
defaultMaxWaitTime: 60
Or use the examplePluginRepository to avoid copying the plugin .zip artifact.
See the Plugin Users Guide and the pf4jStagePlugin Deployment Example.
To debug the random-wait-orca server component inside a Spinnaker service (like Orca) using IntelliJ Idea follow these steps:
- Run
./gradlew releaseBundlein the plugin project. - Copy the generated
.plugin-reffile underbuildin the plugin project submodule for the service to thepluginsdirectory under root in the Spinnaker service that will use the plugin . - Link the plugin project to the service project in IntelliJ (from the service project use the
+button in the Gradle tab and select the plugin build.gradle). - Configure the Spinnaker service the same way specified above.
- Create a new IntelliJ run configuration for the service that has the VM option
-Dpf4j.mode=developmentand does aBuild Projectbefore launch. - Debug away...
See the Test a Pipeline Stage Plugin guide for a detailed walkthrough of setting up a plugin local testing environment on your workstation.
- Intro to Spinnaker Plugins, 2020 April Spinnaker Gardening Days
- Plugins Training Workshop, 2020 July Spinnaker Gardening Days
- How to build a PLUGIN: Building the frontend for a Spinnaker-native custom stage
- How to build a PLUGIN: Creating a Spinnaker-native custom stage
- Backend Plugin Development
- How to build a PLUGIN: The build process for a Spinnaker plugin
- How to build a PLUGIN: Delivering a plugin to your Spinnaker environment
The plugin consists of a random-wait-orca Kotlin server component and a random-wait-deck React UI component that uses the rollup.js plugin library.
This component implements the StageDefinitionBuilder PF4J extension point in Orca and consists of three classes in the io.armory.plugin.state.wait.random package:
RandomWaitContext.kt: a data class that stores themaxWaitTimevalueRandomWaitConfig.kt: a data class with the@PluginConfigurationtag; key-value pairs in this class map to the plugin's configurationRandomWaitPlugin.kt: this is the plugin's main class; implementsStageDefinitionBuilder
When adding a stage to a pipeline in the Spinnaker UI, the user can select this Armory.RandomWaitPlugin stage from the Type dropdown list. You enter a maxWaitTime, which is deserialized in RandomWaitContext.
Watch How to build a PLUGIN: Creating a Spinnaker-native custom stage and read code comments for more information.
Prior to v1.1.4, this component used the rollup.js plugin library to create a UI widget for Deck.
rollup.config.js: configuration for building the JavaScript applicationpackage.json: defines dependenciesRandomWaitStage.tsx: defines the custom pipeline stage; renders UI outputindex.ts: exports the name and custom stages
The code was refactored in v1.1.5 to use the new Deck UI SDK. rollup.config.js
now points to the config defined by the UI SDK. It's mostly not necessary to
define your own build config. This is also true of tsconfig.json. If you use
the UI SDK, you no longer define how your TypeScript should be compiled.