Overview
Stretchy extends Continuous Integration (CI) software and similar systems, allowing them to run jobs on single-use virtual machines and containers. It scales automatically up and down while never overstepping the resource limits that you have set.
With Stretchy, you can run GitHub Actions workflows on your own hardware while enjoying the same experience as offered by the hosted product. It allows you to run jobs on hardware and software that is not available in the cloud, or share a single pool of machines between multiple CI systems.
Thanks to its use of pre-configured, immutable virtual machines and containers, it makes it significantly easier to create reproducible builds which helps you comply with the European Union’s Cyber Resilience Act.
All of that is possible without having to send your data elsewhere or being locked into a particular vendor’s products.
How It Works
Stretchy consists of two major components, Stretchy Orchestrator and Stretchy Node Agent.
Stretchy Orchestrator accepts jobs from job sources like GitHub or Jenkins to run them on their behalf. It uses labels attached to the job to determine what operating system a job should be run on and what hardware resources it needs. Finally, it schedules each job on a node for execution.
Stretchy Node Agent runs on a node that is connected to the Orchestrator. It receives provisioning requests for machines from the Orchestrator and uses a provisioner to create them. Machines can be virtual machines or a container. Once a machine is ready, the provisioner starts the job runner on the machine. The job runner is a piece of software supplied by the job source. It talks to the job source to receive whatever information is necessary to run the job before executing it. After the job is finished, the provisioner shuts the machine down and throws it away.
Stretchy runs where you want it to — on premise, in the cloud, or both. It only sends your data where you tell it to.
Stretchy provides constrained elasticity, hence its name. That means that it creates as many machines as needed, but only until configurable limits are reached.
Terminology
- Flavour
-
Defines how many hardware resources like CPU or RAM to assign to machine.
- Image
-
A preconfigured operating system image loaded onto the virtual machine or container.
- Job Runner
-
The program responsible for actually running the job on a machine. Examples for job runners are GitHub Actions Runner and Jenkins Agent.
- Job Source
-
Asks Stretchy to create machines on its behalf which it can run its job on. An example for such a job source would be Jenkins.
- Job
-
A unit of work that runs on a machine. A typical example for a job would be to compile a program.
- Machine
-
A virtual machine or container that runs a job. A machine is created for a specific job and never reused.
- Node
-
Hosts one or more machines.
- Provisioner
-
Creates the actual virtual machine or container in collaboration with a hypervisor or container runtime.