Conveyor CI
website·Indexed 31 days ago
https://conveyor.open.ugA headless workflow orchestration engine designed for building custom CI/CD, automation, and deployment tools. It features a resource-driven architecture with pluggable drivers, a Go-based API server that can be embedded into applications, and Prometheus-style metrics for monitoring and tracing.
What's inside Conveyor CI
- Conveyor CI is a software framework designed to simplify the development of scalable and reliable CI/CD platforms. It aims to eliminate common pain points encountered when building custom CI/CD tools by providing a streamlined, developer-friendly paradigm for creating robust automation infrastructure.
Overview of Conveyor CI workflow orchestration
Conveyor CI is a headless, embeddable workflow orchestration runtime for platform developers. It manages the control plane logic—including workflow state, job lifecycles, state transitions, events, and logs—while delegating the actual execution of workloads to infrastructure-specific drivers. It is designed to be embedded into internal developer platforms, custom CI/CD systems, and automation layers, allowing developers to decouple orchestration from the underlying execution environment (such as Kubernetes, VMs, or edge devices).Overview of Conveyor CI Pipeline Architecture
Conveyor CI uses a conveyor-belt paradigm to manage CI/CD processes. The core components include:
- Resource: An internal object representing the item being acted upon (e.g., source code, an application, or a program).
- Drivers: Software components that perform specific actions on a Resource based on its state.
- Pipelines: Configuration objects that define the specific order of execution for drivers. Pipelines prevent the race conditions that occur when drivers execute simultaneously and allow for dependency management (e.g., ensuring a 'compile' driver finishes before an 'upload' driver starts).
- Pipeline Engine: A concurrent process in the core runtime that routes resources to drivers in the predefined order and manages the pipeline's state based on driver results.
Overview of Conveyor CI orchestration engine
Conveyor CI is a headless workflow orchestration engine and lightweight control plane used to build custom CI/CD systems, deployment platforms, internal developer platforms, or automation backends. Unlike all-in-one CI/CD products, it does not provide a built-in dashboard, hosted runners, or an opinionated execution environment. Instead, it provides the orchestration layer—including workflow state, job lifecycle management, event-driven execution, log streaming, and APIs—which can be embedded into a custom platform. The user provides the execution logic via drivers.Implement dynamic Variables in resources and pipelines
The project is introducing 'Variables', which are dynamic variables applied within resources and pipelines. These variables are designed to allow developers to customize workflow behavior dynamically.Select a Conveyor CI SDK for API interaction
Conveyor CI provides language-specific SDKs to simplify interactions with its API. The available SDKs are:
- Go: Stable release. Source code is available at
github.com/open-ug/conveyorand documentation is hosted on Go Doc. - Python: Currently in active development. Source code is located in the
sdk/pythondirectory of the main repository. - Rust: Currently in active development. Source code is located in the
sdk/rustdirectory of the main repository.
- Go: Stable release. Source code is available at
Implement the Conveyor CI Driver Runtime Architecture
To implement a language-specific SDK for Conveyor CI, the following core components must be developed:
- Driver Manager (Orchestrator): Manages NATS/JetStream connections, creates consumers, and executes the 'Try-Catch-Ack' loop.
- Driver (User Logic): Defines resource filters and implements the domain-specific
Reconcilelogic. - Driver Logger (Contextual Logger): Enforces structured logging and automatically attaches
run_id,driver_name, and timestamps to logs. - API Client (Stateless HTTP Client): Provides typed methods for REST API interactions regarding Secrets, Status updates, and Metadata.
Understand the Conveyor CI architecture
Conveyor CI separates the control plane (orchestration) from the drivers (execution).
- Control Plane (Provided by Conveyor CI): Responsible for job lifecycle management, state persistence, queuing, retries, log aggregation, and APIs.
- SDK (Provided by Conveyor CI): Provides a typed interface for interacting with the engine.
- Drivers (Provided by the User): The custom code responsible for actually running the workloads.
This separation allows for infrastructure independence, custom security models, hardware flexibility, and multi-environment support (e.g., edge devices, air-gapped networks, or custom hardware).
Implement custom execution via the Conveyor Driver Model
Conveyor CI uses a driver-based architecture to remain infrastructure-agnostic. The core control plane manages job lifecycles, retries, and cancellations, but delegates the actual workload execution to user-defined drivers. This allows workloads to be executed across diverse environments including:
- Kubernetes
- Physical servers
- Virtual Machines (VMs)
- Edge devices
- Custom infrastructure
Drivers are responsible for executing the workload and streaming logs and status updates back to the Conveyor control plane.
Understand Conveyor CI's Resource-Driven Architecture
Conveyor CI uses a modular, event-driven architecture where system state is stored as Resources and processed by Drivers. Instead of static pipelines, the system reacts to Resource mutations (creation, updates, or deletions). The architecture consists of three primary conceptual pillars:
- Resources: Store the current state of CI/CD processes.
- Resource Definitions: Define the schema and validation rules for Resources.
- Drivers: Watch for Resource changes and transform that state into actual CI/CD executions.
Conveyor CI Driver Architecture Overview
Conveyor CI utilizes an event-driven architecture based on NATS JetStream for low latency, replayability, and scalability. The system employs a language-agnostic runtime model where a shared conceptual runtime is implemented via language-specific SDKs.
Data Persistence:
- Events are stored in JetStream.
- Logs and Resources are stored by Conveyor CI.
Driver Lifecycle:
- Initialization
- Event subscription
- Reconciliation
- Logging and reporting
- Termination or scale-out
Integrate Conveyor CI as an external microservice
Conveyor CI can be integrated into a system as an external microservice. Communication is handled via its API, which can be accessed directly or through Client SDKs that abstract the API into utility functions.