Spinnaker CD pipeline

Making Spinnaker CD Pipelines Reusable with Managed Pipeline Template

In an organization, the number of pipelines will keep increasing as the number of application deployments increase and the Spinnaker CD pipeline adoption increases. Over a period of time, the CD pipelines in Spinnaker are most likely to have similar functionality with each other as most of the pipelines are with alike stages or different. 

Is there a way to synergize the best practices and standardize the continuous deployment process across teams and/or apps? 

The answer is – yes, ‘Managed Pipeline Template’ is your solution.

In this article, we will be covering the procedure to create a Managed Pipeline Template and set up a pipeline deriving from the ‘Pipeline’ template.

Pre-Requisites

For setting up a successful baking stage in Spinnaker, the requirements are as follows:

  • A working Spinnaker instance.
  • Working knowledge of the Linux environment.

The Spinnaker CD Pipeline requires the following:

  • A pipeline with a matured delivery process

Understanding the Managed Pipeline Template

CD Pipelines in Spinnaker are visually represented with stages connected with one after the other in sequential and sometimes in parallel. The pipeline data is preserved in JSON format in the Front50 backend. 

The pipeline template is nothing but a regular pipeline minus the pipeline configuration.  Behind the scene, it uses Jinja for JSON template construction.

The pipeline template can be thought of, a way to standardize best practices of pipeline that you have learned so far with Spinnaker. This can be distributed to different teams within the same or different application or among different spinnaker installations. 

You can create a pipeline from the template by providing values to the variables defined in the template. Remember any changes made to the pipeline template even after it has been inherited, are propagated to the inherited pipelines automatically. The pipeline is hydrated by the Orca engine during the pipeline execution. 

Installing and Configuring Spin CLI

After amending the template with the variables, Spin CLI is required to update the pipeline template in Spinnaker. Let’s learn how to install and configure the Spin CLI.

Installing Spin CLI

curl -LO 
https://storage.googleapis.com/spinnaker-artifacts/spin/$(curl -s
https://storage.googleapis.com/spinnaker-artifacts/spin/latest)/linu
x/amd64/spin chmod +x spin; sudo mv spin /usr/local/bin/spin

Configuring Spin CLI

mkdir ~/spin 
# Inside the dir, setup ‘config’ file using the sample 
# https://github.com/spinnaker/spin/blob/master/config/example.yaml 
#Sample ~/.spin/config
gate:
   endpoint: http://demospin.net:9000/gateauth:
    enabled: false

Enabling Pipeline Template Feature in your Spinnaker

In Spinnaker version 1.19.0 or higher, the Pipeline template feature is enabled by default, you don’t need to enable it. Simply start using it if required.

However, in any Spinnaker version prior to 1.19.0, this pipeline template feature has to be enabled explicitly. To enable the feature, execute the following commands in Halyard: 

# Enable Pipeline template in Spinnaker versions prior to 1.19.0 
hal config features edit --pipeline-templates true 
hal config features edit --managed-pipeline-templates-v2-ui true

Creating a Pipeline Template in Spinnaker

Once the pipeline feature is enabled, you can create a pipeline template from a working Pipeline. The available templates are visible under the Templates section. You can copy the template JSON to a file on your machine, update it with variables.

To create a pipeline template from a pipeline, edit the pipeline > Click on ‘Pipeline Actions’ and select ‘Export as Pipeline Template’ from the drop-down menu.

Now a pipeline template is created. To make modifications to the template, copy the JSON content to a file on your system, update the template with your variables. The pipeline template format looks like as shown below:

{
  "schema": "v2",
  "variables": [
    {
      "type": "<type>",
      "defaultValue": <value>,
      "description": "<description>",
      "name": "<varName>"
    }
  ],
  "id": "<templateName>",          # The pipeline instance references the template using this
  "protect": <true | false>,
  "metadata": {
    "name": "displayName",          # The display name shown in Deck
    "description": "<description>",
    "owner": "example@example.com",
    "scopes": ["global"]            # Not used
  },
    "pipeline": {                     # Contains the templatized pipeline itself
    "lastModifiedBy": "anonymous",  # Not used
    "updateTs": "0",                # Not used
    "parameterConfig": [],          # Same as in a regular pipeline
    "limitConcurrent": true,        # Same as in a regular pipeline
    "keepWaitingPipelines": false,  # Same as in a regular pipeline
    "description": "",              # Same as in a regular pipeline
    "triggers": [],                 # Same as in a regular pipeline
    "notifications": [],            # Same as in a regular pipeline
    "stages": [                     # Contains the templated stages
      {
        # This one is an example stage:
        "waitTime": "${ templateVariables.waitTime }",  # Templated field.
        "name": "My Wait Stage",
        "type": "wait",
        "refId": "wait1",
        "requisiteStageRefIds": []
      }
    ]
  }
}

Compare the pipeline JSON and template JSON. Note the difference is that the template has additional elements like schema, variables, and pipeline.

Comparison between the pipeline JSON and template JSON
Comparison between the pipeline JSON and template JSON

Once you are ready to update the template back into the Spinnaker template, run the following command:

$ spin pipeline-template save --file pipeline_withVars.json

The above command will update the existing template with the changes you made, like variables.

Creating a CD Pipeline from a Pipeline Template

Now that you have a pipeline template, you can create new pipelines from it. Go to the Templates tab, and create a new pipeline from it as shown below:

Creating a CD Pipeline from a Pipeline Template
Creating a CD Pipeline from a Pipeline Template

In the next screen, choose the application the pipeline belongs to. Then, provide a name to the new pipeline.

Provide parameter values to the variables defined in the pipeline template.

Providing parameter values in the Pipeline Template
Providing parameter values in the Pipeline Template

Finally, save the pipeline. The pipeline icon is different between the regular pipeline and the pipeline from template; the template derived pipeline is with a grid icon.

Execute the template-derived pipeline in the same way as the regular pipeline – no difference. 

Summary

We have explained the procedure of setting up a CD pipeline template and creating a CD pipeline from the template. Install Spinnaker, deploy your apps by creating CD pipeline in Spinnaker today!

Leave a Comment

Your email address will not be published.

You may like