An opinionated framework for managing Spinnaker Applications, Pipelines and Projects as Code using Jsonnet and the spin-libsonnet library.
Designed for Platform teams operating Spinnaker to codify infrastructure concerns whilst providing an application and pipeline DSL for Product teams to self-serve.
This project expects the Platform team(s) to own a monorepo containing all jsonnet and review pull requests made by Product teams for their applications. Jsonnet enables off-roading through composition which is both powerful and potentially undesirable. For example, targeting a different AWS account or Kubernetes cluster.
- Language - user focused DSL -
artifacts
,environments
, ordering - Consistency - deploy any application with the same pipeline building blocks
- Programmatic - no manual clicking through UI
- Lightweight - easy for user to onboard new app with minimal jsonnet
The deploy.jsonnet pipeline is the special sauce and also where the complexity lies.
It provides a golden path that is easy to onboard to whilst supporting ad-hoc pipeline extensions to cope with the messy reality of codifying business processes.
The example structure generates a single Spinnaker pipeline per Spinnaker application.
I believe that a single pipeline deploying through any and all environments to production is preferable.
A single pipeline is simpler to operate, results in less drift across environments if more than one, becomes familiar across teams and departments, accomplishes shorter time-to-value and lower failure rates.
A single pipeline does put tension on processes because new artifact versions can pile up waiting for the existing pipeline to complete.
That all said, you can add your own pipeline templates and wire up applications to use them.
Whether you're in a Platform team operating Spinnaker or in a Product team using Spinnaker as a customer, start with the TUTORIAL.md.
This will give you a basic understanding of working with jsonnet and the key features you might need.
After exploring the tutorial have a browse through the example/ directory.
cd example/
Render all jsonnet to json:
make build
Deploy all applications, pipelines and projects:
make deploy-all
Other make targets:
$ make
build Generate JSON manifests for `spin save`
clean Removes any manifests from previous builds
dep Install dependencies
deploy-all Deploy all applications, pipelines, projects
deploy-applications Deploy application manifest(s) to Spinnaker - default all, else use 'FILE=path/to/file.json'
deploy-pipelines Deploy pipeline manifest(s) to Spinnaker - default all, else use 'FILE=path/to/file.json'
deploy-projects Deploy project manifest(s) to Spinnaker - default all, else use 'FILE=path/to/file.json'
test Test for rendering, formatting and linting errors
See CONTRIBUTING.md