harness-cd

SKILL.md

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

Weekly Installs
3
GitHub Stars
9
First Seen
Feb 27, 2026
Installed on
gemini-cli3
opencode3
codebuddy3
github-copilot3
codex3
kimi-cli3