AGENT SKILL

create-template

Generate Harness v0 Template YAML for reusable pipeline components (Step, Stage, Pipeline, StepGroup) and create them via MCP. Use when asked to create a template, build a step template, stage template, pipeline template, or reusable step. Do NOT use for checking template usage or references (use template-usage instead). Trigger phrases: create template, step template, stage template, pipeline template, reusable step, template YAML.

License 许可
Apache-2.0
所属仓库
zapabob/Skills
最近更新
2026-10-26
Stars
★ 2
Forks
0

01 前言 Front Matter

name
create-template
license
Apache-2.0
metadata
{ "author": "Harness", "version": "2.0.0", "mcp-server": "harness-mcp-v2" }
description
Generate Harness v0 Template YAML for reusable pipeline components (Step, Stage, Pipeline, StepGroup) and create them via MCP. Use when asked to create a template, build a step template, stage template, pipeline template, or reusable step. Do NOT use for checking template usage or references (use template-usage instead). Trigger phrases: create template, step template, stage template, pipeline template, reusable step, template YAML.
compatibility
Requires Harness MCP v2 server (harness-mcp-v2)

02 资源文件 1

03 SKILL.md 正文

Create Template

Generate Harness v0 Template YAML for reusable components and push via MCP.

Instructions

  1. Determine template type - Step, Stage, Pipeline, or StepGroup
  2. Identify reusable parameters - Mark configurable fields with <+input> for runtime inputs
  3. Generate YAML using the structure below with a unique versionLabel
  4. Create via MCP using harness_create with resource_type template
  5. Verify creation using harness_list with resource_type template

Template Types

  • Step - Reusable step definitions
  • Stage - Reusable stage definitions
  • Pipeline - Complete reusable pipelines
  • StepGroup - Groups of related steps

Template Structure

template:
  name: My Template
  identifier: my_template
  versionLabel: "1.0.0"
  type: Step           # Step, Stage, Pipeline, StepGroup
  orgIdentifier: default
  projectIdentifier: my_project
  tags: {}
  spec: ...            # Content depends on type

Step Template

template:
  name: Docker Build Push
  identifier: docker_build_push
  versionLabel: "1.0.0"
  type: Step
  spec:
    type: BuildAndPushDockerRegistry
    spec:
      connectorRef: <+input>
      repo: <+input>
      tags: <+input>
      dockerfile: Dockerfile
      context: .
    timeout: 15m

Stage Template

template:
  name: K8s Deploy Stage
  identifier: k8s_deploy_stage
  versionLabel: "1.0.0"
  type: Stage
  spec:
    type: Deployment
    spec:
      deploymentType: Kubernetes
      service:
        serviceRef: <+input>
      environment:
        environmentRef: <+input>
        infrastructureDefinitions:
          - identifier: <+input>
      execution:
        steps:
          - step:
              identifier: rollout
              name: Rollout
              type: K8sRollingDeploy
              spec:
                skipDryRun: false
              timeout: 10m
        rollbackSteps:
          - step:
              identifier: rollback
              name: Rollback
              type: K8sRollingRollback
              spec: {}
              timeout: 10m
    failureStrategies:
      - onFailure:
          errors: [AllErrors]
          action:
            type: StageRollback

Pipeline Template

template:
  name: Standard CI/CD
  identifier: standard_cicd
  versionLabel: "1.0.0"
  type: Pipeline
  spec:
    stages:
      - stage:
          identifier: build
          name: Build
          type: CI
          spec:
            cloneCodebase: true
            platform:
              os: Linux
              arch: Amd64
            runtime:
              type: Cloud
              spec: {}
            execution:
              steps:
                - step:
                    identifier: build
                    name: Build
                    type: Run
                    spec:
                      shell: Bash
                      command: <+input>

StepGroup Template

template:
  name: Test Suite
  identifier: test_suite
  versionLabel: "1.0.0"
  type: StepGroup
  spec:
    steps:
      - step:
          identifier: unit_tests
          name: Unit Tests
          type: Run
          spec:
            shell: Bash
            command: <+input>
      - step:
          identifier: integration_tests
          name: Integration Tests
          type: Run
          spec:
            shell: Bash
            command: <+input>

Using Runtime Inputs

Mark configurable fields with <+input> so users provide values when using the template:

spec:
  connectorRef: <+input>          # User selects connector
  repo: <+input>                   # User provides repo name
  tags:
    - <+input>                     # User provides tag
    - <+pipeline.sequenceId>       # Fixed value

Creating via MCP

Call MCP tool: harness_create
Parameters:
  resource_type: "template"
  org_id: "<organization>"
  project_id: "<project>"
  body: <the template YAML>

To update a template version:

Call MCP tool: harness_update
Parameters:
  resource_type: "template"
  resource_id: "<template_identifier>"
  org_id: "<organization>"
  project_id: "<project>"
  body: <updated template YAML with new versionLabel>

To list existing templates:

Call MCP tool: harness_list
Parameters:
  resource_type: "template"
  org_id: "<organization>"
  project_id: "<project>"

Referencing Templates in Pipelines

- stage:
    identifier: deploy
    name: Deploy
    template:
      templateRef: k8s_deploy_stage
      versionLabel: "1.0.0"
      templateInputs:
        type: Deployment
        spec:
          service:
            serviceRef: my_service
          environment:
            environmentRef: prod

Examples

  • "Create a Docker build and push step template" - Generate Step template with BuildAndPushDockerRegistry
  • "Create a reusable K8s deployment stage" - Generate Stage template with Deployment type
  • "Make a standard CI/CD pipeline template" - Generate Pipeline template with CI + CD stages

Performance Notes

  • Mark all configurable fields with <+input> to maximize template reusability.
  • Verify the versionLabel is unique for each template update.
  • Test template references in a pipeline before distributing to other teams.

Troubleshooting

Template Creation Errors

  • DUPLICATE_IDENTIFIER - Template exists; update with new versionLabel
  • INVALID_VERSION - versionLabel must be unique per template
  • Identifiers must match ^[a-zA-Z_][0-9a-zA-Z_]{0,127}$

Template Usage Errors

  • TEMPLATE_NOT_FOUND - Check templateRef and scope (account/org/project)
  • VERSION_NOT_FOUND - Verify versionLabel exists
  • Missing templateInputs - Provide all <+input> values

04 同仓库更多 Skills