Spinnaker Pipeline Template: Difference between revisions

From NovaOrdis Knowledge Base
Jump to navigation Jump to search
Line 131: Line 131:
A template variable is a variable defined in a pipeline template, whose value is determined when a pipeline is instantiated based on the template. A template variable is different from a [[Spinnaker_Concepts#Pipeline_Variable|pipeline variable]], which vary per execution of the pipeline.
A template variable is a variable defined in a pipeline template, whose value is determined when a pipeline is instantiated based on the template. A template variable is different from a [[Spinnaker_Concepts#Pipeline_Variable|pipeline variable]], which vary per execution of the pipeline.
=Pipeline=
=Pipeline=
A pipeline created from a template has a reference to the template it was created from, via the template <code>[[#id|id]]</code>:
<syntaxhighlight lang='json'>
{
  [...]
  "template": {
    "reference": "spinnaker://my-pipeline-template",
  "type": ".../pipelineTemplate"
    "artifactAccount": "...",
  },
  [...]
}
</syntaxhighlight>
Whether it’s created from a template or not, an executable pipeline that can be visualized in the UI.
Whether it’s created from a template or not, an executable pipeline that can be visualized in the UI.

Revision as of 20:08, 30 May 2023

External

Internal

Overview

Multiple pipeline instances can be created from a pipeline template by providing values to the variables defined in the template. Any changes made to the pipeline template even after it has been instantiated as one or more pipelines, are propagated to the instantiated pipelines automatically. The pipeline is instantiated and parameterized by the Orca engine during the pipeline execution. A pipeline template has two components: the template and the configuration.

Template

A template defines a parameterized pipeline, with the set of variables for which the users instantiating the template will provide values. The template does not have the pipeline configuration found on a pipeline instance. The template is useful in defining a pipeline pattern that can be instantiated as multiple concrete pipeline instances.

Template Example

https://spinnaker.io/docs/reference/pipeline/templates/

Pipeline template JSON example:

{
  "schema": "v2",
  "id": "my-pipeline-template",           # The pipeline instance references the template using this
  "protect": <true | false>,
  "metadata": {
    "name": "My Template Name as seen in the UI",
    "description": "<description>",
    "owner": "example@example.com",
    "scopes": ["global"]            # Not used
  },
  "variables": [
    {
      "name": "<varName>",
      "type": "<type>",
      "defaultValue": <value>,
      "description": "<description>"
    }
  ],
  "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": []
      }
    ]
  }
}

Elements

schema

id

The identifier of this template. The pipeline instances generated from this template will references the template using the value of id:

{
  [...]
  "template": {
    "artifactAccount": "...",
    "reference": "spinnaker://my-pipeline-template",
    "type": ".../pipelineTemplate"
  },
  [...]
}

The user readable name is given by metadata.name.

protect

'true' or 'false'

metadata

Metadata name

The name under which the template pipeline is listed in the UI. Note that while id is used to refer to the template while instantiating pipelines, the metadata.name is the "user readable" name.

scopes

Documentation says "not used" but an attempt save the pipeline template in the backend fails with "Missing required fields: metadata.scopes" if not present.

{
  "metadata": {
    "scopes": ["global"]
  }
}

variables

The template variables declared in the pipeline template's variables section can be referred, using their name, in the pipeline stages, as follows:

{
   "default": "${templateVariables.SomeVariableName}",
}

Variable name

Variable type

The type can be "string", ?

Variable defaultValue

Variable description

pipeline

The definition of the templatized pipeline.

parameterConfig

Same as in a regular pipeline.

stages

Contains the templatized stages.

keepWaitingPipelines

Same as in a regular pipeline. Default false.

limitConcurrent

Same as in a regular pipeline. Default true.

spelEvaluator

v4.

description

Same as in a regular pipeline.

triggers

Same as in a regular pipeline.

notifications

Same as in a regular pipeline.

lastModifiedBy

Not used.

updateTs

Not used.

Configuration

A pipeline template configuration is a concrete implementation of a template. Configurations can inject new stages into the final pipeline graph and inherit or override, or both, triggers, notifications, and parameters. The pipeline template configuration is the same as the configuration for a pipeline not created from a template, but it additionally has variable bindings and a reference to the template.

Variable

A template variable is a variable defined in a pipeline template, whose value is determined when a pipeline is instantiated based on the template. A template variable is different from a pipeline variable, which vary per execution of the pipeline.

Pipeline

A pipeline created from a template has a reference to the template it was created from, via the template id:

{
  [...]
  "template": {
    "reference": "spinnaker://my-pipeline-template",
   "type": ".../pipelineTemplate"
    "artifactAccount": "...",
  },
  [...]
}

Whether it’s created from a template or not, an executable pipeline that can be visualized in the UI.