Skip to main content

Templates overview

Harness enables you to add Templates to create re-usable logic and Harness entities (like Steps, Stages, and Pipelines) in your Pipelines. You can link these Templates in your Pipelines or share them with your teams for improved efficiency.

Templates enhance developer productivity, reduce onboarding time, and enforce standardization across the teams that use Harness.

This topic provides an overview of Templates in Harness.

Limitations

Harness Templates have the following temporary limitations at this point:

  • Deleting an existing Template with active Pipeline references, deletes the references too.
  • If you convert a runtime input in a Template to a fixed value, the input type does not change in the linked Pipeline. You must manually edit the linked Pipeline YAML and give the fixed values.
  • If you convert a fixed type input to a runtime input in your Template, the input type does not change in the linked Pipeline. You must click the Template in the linked Pipeline to refresh it and save the Pipeline again.

What is a Template in Harness?

Harness' templates allow you to design reusable content, logic, and parameters, ensuring that the application is the major focus of your Pipelines. Instead of creating Pipelines from scratch each time, Harness lets you select from pre-built Templates and just link them to your Pipelines. The process of developing Pipelines thus becomes easier by reducing duplication and increasing reusability.

You can reshare your work with your team and reuse it in your Pipelines.

You can add Templates to Harness CI and CD modules. All your Templates can be seen in Templates based on their scope. We will also call this Template Library in this topic.

You can do the following with Templates in Harness:

  • Add multiple versions for a specific Template.
  • Preview, Copy, Edit, and Delete a specific Template.
  • Create nested Templates. For example, you can link a Step Template to a Stage Template and link this Stage Template to a Pipeline template.
  • Keep track of all Template events with the Activity Log option. It shows you details like who created the Template and Template version changes.
  • Clone Templates in Git and then sync them with Harness using Harness Git Experience.

Why Should You Use Templates?

  • Templates are a very convenient way of sharing common logic in a centralized way without duplicating it on multiple Pipelines.
    For example, if you have some tasks or operations that every Pipeline must do, then make them a part of a Template. Now use this Template in your Pipelines.
  • Reduce the complexity and size of creating a single Pipeline.
  • Set a pattern that you and your team can follow throughout your Pipelines.
  • Save time and create generic templates that you can use across the scopes in your Harness Account.
  • Add or remove a change in one file rather than a lot of stages.

Templates scopes

You can add Templates at any scope in Harness.

The following table shows what it means to add Templates at different scopes or hierarchies:

ScopeWhen to add Templates?
AccountTo share Step/Stage/Pipeline Templates with users in the Account, as well as users within the Organizations, and Projects created within this Account.
OrganizationTo share Step/Stage/Pipeline Templates with users in the Organization as well as within the Projects created within the Org.
ProjectTo share Step/Stage/Pipeline Templates with users within the Project.

Referencing objects within a scope

When leveraging a template at a specific scope (project, org, or account), you can only reference resources within the respective scope or higher in the Harness object hierarchy (project --> org --> account).

For example, if you create an account-level stage deploy template, the service, the environment, the infrastructure definition, the connectors, and the secrets referenced in its steps must be defined at the account level in order to be refereced as a fixed value or expression in the template.

You cannot reference an org or project level service, environment, connector, or infrastructure definition as a fixed value in the account-level template. All those resources must be at the account level in order to be fixed in a template.

You cannot reference objects downwards in the heirarchy; however, given the correct RBAC access, you can use resources upwards in the heirarchy (project --> org --> account).

The project and org-level templates can reference higher level objects like services, environments, connectors, and secrets. A project-level template can reference org and account-level objects and an org-level template can reference account-level objects.

You can define a fixed value service at the org or account level according to your RBAC permissions. The same is true with environments and infrastructure definitions, as they can come from higher level resources. With secrets, you can reference org and account level secrets from a project-scoped template.

What Are The Types of Templates in Harness?

You can add the following types of Templates to your Harness Account/Org/Project:

  • Step
  • Stage
  • Pipeline

Step Template

To define a linear sequence of operations for a job.

For detailed steps to add a Step Template, see Create a Step Template.

Stage Template

