Skip to main content
Cloudmarkus41

harness-cd

Harness CD (Continuous Delivery) for Kubernetes, Helm, Terraform, ECS, and serverless deployments with GitOps, approval gates, rollback strategies, and multi-environment promotion

Stars
12
Source
markus41/claude
Updated
2026-05-11
Slug
markus41--claude--harness-cd
View on GitHubRaw SKILL.md

// install — copy + paste into any project

mkdir -p .claude/skills && curl -fsSL https://raw.githubusercontent.com/markus41/claude/HEAD/plugins/jira-orchestrator/skills/harness-cd/SKILL.md -o .claude/skills/harness-cd.md

Drops the SKILL.md into .claude/skills/harness-cd.md. Works with Claude Code, Cursor, and any agent that loads SKILL.md files from .claude/skills/.

Harness CD Skill

Deployment orchestration for Kubernetes, Helm, Terraform, ECS, serverless with GitOps.

Use For

  • CD pipelines, strategies (Canary/Blue-Green/Rolling), environments
  • Approval gates, GitOps, rollback, multi-environment promotion

Basic Deployment Pipeline

pipeline:
  name: Deploy Pipeline
  stages:
    - stage:
        name: Deploy Dev
        type: Deployment
        spec:
          service:
            serviceRef: my_service
          environment:
            environmentRef: development
          execution:
            steps:
              - step:
                  name: Rolling Deploy
                  type: K8sRollingDeploy
                  timeout: 10m
            rollbackSteps:
              - step:
                  name: Rollback
                  type: K8sRollingRollback

Deployment Strategies

Rolling (gradual replacement)

- step:
    type: K8sRollingDeploy
    spec:
      skipDryRun: false

Canary (progressive traffic shift)

- step:
    type: K8sCanaryDeploy
    spec:
      instanceSelection:
        type: Count
        spec:
          count: 1

Blue-Green (zero-downtime cutover)

- step:
    type: K8sBGStageDeployment
- step:
    type: K8sBGSwapServices

Service Configuration

Kubernetes

serviceDefinition:
  type: Kubernetes
  spec:
    manifests:
      - manifest:
          type: K8sManifest
          spec:
            store:
              type: Git
              spec:
                connectorRef: github_connector
                branch: main
    artifacts:
      primary:
        sources:
          - type: DockerRegistry
            spec:
              imagePath: myorg/myapp

Helm

serviceDefinition:
  type: NativeHelm
  spec:
    chartName: my-app
    helmVersion: V3

Terraform

serviceDefinition:
  type: CustomDeployment
  spec:
    customDeploymentRef:
      templateRef: terraform_template

Environment & Infrastructure

environment:
  name: Production
  type: Production
infrastructureDefinition:
  type: KubernetesDirect
  spec:
    connectorRef: k8s_connector
    namespace: my-namespace

Approval Gates

- step:
    type: HarnessApproval
    spec:
      approvers:
        userGroups:
          - account.ProductionApprovers
# Jira: type: JiraApproval, issueKey: <+pipeline.variables.jiraIssueKey>
# ServiceNow: type: ServiceNowApproval, ticketNumber: <+pipeline.variables.changeRequest>

GitOps Deployments

Argo CD

- step:
    type: GitOpsUpdateReleaseRepo
    spec:
      variables:
        - name: image_tag
          value: <+artifact.tag>
- step:
    type: GitOpsSync
    spec:
      prune: true

PR-Based GitOps

- step:
    type: CreatePR
    spec:
      updates:
        - path: environments/<+env.name>/values.yaml
          key: image.tag
          value: <+artifact.tag>

Deployment Verification & Rollback

- step:
    type: Verify
    spec:
      type: Canary
      sensitivity: MEDIUM
- step:
    type: Http
    spec:
      url: <+infra.variables.serviceUrl>/health
failureStrategies:
  - onFailure:
      errors:
        - AllErrors
      action:
        type: StageRollback

Multi-Environment Promotion

pipeline:
  stages:
    - stage:
        name: Deploy Dev
        spec:
          environment:
            environmentRef: development
    - stage:
        name: Deploy Staging
        spec:
          environment:
            environmentRef: staging
        when:
          condition: <+pipeline.stages.deploy_dev.status> == "SUCCEEDED"
    - stage:
        name: Deploy Production
        spec:
          environment:
            environmentRef: production

Triggers

# Artifact
trigger:
  source:
    type: Artifact
    spec:
      type: DockerRegistry
      imagePath: myorg/myapp
# Webhook
trigger:
  source:
    type: Webhook
    spec:
      type: Github
# Scheduled
trigger:
  source:
    type: Scheduled
    spec:
      expression: "0 2 * * *"

CD Expressions

Expression Purpose
<+service.name> Service
<+env.name> Environment
<+infra.namespace> Namespace
<+artifact.image>:<+artifact.tag> Image
<+pipeline.stages.X.output.VAR> Output

API Operations

curl -X POST "https://app.harness.io/pipeline/api/pipeline/execute/${PIPELINE_ID}" -H "x-api-key: ${API_KEY}"
curl -X GET "https://app.harness.io/pipeline/api/pipelines/execution/v2/${EXECUTION_ID}" -H "x-api-key: ${API_KEY}"
curl -X PUT "https://app.harness.io/pipeline/api/pipelines/execution/interrupt/${EXECUTION_ID}" -H "x-api-key: ${API_KEY}"

Common Issues

Issue Solution
Deployment timeout Increase step timeout
Image pull failed Verify connector credentials
Namespace not found Check infrastructure definition
Manifest error Validate YAML locally
Approval timeout Review approval workflow
Rollback failed Configure rollback steps

References