Skip to main content

Steps

Steps are the deployment actions that run in each stage. They define what happens during a deployment -- synthesizing infrastructure, deploying containers, running scripts, waiting for approval, and more.

Step Configuration

steps:
- name: Deploy API
id: api_deploy
type: DEVRAMPS:ECS:DEPLOY
goes_after: ["Synthesize Infrastructure"]
params:
cluster_name: ${{ steps.infra.ecs_cluster_name }}
service_name: ${{ steps.infra.ecs_service_name }}
reference_task_definition: ${{ steps.infra.task_definition }}
image_url: ${{ stage.artifacts["API Image"].image_url }}

Step fields

FieldRequiredDescription
nameYesDisplay name for the step. Must be unique within the pipeline.
typeYesThe step type identifier (e.g., DEVRAMPS:ECS:DEPLOY). See Step Reference.
idNoShort alias for referencing this step's outputs in expressions.
paramsYesStep-specific parameters. Varies by step type.
goes_afterNoArray of step names or IDs that must complete before this step starts.

Step Ordering

By default, steps execute sequentially in the order they appear in the YAML. Each step waits for the previous step to complete.

steps:
# Step 1 runs first
- name: Synthesize Infrastructure
type: DEVRAMPS:TERRAFORM:SYNTHESIZE
params: { ... }

# Step 2 runs after Step 1 (implicit ordering)
- name: Deploy API
type: DEVRAMPS:ECS:DEPLOY
params: { ... }

# Step 3 runs after Step 2 (implicit ordering)
- name: Bake Period
type: DEVRAMPS:APPROVAL:BAKE
params: { ... }

Parallel steps

Use goes_after to run steps in parallel. A step with goes_after starts as soon as all the specified dependencies finish -- not when the previous step in the list finishes.

steps:
- name: Synthesize Infrastructure
id: infra
type: DEVRAMPS:TERRAFORM:SYNTHESIZE
params: { ... }

# These two steps run in parallel after infra completes
- name: Deploy API
type: DEVRAMPS:ECS:DEPLOY
goes_after: ["Synthesize Infrastructure"]
params: { ... }

- name: Run Migrations
type: DEVRAMPS:DATABASE:MIGRATE
goes_after: ["Synthesize Infrastructure"]
params: { ... }

# This step waits for both parallel steps to finish
- name: Bake Period
type: DEVRAMPS:APPROVAL:BAKE
goes_after: ["Deploy API", "Run Migrations"]
params: { ... }
Parallel step failure behavior

If one parallel step fails, other parallel steps that are already running will continue to completion (they are not cancelled). However, any steps that depend on the failed step will not start. The overall stage will be marked as failed.

This creates the following execution graph:

Synthesize Infrastructure

┌───┴───┐
▼ ▼
Deploy Migrations
API
└───┬───┘

Bake Period

Step IDs

The id field gives a step a short alias for use in expressions. This is useful when a step's name contains spaces or special characters.

steps:
- name: Synthesize Infrastructure
id: infra
type: DEVRAMPS:TERRAFORM:SYNTHESIZE
params: { ... }

- name: Deploy API
type: DEVRAMPS:ECS:DEPLOY
params:
# With id: use dot notation
cluster_name: ${{ steps.infra.ecs_cluster_name }}
# Without id: use bracket notation with the full name
cluster_name: ${{ steps["Synthesize Infrastructure"].ecs_cluster_name }}

Step Outputs

Many step types produce outputs that can be referenced by subsequent steps using expressions. For example, the Terraform Synthesize step outputs all of your Terraform output values, which you can then use in deploy steps:

# Terraform outputs become step outputs automatically
cluster_name: ${{ steps.infra.ecs_cluster_name }}

The available outputs depend on the step type:

Step TypeOutput Behavior
Terraform SynthesizeAll Terraform output values become step outputs automatically.
ECS DeployOutputs deployment status and service details.
EKS Deploy / HelmOutputs rollout status.
Script ExecuteOutputs are determined by the script's exit behavior.
Custom StepsOutputs are defined by the custom step's success() call.

Use steps.step_id.output_name (dot notation) or steps["Step Name"].output_name (bracket notation) to reference outputs.

Built-In Step Types

DevRamps provides step types for common deployment patterns. See the Step Reference for detailed documentation of each type.

Infrastructure

TypeDescription
DEVRAMPS:TERRAFORM:SYNTHESIZERun Terraform to provision and update infrastructure.

Deploy

TypeDescription
DEVRAMPS:ECS:DEPLOYDeploy a container image to Amazon ECS with rolling updates.
DEVRAMPS:EKS:DEPLOYUpdate container images on an EKS Kubernetes Deployment.
DEVRAMPS:EKS:HELMDeploy to EKS using Helm charts.
DEVRAMPS:CODEDEPLOY:DEPLOYDeploy to EC2 Auto Scaling Groups via AWS CodeDeploy.
DEVRAMPS:EC2:DEPLOYDeploy to a single EC2 instance via SSH or SSM.

Script & Database

TypeDescription
DEVRAMPS:SCRIPT:EXECUTERun an arbitrary script from your repository.
DEVRAMPS:DATABASE:MIGRATERun database migrations (Flyway, Liquibase, or custom).

Approval

TypeDescription
DEVRAMPS:APPROVAL:BAKEWait for a specified duration (soak test).
DEVRAMPS:APPROVAL:TESTRun automated tests; proceed on pass, block on fail.

Custom

TypeDescription
CUSTOM:*User-defined steps built with the DevRamps SDK.

VM-Based Steps

Some steps execute inside an isolated virtual machine (EC2 instance) with your repository cloned. These steps support additional configuration:

FieldDefaultDescription
host_size"small"VM size: "small", "medium", or "large".
architecture"linux/amd64"CPU architecture: "linux/amd64" or "linux/arm64".
dependencies[]System dependencies to install (e.g., ["node.24"]).

VM sizes

SizevCPUsMemory
small24 GB
medium48 GB
large816 GB

Available dependencies

DependencyDescription
node.24Node.js 24.x
node.22Node.js 22.x
node.20Node.js 20.x
node.18Node.js 18.x
python.3Python 3.x
go.1Go 1.x
java.21Java 21 (Corretto)
java.17Java 17 (Corretto)

Docker is available on all build VMs by default.

Which steps run in VMs?

VM-based step types include: EKS Deploy, EKS Helm, Script Execute, Database Migrate, and all custom steps. These steps clone your repository and execute in an isolated EC2 instance.

Non-VM steps (ECS Deploy, CodeDeploy Deploy, EC2 Deploy, Terraform Synthesize, approval steps) are orchestrated by DevRamps directly and interact with AWS APIs without needing a build VM.

- name: Run Custom Script
type: DEVRAMPS:SCRIPT:EXECUTE
params:
script_path: /scripts/deploy.sh
timeout: 30