To define a set of stages of related jobs.

For detailed steps to create a Stage Template, see Create a Stage Template.

Pipeline Template

You can create your own Pipeline Templates to standardize and distribute reusable Pipelines across your team or among multiple teams. The underlying structure of a Pipeline Template is the same as that of a Pipeline YAML.

With Pipeline Templates you can:

  • Create a Template based on an existing Pipeline.
  • Share the Template across scopes in Harness.

For detailed steps to create a Pipeline Template, see Create a Pipeline Template.

Versioning

Versioning a Template enables you to create a new Template without modifying the existing one. When you plan to introduce a major change in a Project that depends on an existing Template, you can use versioning. You can create multiple versions of a Template.

You can make changes to the same version of the Template as long as the Template's inputs remain unaltered. You must create a new version of the Template for any changes in the inputs.

Stable Version

A stable version is a template that only introduces breaking changes in major release milestones.

When using a Template, you can either link to a specific version or always use the stable version. When you mark a new version of the template as stable, it is automatically picked up to link to the Pipeline.

You can set any version of your Template as the stable version using the Set as Stable option.

Preview a Template

You can view the Details and Activity Log of your Template by clicking Preview Template.

Activity Log enables you to view and track all the events corresponding to your Template.

Open/Edit a Template

You can use the Open/Edit Template option and navigate to the Template Studio to edit the Template as per your needs.

You can perform the following actions while editing a Template:

  • Modify the name and version details of the Template
  • Set the Template version ( to stable or any other version)
  • View the YAML file for the Template
  • Modify Step or Stage configurations

You can edit any version of your Template.

Harness enables you to choose any one of the following:

  • Save - Save the updates in the selected version where you made the changes.
  • Save as new version - Create a new version of the selected Template and save with the changes you just made.
  • Save as new Template - Create a new Template from the selected Template and save the changes you just made.

Template Settings

You can set a specific version of your Template as the stable version by clicking on Template Settings.

Delete a Template

You can delete your Templates at any point. Deletion of a Template will also remove any of its references in your Pipelines.

Template Inputs

You can customize Templates by using placeholder expressions and Runtime Inputs for their parameters and data types. Each time you run a Pipeline that uses the Template, users can provide values for these inputs.

See Fixed Values, Runtime Inputs, and Expressions.

Template YAML

You can use the Harness visual or YAML editors to create your Templates.

Here's an example of the YAML for a CD Stage template:

template:  
name: Quickstart
identifier: Quickstart
versionLabel: v1
type: Stage
projectIdentifier: CD_Examples
orgIdentifier: default
tags: {}
spec:
type: Deployment
spec:
serviceConfig:
serviceDefinition:
type: Kubernetes
spec:
variables: []
serviceRef: nginx
infrastructure:
infrastructureDefinition:
type: KubernetesDirect
spec:
connectorRef: docbuilds
namespace: default
releaseName: release-<+INFRA_KEY>
allowSimultaneousDeployments: false
environmentRef: helmchart
execution:
steps:
- step:
type: K8sRollingDeploy
name: Rolling
identifier: Rolling
spec:
skipDryRun: false
timeout: 10m
rollbackSteps: []
serviceDependencies: []
failureStrategies:
- onFailure:
errors:
- AllErrors
action:
type: StageRollback

The YAML editor is a full-fledged YAML IDE with autocomplete and other features. See Harness YAML Quickstart.

Template filter

You can create your own template filter and use it later to view those templates in Harness. You can create a template filter at any scope. This topic explains steps to create a template filter at the account scope.

To create a template filter in Harness:

  1. Select ACCOUNT SETTINGS, and then select Account Resources.

  2. Select Templates.

  3. In the top right corner, select the filter icon.

    The New Filter settings appear.

  4. In Name enter the name of an existing template, and then select New Filter.

  5. In Filter Name, enter a name for the filter.

  6. Set the visibility of the filter by selecting one of the following:

    • Only me
    • Everyone

    If you do not select anything, the visibility is set to Only me by default.

  7. Select Save, and then Apply.

Your filter now appears in the saved filter list. You can view the templates by selecting this filter.