Self-service AWS CodePipeline platform — developers ship compliant CI/CD pipelines in minutes via dashboard, CLI, CDK, or AI prompt, while platform teams enforce policy-as-code guardrails, governance, and per-team isolation.
Setup, usage, and reference for Pipeline Builder. New here? Start with Getting Started below, then jump into Creating Pipelines.
deploy/plugins/ or create your ownbuild_image (build at upload) or prebuilt (pre-built image.tar bundled in zip).pipeline-builder/{orgId}/{secretName}. Injected at build time, never stored in images.| Document | Description |
|---|---|
| AWS Deployment | EC2 and EKS deployment, post-deploy setup, drift detection |
| Pipeline Manager (CLI) | pipeline-manager CLI — install the platform (provision), build/deploy pipelines, manage plugins, run audits |
| CDK Usage | PipelineBuilder construct, sources, stages, VPC, IAM, secrets |
| Compliance | Per-org rule engine with 18 operators, computed fields, audit trail |
| Roles & Permissions | Permission catalog, built-in Roles, requirePermission enforcement, session invalidation |
| Audit Events | Tamper-evident audit trail — hash-chain + /audit/verify, ingest security, durable spool, action catalog |
| Environment Variables | Configuration reference for all services |
| Samples | Pipeline configs for 7 languages and CDK patterns |
| Document | Description |
|---|---|
| API Reference | REST endpoints for pipelines, plugins, compliance, reporting, AI |
| Metadata Keys | 80 typed CodePipeline, CodeBuild, networking, and IAM configuration keys |
| Template Syntax | `` interpolation for pipeline configs and plugin specs |
| Plugin Catalog | 119 pre-built plugins across 10 categories |
| Org → Team Hierarchy | Teams nested one level under a parent org — RBAC, visibility, quota, and compliance inheritance |
| Billing Add-on Bundles | Stackable add-ons that raise an account’s pooled caps (seats, pipelines, plugins, storage) and unlock features |
The web UI at https://localhost:8443 provides visual pipeline and plugin management. The AI builder analyzes a Git repository (or a natural-language prompt) and generates the right stages and plugins automatically, streaming results over SSE. It works across five providers — Anthropic, OpenAI, Google, xAI, and Amazon Bedrock — and can fall back to a secondary provider if the primary one is unavailable.
Default credentials (created by init-platform.sh docker on a fresh install):
| Field | Value |
|---|---|
| Identifier | admin@internal |
| Password | SecurePassword123! |
init-platform.sh is non-interactive: it reads PLATFORM_IDENTIFIER and PLATFORM_PASSWORD from the environment and falls back to the defaults above when unset — on every target. On any non-local or production target, export real PLATFORM_IDENTIFIER / PLATFORM_PASSWORD before running — otherwise the admin is created with this trivial dev password. Change the password from the dashboard immediately after first login on anything reachable beyond your laptop.
npm install -g @pipeline-builder/pipeline-manager
export PLATFORM_TOKEN=<jwt-from-login>
pipeline-manager upload-plugin --file ./node-build.zip --organization my-org --name node-build --version 1.0.0
pipeline-manager create-pipeline --file ./pipeline-props.json --project my-app --organization my-org
pipeline-manager deploy --id <pipeline-id> --profile production
# Create a pipeline
curl -X POST https://localhost:8443/api/pipelines \
-H "Authorization: Bearer $TOKEN" -H "x-org-id: $ORG_ID" \
-H "Content-Type: application/json" \
-d '{
"project": "my-app",
"organization": "my-org",
"pipelineName": "my-app-pipeline",
"accessModifier": "private",
"props": {
"project": "my-app",
"organization": "my-org",
"synth": {
"source": { "type": "github", "options": { "repo": "my-org/my-app", "branch": "main" } },
"plugin": { "name": "cdk-synth", "version": "1.0.0" }
}
}
}'
# AI-generate a pipeline
curl -X POST https://localhost:8443/api/pipelines/generate \
-H "Authorization: Bearer $TOKEN" -H "x-org-id: $ORG_ID" \
-H "Content-Type: application/json" \
-d '{"prompt": "Build a Node.js app from GitHub, run tests, and deploy with CDK", "provider": "anthropic", "model": "claude-sonnet-4-20250514"}'
See the API Reference for the full endpoint list.
import { App, Stack } from 'aws-cdk-lib';
import { PipelineBuilder } from '@pipeline-builder/pipeline-core';
const app = new App();
const stack = new Stack(app, 'MyPipelineStack', {
env: { account: '123456789012', region: 'us-east-1' },
});
new PipelineBuilder(stack, 'MyPipeline', {
project: 'my-app',
organization: 'my-org',
synth: {
source: {
type: 'github',
options: { repo: 'my-org/my-app', branch: 'main',
connectionArn: 'arn:aws:codestar-connections:us-east-1:...:connection/...' },
},
plugin: { name: 'cdk-synth', version: '1.0.0' },
},
stages: [
{ stageName: 'Test', steps: [{ name: 'unit-tests', plugin: { name: 'jest', version: '1.0.0' } }] },
{ stageName: 'Deploy', steps: [{ name: 'deploy-prod', plugin: { name: 'cdk-deploy', version: '1.0.0' }, env: { ENVIRONMENT: 'production' } }] },
],
});
See Samples for more CDK patterns.
cd deploy/local/docker && ./bin/setup.sh # Start
cd deploy/local/docker && docker compose down # Stop
cd deploy/local/docker && docker compose down -v # Stop + remove volumes
bash deploy/local/minikube/bin/setup.sh # Start
bash deploy/local/minikube/bin/shutdown.sh # Stop
kubectl get pods -n pipeline-builder # Check
sudo bash /opt/pipeline/pipeline-builder/deploy/aws/ec2/bin/startup.sh # Start
sudo bash /opt/pipeline/pipeline-builder/deploy/aws/ec2/bin/shutdown.sh # Stop
sudo -u minikube kubectl get pods -n pipeline-builder # Check
cd deploy/aws/eks
bash bin/setup.sh --domain app.example.com --hosted-zone-id Z123 --region us-east-1 # Deploy
bash bin/shutdown.sh --cluster-name pipeline-builder --region us-east-1 --yes # Teardown
See AWS Deployment for full instructions and post-deploy setup.
init-platform.sh registers the admin user and loads plugins. The AWS deploys self-init by default (the provision default --init auto) — EC2 on first boot, EKS in setup.sh’s final phase (over a kubectl port-forward); on local/minikube provision runs it for you. You only run it by hand when you deployed with --init manual:
# Local / Minikube — interactive
./deploy/bin/init-platform.sh docker
./deploy/bin/init-platform.sh minikube
# EC2 (only if --init manual) — requires the minikube user context, on the box
sudo -u minikube PLATFORM_BASE_URL=https://your-ip bash /opt/pipeline/pipeline-builder/deploy/bin/init-platform.sh ec2
# EKS (only if --no-auto-init / --init manual) — run with kubectl access; it port-forwards to svc/nginx
env -u PLATFORM_BASE_URL ./deploy/bin/init-platform.sh eks
# Non-interactive with prebuilt images and controlled parallelism
PLUGIN_BUILD_STRATEGY=prebuilt PARALLEL_JOBS=2 ./deploy/bin/init-platform.sh docker
Key env vars: PLUGIN_BUILD_STRATEGY (build_image/prebuilt), PLUGIN_CATEGORY (comma-separated filter), PARALLEL_JOBS (upload concurrency, auto-lowered to 1 for prebuilt), FORCE_REBUILD (rebuild existing image.tar files).
Flags: --cleanup (remove plugin.zip/image.tar after upload), --continue-on-build-failure (proceed past per-plugin build failures), --force (rebuild the base images and the CodeBuild bootstrap image from scratch, ignoring the docker-cache / registry-tag skips — use after changing a base Dockerfile or the bootstrap image).
Admin credentials — init-platform.sh is non-interactive and reads them from the environment, falling back to defaults when unset:
| Env var | Default (used if unset) |
|---|---|
PLATFORM_IDENTIFIER |
admin@internal |
PLATFORM_PASSWORD |
SecurePassword123! |
The defaults apply on every target, so export real values on minikube/ec2/eks (or any shared/production environment) before running — otherwise the admin is created with the trivial dev password.
Fresh-install super-admin bootstrap.
init-platform.shregisters the admin into the reservedsystemorganization, and that org can only be created by an email listed in the platform’sBOOTSTRAP_SUPERADMIN_EMAILS(the controlled first-super-admin path). So on a fresh install,PLATFORM_IDENTIFIERmust be listed inBOOTSTRAP_SUPERADMIN_EMAILS. The stock defaults align (bothadmin@internal); if you set a customPLATFORM_IDENTIFIER, add it toBOOTSTRAP_SUPERADMIN_EMAILSand restart the platform before running init — otherwise thesystemregistration is rejected (403) and no super-admin is bootstrapped.
Organizations are the isolation boundary — each one is a self-contained workspace. Every resource — pipelines, plugins, compliance rules, quotas, secrets, and billing — is scoped to an organization. Organizations can optionally nest teams (see Teams below). This section covers admin tasks; new evaluators can skip ahead to Architecture.
Register an account, then create one or more organizations. The creator becomes the owner.
From the dashboard — open the Organizations page and click Create Organization. (Teams — organizations nested under a parent — are created from the Members page with Create Team; see Teams.)
From the API:
curl -X POST https://localhost:8443/api/organization \
-H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
-d '{"name":"acme-platform","displayName":"Acme Platform Team"}'
| Role | Capabilities |
|---|---|
| Owner | Full control — manage members, transfer ownership, delete org |
| Admin | Manage plugins, pipelines, compliance rules, quotas, and invite members |
| Member | Create and manage their own pipelines and plugins |
Invite members via email from the dashboard or API. A user can belong to multiple organizations.
Access is granted through Roles — a Role is a named set of fine-grained resource:action permissions (e.g. pipelines:write, plugins:publish, members:manage, roles:manage, compliance:write, billing:manage, reports:rollup, org:settings). A user’s effective permissions are the union of the Roles assigned to them — there is no separate role-based baseline. Every org seeds built-in Roles (Admin, Member; the system org also gets Super Admin), and admins with roles:manage can add custom Roles (e.g. “Billing Manager”); Super Admins hold all. Endpoints enforce writes via requirePermission(...), and :read permissions are enforced too (withholding e.g. reports:read blocks that read). registry:read/write are Super-Admin-only and never grantable to a custom Role.
Full catalog, built-in bundles, enforcement, and session-invalidation: see Roles & Permissions.
Manage Roles from the dashboard, or via the API:
GET|POST /api/organization/:id/roles # list / create Roles
PUT|DELETE /api/organization/:id/roles/:roleId # update / delete a Role
POST|DELETE /api/organization/:id/roles/:roleId/members/:uid # add / remove a Role member
A team is an organization nested one level under a parent (root) organization. Nesting is opt-in — every organization is a flat root until you create a team under it, and teams can’t have their own sub-teams (the hierarchy is one level deep). A team is a full organization: it has its own members, roles, quotas, secrets, and billing.
What the parent ↔ team relationship adds on top of plain organizations:
A user can belong to several organizations and teams at once and acts within one at a time (switch with the org switcher).
Creating / managing teams — on the dashboard Members page, an admin of a root org uses Create Team to nest a new team and Manage teams (per member) to add or remove a member across the org’s teams in one step. Via the API, POST /api/organization accepts a parentOrgId, and POST /api/organization/:id/members/bulk-add adds a user to several teams at once.
| Feature | Developer | Pro | Team | Enterprise |
|---|---|---|---|---|
| Pipeline / plugin CRUD | yes | yes | yes | yes |
| AI pipeline generation | - | yes | yes | yes |
| AI plugin generation | - | yes | yes | yes |
| Bulk operations | - | yes | yes | yes |
| Audit log | - | - | yes | yes |
| Custom integrations | - | - | - | yes |
| Priority support | - | yes | yes | yes |
| Plugins | 25 | 50 | 100 | 250 |
| Pipelines | 5 | 10 | 200 | 200 |
| Seats (members) | 1 | 1 | 10 | 25 |
| Price / month | $0 | $49 | $149 | $399 |
System org users always have access to all features. Base limits are raised by add-on bundles and are env-overridable (QUOTA_TIER_<TIER>_<LIMIT>, BILLING_PLAN_<TIER>_MONTHLY).
Add-on bundles — an account can stack purchasable add-ons on top of its tier to raise pooled caps (extra seats, pipelines, plugins, API/AI calls, storage) or unlock features (audit log, SSO). Effective limits = tier base + add-ons, shared across the account’s teams. See Billing Add-on Bundles.
flowchart TB
UI[Dashboard / CLI] --> NGINX[Nginx<br/>TLS + Routing]
NGINX --> PIPE[Pipeline Service]
NGINX --> PLUG[Plugin Service]
NGINX --> PLAT[Platform Service]
PIPE --> COMP[Compliance]
PLUG --> REP[Reporting]
PLAT --> QB[Quota / Billing]
COMP & REP & QB --> DB[(PostgreSQL / MongoDB / Redis)]
| Service | Purpose |
|---|---|
| Platform | Auth, orgs, users, JWT, RBAC |
| Pipeline | Pipeline CRUD, AI generation, CDK synthesis |
| Plugin | Plugin CRUD, Docker image builds, AI generation |
| Compliance | Per-org rule enforcement, policy management, audit trail |
| Reporting | Execution analytics via EventBridge ingestion |
| Quota | Resource limits per organization |
| Billing | Subscriptions and usage billing |
| Message | Org announcements and conversations |
For end-to-end request → build → deploy flow diagrams, see Architecture Flow. For the case for adopting Pipeline Builder org-wide, see Organization Benefits.
119 plugins across 10 categories. See the Plugin Catalog for the full list.
| Category | Count | Details |
|---|---|---|
| Language | 11 | Java, Python, Node.js, Go, Rust, .NET |
| Security | 34 | Snyk, SonarCloud, Trivy, Veracode, Semgrep |
| Quality | 17 | ESLint, Prettier, Checkstyle, Clippy, Ruff |
| Testing | 14 | Jest, Pytest, Cypress, Playwright, k6 |
| Artifact | 16 | Docker, ECR, GHCR, npm, PyPI, Maven |
| Deploy | 13 | Terraform, CloudFormation, Kubernetes, Helm, CDK |
| Infrastructure | 5 | CDK synth, manual approval, S3 cache, shell |
| Monitoring | 3 | Datadog, New Relic, Sentry |
| Notification | 5 | Slack, Teams, PagerDuty, email |
| AI | 1 | Dockerfile generation (multi-provider) |