micnncim / spincue

CUE implementation of Spinnaker pipelines

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

spincue

Spinnaker pipeline templates implemented by pure CUE.

This is still experimental implementation, not guaranteeing production usage and can make breaking changes.

Commands

save

save command runs spin command with CUE files.

  • Save a pipeline:
    $ cue -t pipeline=$PIPELINE -t dryrun=false save ./...
  • Plan a pipeline:
    $ cue -t pipeline=$PIPELINE save ./...

dump

dump command displays a raw pipeline with JSON format.

  • Dump a pipeline:
    $ cue -t pipeline=$PIPELINE dump ./...

Examples

base: application: "api"
pipeline: minimal: stages: [{manualJudgement: {}}]
JSON
{
  "name": "minimal",
  "application": "api",
  "stages": [
    {
      "type": "manualJudgment",
      "name": "Manual Judgement",
      "failPipeline": true,
      "requisiteStageRefIds": [],
      "refId": "0"
    }
  ],
  "expectedArtifacts": [
    {}
  ],
  "triggers": [],
  "notifications": [],
  "lastModifiedBy": "fake@spincue.io"
}
base: {
    application:       "api"
    dockerAccount:     "docker-account-1"
    kubernetesAccount: "kubernetes-account-1"
    gcsAccount:        "gcs-account-1"
}

pipeline: nginx: {
    stages: [
        {
            manualJudgement: {}
        },
        {
            name: "Deploy app"
            deploy: {
                image:    "nginx"
                manifest: "gs://spincue/nginx/manifest.yaml"
            }
        },
        {
            wait: duration: 60
        },
    ]

    triggers: [{docker: image: "nginx"}]

    notifications: [{
        address: "development"
        messages: {
            complete: "Deploy complete!"
            failed:   "Deploy failed!"
        }
    }]
}
JSON
{
  "name": "nginx",
  "application": "api",
  "stages": [
    {
      "type": "manualJudgment",
      "name": "Manual Judgement",
      "failPipeline": true,
      "requisiteStageRefIds": [],
      "refId": "0"
    },
    {
      "type": "deployManifest",
      "name": "Deploy app",
      "cloudProvider": "kubernetes",
      "account": "kubernetes-account-1",
      "manifestArtifactId": "1-gcs",
      "requiredArtifactIds": [
        "1-docker"
      ],
      "requisiteStageRefIds": [
        "0"
      ],
      "refId": "1"
    },
    {
      "type": "wait",
      "name": "Wait 60s",
      "waitTime": 60,
      "requisiteStageRefIds": [
        "1"
      ],
      "refId": "2"
    }
  ],
  "expectedArtifacts": [
    {},
    {
      "displayName": "nginx",
      "id": "1-docker",
      "matchArtifact": {
        "type": "docker/image",
        "artifactAccount": "docker-registry",
        "name": "nginx",
        "id": "id"
      },
      "defaultArtifact": {
        "customKind": true,
        "id": "id"
      }
    },
    {
      "displayName": "gs://spincue/nginx/manifest.yaml",
      "id": "1-gcs",
      "matchArtifact": {
        "type": "gcs/object",
        "artifactAccount": "gcs-account-1",
        "name": "gs://spincue/nginx/manifest.yaml",
        "id": "id"
      },
      "defaultArtifact": {
        "type": "gcs/object",
        "artifactAccount": "gcs-account-1",
        "name": "gs://spincue/nginx/manifest.yaml",
        "reference": "gs://spincue/nginx/manifest.yaml",
        "id": "id"
      }
    },
    {}
  ],
  "triggers": [
    {
      "type": "docker",
      "tag": ".*",
      "account": "docker-account-1",
      "expectedArtifactIds": [
        "1-docker"
      ],
      "enabled": true,
      "registry": "docker.io",
      "repository": "nginx"
    }
  ],
  "notifications": [
    {
      "type": "slack",
      "level": "pipeline",
      "when": [
        "pipeline.complete",
        "pipeline.failed"
      ],
      "address": "development",
      "message": {
        "pipeline.complete": {
          "text": "Deploy complete!"
        },
        "pipeline.failed": {
          "text": "Deploy failed!"
        }
      }
    }
  ],
  "lastModifiedBy": "fake@spincue.io"
}

About

CUE implementation of Spinnaker pipelines