Core Orchestrations

Having worked with many different continuous integration / continuous delivery system I have derived five core orchestration every system offers.

These are all the tasks pipelines, manual or automated, needed to deliver most technical solutions. But since these tasks are most often authored by real humans we add this additional task:

… and because those humans are more often than not ’engineers’ we need two more tasks to get them going and wrapping up.

Get Help

This needs to print or redirect to good documentation. As built, with detailed usage examples and links to further information. Allowing documentation to be commented on allows for a community to feed back and keep the documentation up to date and relevant.

Clean

Like all good people, even scripts need to clean up after themselves. The ‘Clean’ task describes a basic interface for all orchestrations to play nice and clean up after themselves especially if they create temporary files or files that can be re-created, as well as triggering the intent for orchestration creators to ensure they can roll back / undo anything they do.

Setup

This needs to set up a contributor quickly to allow for easy contributions while adhering to all project conventions, guidelines and feedback any issues, violations quickly. Setup dependencies, install tooling, other modules, certificates and anything else required to author and run the scripts and orchestrations.

Build

This is used to perform any linting, code generation and compilation activities.

Test

Ideally this task should appear multiple times in the orchestration pipleline as there are multiple stages of tests. Syntax highlighting, Linting and Spell checking are all basic types of tests we quite often depend on even before building. It is the key to fast feedback loops to allow rapid evolution.

Package

One solution may create 1 or more deployment packages. Such as an Phone APP, Web API and database package. This is where you can orchestrate all the packages being packed into their respective deployment artifacts, be it folders, zip files, docker images or other.

Publish

This should push the packages to either the deployment targets or some packaging store such as NuGet or any other packet manager.

Deploy

Deployment comes in many flavors. Here you can orchestrate the overall deployment. Note You can split your deployment orchestration to manage each package independently and each of these can be packaged with the respective package. Ensure all deployment dependencies are packed into each package.

Where did this come from?

These where my thoughts that I gathered while working with Powershell and Psake. These days many of this orchestrations are managed using SASS products or other advanced tooling. The one consideration I make in choosing any of these is. Can I run the orchestrations locally and offline to ensure the fastest possible feedback loop.

Some of my personal inspirations on this topic